Узел координации
Узел координации (coordination node) — это объект в YDB, который позволяет клиентским приложениям распределённо координировать свои действия. Типовые сценарии использования узлов координации:
- Распределённые семафоры и мьютексы.
- Обнаружение сервисов (service discovery).
- Выбор лидера (leader election).
- Очереди задач (task queue).
- Публикация небольших объёмов данных с возможностью получать оповещения об изменениях.
- Эфеменрные блокировки произвольных заранее неизвестных сущностей.
Семафоры
Узлы координации позволяют создавать внутри себя семафоры и управлять ими. Типовые операции с семафорами:
- Создание (create);
- Захват (acquire);
- Освобождение (release);
- Получение содержимого (describe);
- Удаление (delete).
К семафору может быть приложен счётчик, который ограничивает количество одновременных его захватов, а также небольшой объём произвольных данных.
YDB поддерживает два типа семафоров: персистентные и эфемерные. Персистентный семафор перед захватом необходимо создать, он будет существовать либо до момента его явного удаления, либо до удаления узла координации, в котором он был создан. Эфемерные семафоры автоматически создаются в момент их первого захвата и удаляются при последнем освобождении, что удобно использовать, например, в сценариях распределённой блокировки.
Примечание
Семафоры в YDB не являются рекурсивными. Таким образом, захват и освобождение семафора являются идемпотентными операциями.
Использование
Работа с узлами координации и семафорами осуществляется через отдельные методы в YDB SDK.
Аналогичные системы
С помощью узлов координации YDB можно решать задачи, которые традиционно выполняются с помощью таких систем, как Apache Zookeeper, etcd, Consul и других. Если в проекте используется YDB для хранения данных, а также одна из этих сторонних систем для координации, то переход на узлы координации YDB может сократить количество систем, которые необходимо эксплуатировать и поддерживать.