Есть кусок кода, он разбросан на кластер для распределения нагрузки, но есть ньюанс: только один инстанс в один момент времени может выполнять определенную работу.
Например, людям оформившим подписку на новости, было бы грустно сто раз (по количеству нод) получить по почте оповещение о новостях, или еще хуже - сто раз получить списание денег с карточки за приобретение подписки.
Предлагаемое решение - кластерный синглтон. Ты делаешь класс, помечаешь его как @Singleton @Clustered, и всё происходит само. Он как-то магически поддерживается только в одном экземпляре, перезапускается на других нодах при падении, приходит к консенсусу по поводу shared mutable state если такой есть, и так далее.
Кроме синглтона существует еще куча стандартных примитивов: например, барьер (только когда N серверов вместе выполнят работу. они смогут идти дальше) или защелка с обратным отсчетом.
У нас в этом плане уже понаписано своих велосипедов, но интересно - как такие проблемы решает просвещенный мир? Какие используются опенсорсные фреймворки для этого?
(У меня конечно тот же самый гугл и есть идеи, но всё-таки хотелось бы узнать мнение достопочтенных экспертов ЛОРа, что они уважают и любят)