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