Что такое Zookeeper и для чего он используется
Что проверяют
Представляете ли вы, как устроена координация в распределённой системе, которую тестируете. Вопрос задают не ради определения: важно, сможете ли вы проверить поведение при падении узла и не спишете ли всё на моргнувшую сеть.
Как отвечать
ZooKeeper это сервис координации: небольшое иерархическое дерево узлов (znode), которое несколько приложений видят одинаково. Это не база и не кеш, в узле держат конфигурацию, признак живости или адрес, а не пользовательские данные.
Механизмы, которые стоит назвать: эфемерный узел живёт, пока жива сессия клиента, и исчезает сам при её обрыве; последовательный узел даёт упорядоченные имена, на чём строят распределённые блокировки и выбор лидера; наблюдатель уведомляет об изменении один раз, после чего подписку ставят заново. Ансамбль работает по кворуму: запись проходит через лидера и подтверждается большинством, поэтому узлов обычно три или пять, а при потере большинства кластер перестаёт принимать запись.
Типовое применение: выбор лидера, блокировки, реестр живых узлов, общая конфигурация. Тестировщику полезно уметь смотреть дерево консольным клиентом:
ls /brokers/ids
get /app/configГде спотыкаются
Называют ZooKeeper базой данных или очередью. Размер значения в узле по умолчанию мал, поток записи он держит скромный, и попытка хранить там состояние приложения кончается деградацией всего кластера.
Уверенно заявляют, что Kafka без ZooKeeper не живёт. В новых версиях метаданные держит встроенный кворум, а ZooKeeper из поставки убран, и такая фраза сразу выдаёт знания по старым статьям.
Проверяют только то, что сервис поднят. Интересное начинается на обрыве: сессия истекает, эфемерные узлы пропадают, запускается перевыбор лидера. Тест должен показать, что приложение переживает восстановление связи, не дублирует обработку и предсказуемо ведёт себя при потере кворума.