LINUX.ORG.RU

Кластерный синглтон и другие примитивы потока выполнения на кластере

 , ,


0

7

Есть кусок кода, он разбросан на кластер для распределения нагрузки, но есть ньюанс: только один инстанс в один момент времени может выполнять определенную работу.

Например, людям оформившим подписку на новости, было бы грустно сто раз (по количеству нод) получить по почте оповещение о новостях, или еще хуже - сто раз получить списание денег с карточки за приобретение подписки.

Предлагаемое решение - кластерный синглтон. Ты делаешь класс, помечаешь его как @Singleton @Clustered, и всё происходит само. Он как-то магически поддерживается только в одном экземпляре, перезапускается на других нодах при падении, приходит к консенсусу по поводу shared mutable state если такой есть, и так далее.

Кроме синглтона существует еще куча стандартных примитивов: например, барьер (только когда N серверов вместе выполнят работу. они смогут идти дальше) или защелка с обратным отсчетом.

У нас в этом плане уже понаписано своих велосипедов, но интересно - как такие проблемы решает просвещенный мир? Какие используются опенсорсные фреймворки для этого?

(У меня конечно тот же самый гугл и есть идеи, но всё-таки хотелось бы узнать мнение достопочтенных экспертов ЛОРа, что они уважают и любят)

★★★★☆

блокчейн жи

anonymous ()

Гуглеж выдает гриды и Akka, но это не так интересно. Решение интересует именно сферическое в вакууме, безотносительно конкретных технологий или App серверов?
У нас вот к примеру кластер MESOS с Marathon, сходу решил бы проблему констреинтом деплоя на 1 инстанс[ и конкретную ноду]. В Kubernetes наверняка что-то подобное есть.
Действительно интересная тема.

bytecode ★★ ()
Последнее исправление: bytecode (всего исправлений: 2)

оповещение о новостях
получить списание денег с карточки за приобретение подписки

Не понял, а где у тебя тут очередь заданий?

anonymous ()

ебаный стыд, жава головного мозга, кластерный синглтон, просто закрою окно и глубоко вдохну

anonymous ()
Ответ на: комментарий от maxcom

Тогда уж любой shared ресурс, будь то база или хоть файл. Любой k/v store, типа Redis'а, на худой конец Consul.

bytecode ★★ ()

современный мир не разносит по кластеру то что одновременно только на одной ноде работает, современный мир делает мап-редьюс распределенный, хеширует, современный мир использует зукипер, и прежде чем ДЕЛАТЬ ЧИТАЕТ ЛИТЕРАТУРУ, хотя-бы базу по распределенным вычислениям 90-х 2000-х годов, ебучий ты инженер блять. синглтон на кластере, магический декоратор, где-то там как-то делает. ебаный пиздец.

anonymous ()
Ответ на: комментарий от bytecode

человек как инженер полный ноль, разве не понятно? у него проблема в днк, а сделать это можно хоть на файлах хоть на флажках в жопе.

anonymous ()
Ответ на: комментарий от anonymous

Какой в жопу кластер синглтон, разупорись. Пусть чувак посмотрит на мнезию и тоже разупорится.

slaykovsky ★★★ ()
Ответ на: комментарий от bytecode

да, действительно, ведь это важно в бизнес-коде приложения знать о том что оно запустилось на одной ноде из кластера (как раньше один инстанс намашине, а давайте-ка опросим всю сеточку перед запуском? либо ты толстишь, тогда это уже нано, либо ты впору автору.

anonymous ()
Ответ на: комментарий от slaykovsky

чуваку уже не помочь, а я простебал, разве ты не понял юмор?

anonymous ()
Ответ на: комментарий от bytecode

Тогда уж любой shared ресурс, будь то база или хоть файл. Любой k/v store, типа Redis'а, на худой конец Consul.

Это только когда у тебя есть вечно-живой master узел, который может тебе разруливать все вопросы.

maxcom ★★★★★ ()
Ответ на: комментарий от maxcom

емнип есть kv которые переживают падение мастера

Deleted ()
Ответ на: комментарий от anonymous

А ещё ТС работает в Сбербанке и наверняка рулит твоими, анонимус, деньгами :)

Harald ★★★★★ ()
Ответ на: комментарий от anonymous

Бизнес-код должен знать, что приложение запущено на одной ноде? Какую ты там сеточку смотреть собрался? Ты в принципе представляешь себе зачем нужен MESOS и как поверх него фреймвок Marathon работает?
И да, я не говорю, что ТС не хочет странного. Just saying.

bytecode ★★ ()
Последнее исправление: bytecode (всего исправлений: 1)
Ответ на: комментарий от anonymous

вместо вписывания одной аннотации, ты предложил переписать тонну кода и притащить кучу связанных на синюю изоленту хадупов, которые придется пожизненно пердолить чтобы не развалились. «Костыли и велосипеды: никогда не сдавайся»

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

Стиви, ты просто не представляешь размер залупы, которую ты сейчас элегантно (важно!) пытаешься прицепить себе на лацкан

shty ★★★★★ ()

Мы как белые люди такие вещи решаем пулами и привязкой к ним юзеров/соединений/прочее.

ya-betmen ★★★★★ ()
Ответ на: комментарий от cnupm

тем же чем запись в лок-файла в tmp, давайте лучше поговрим о том что человек не читавший даже за хадуп начинает придумывать ПАТТЕРНЫ НА КЛАСТЕРАХ, ок?

я хадуп не в качестве решения привел, и костыли с велосипедами здесь это декоратор КЛАСТЕРЕД СИНГЛТОН блять, зачем же мне запускать и размазывать (вносить в провижин блять) тулзу которая должна на одной ноде работать? ты вообзе понимаешь что такое кластер и зачем нужны распределенные вычисления? что такое мап-редюс, что случится со списком юзеров если рассыльщик размазан по кластеру? просто кошмар какой-то, и я еще должен это все писапть в 5 утра, ну.

anonymous ()
Ответ на: комментарий от anonymous

но нет, вместо шардинга мы напишем синглтон, рассыльщик размажем по кластеру а запускаться будет он только на одной ноде одновременно, так-то карл, нам поможет кластеред синглтон 9который будет опрашивать весь кластер на предмет А НЕ запущена ли уже эта программа где-то еще, о гонках в таком опросе я уже молчу даж, а зукипер сразу убивает понятие кластера, потому легче просто не размазывать на инстансы то что в единичном виде существует а предусмотреть аварийный запуск из другого места как максимум, но не декоратором кластеред синглтон епт

anonymous ()
Ответ на: комментарий от anonymous

уймись, деточка: ты вполне можешь оттранслировать аннотацию @Clustered @Singleton во что хочешь, включая зукипер. Во время конпеляции помеченный класс выдергивается мавеном в отдельную единицу сборки, оборачивается приложением на Spring Boot с использованием какого-нибудь Spring Cloud Zookeeper

не хочу здесь влиять на общественное мнение и называть конкретные тулзы. Хочется узнать, как люди это используют сами.

Например, кто-то может каждый раз писать императивную лапшу взаимодействия по зукиперу вручную (в туториале рассказывается как написать барьер), а можно организовать библиотеку типичных взаимодействий и спрятать её за магией аннотаций или магией функционального программирования.

stevejobs ★★★★☆ ()
Ответ на: комментарий от anonymous

сам я хотел услышать что-нибудь про аналоги гугловского Chubby, Paxos, Raft и прочее про консенсус и distributed lock management

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

чем тебя не устраивает подход нормальных людей? передача сообщений

тем что там базворд «@Cluster» смотрится глупо?

anonymous ()
Ответ на: комментарий от stevejobs

дистрибьютед лок это как синхронайз для многопоточности, сечешь к чему я

зы ответы не читал, лень тратить время на этих людей больше

anonymous ()

как такие проблемы решает просвещенный мир?

beanstalkd

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.