LINUX.ORG.RU

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

 , ,


0

7

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

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

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

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

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

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

★★★☆☆

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

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

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

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

anonymous ()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

stevejobs ★★★☆☆ ()