Выбор лидера (leader election)
Рассмотрим сценарий, где несколько экземпляров приложения хотят выбрать лидера и всегда знать, кто им является.
Этот сценарий можно реализовать с помощью семафоров в узлах координации YDB следующим образом:
- Создаётся семафор (например, с именем
my-service-leader) сLimit=1. - Все экземпляры приложения выполняют
AcquireSemaphoreсCount=1, указывая вDataсвой endpoint. - Только у одного экземпляра приложения вызов завершится быстро, остальные встанут в очередь. Тот, у кого вызов завершился успешно, становится текущим лидером.
- Все экземпляры приложения выполняют
DescribeSemaphoreсWatchOwners=trueиIncludeOwners=true. В результате вызова вOwnersбудет максимум один элемент, изDataузнаётся endpoint текущего лидера. - При смене лидера вызывается
OnChanged. В этом случае экземпляры приложения выполняют аналогичный вызовDescribeSemaphoreи узнают endpoint нового лидера.
Была ли статья полезна?
Предыдущая
Следующая