Разбираемся, что это за инструмент, какие у него есть плюсы, минусы и аналоги.
Александр Рыжков
Ментор Skillfactory, руководитель команды LightAutoML и 4х Kaggle Grandmaster
Что такое Apache ZooKeeper и зачем он нужен
В распределенных системах инструмент Apache ZooKeeper помогает разным частям (серверам, приложениям, процессам) работать согласованно.
Зачем это нужно?
-
Координация: ZooKeeper помогает разным частям системы «договариваться» о том, кто за что отвечает, кто главный, а кто — резервный. Если бы в оркестре скрипки сами решали, когда им вступать, — получился бы хаос!
-
Конфигурация: ZooKeeper хранит настройки и параметры для всей системы. Как ноты для оркестра — все видят одну и ту же партитуру.
-
Обнаружение сбоев: ZooKeeper следит за «здоровьем» каждого участника системы. Если кто-то «заболел» (сервер упал, приложение зависло), ZooKeeper сообщит об этом другим, и они смогут перестроиться. Представьте, что у вас в оркестре заболел скрипач, — дирижер (ZooKeeper) быстро найдет ему замену.
-
Блокировки: В распределенных системах часто бывает, что несколько процессов хотят одновременно получить доступ к одному и тому же ресурсу (например, файлу). ZooKeeper помогает им «встать в очередь» и не мешать друг другу, как регулировщик на перекрестке.
Из чего состоит Apache ZooKeeper
-
Znode (узел). Это основной строительный блок ZooKeeper. Znode — как папка в файловой системе, она может содержать не только другие папки, но и данные (небольшие объемы информации, например настройки). Znode бывают:
-
Постоянные (Persistent): существуют, пока их явно не удалят.
-
Эфемерные (Ephemeral): существуют, пока жив создавший их клиент (приложение). Если клиент «умирает», эфемерный Znode автоматически удаляется. Это очень удобно для обнаружения сбоев.
-
Последовательные (Sequential): к имени Znode автоматически добавляется уникальный счетчик. Это полезно для создания упорядоченных очередей.
-
Клиент (Client). Это приложение, которое подключается к ZooKeeper и взаимодействует с ним. Клиенты могут создавать, читать, изменять и удалять Znode.
-
Сервер (Server). ZooKeeper работает как кластер серверов. Один из серверов назначают лидером (Leader), остальные — ведомыми (Follower). Лидер обрабатывает все запросы на запись, а ведомые реплицируют данные, обеспечивая отказоустойчивость. Если лидер выходит из строя, назначают нового.
-
Сессия (Session). Когда клиент подключается к ZooKeeper, устанавливается сессия. У сессии есть таймаут — если клиент не подает признаков жизни в течение этого времени, сессия считается завершенной и все эфемерные Znode, созданные этим клиентом, удаляются.
-
Наблюдатель (Watcher). Клиент может подписаться на изменения определенного Znode. Если Znode изменится (данные обновятся, Znode удалят), клиент получит уведомление.
-
ACL (Access Control List), списки контроля доступа. Позволяют разграничивать права на чтение и запись для узлов.
Пример работы Apache ZooKeeper
Представим, что у нас есть простая система из трех серверов, которые обрабатывают данные. Нам нужно выбрать один из них в качестве главного (мастера), а остальные сделать резервными. Если мастер выходит из строя, нужно автоматически выбрать нового мастера.

Описание:
-
ZooKeeper Cluster: у нас есть кластер ZooKeeper из трех серверов (Z1, Z2, Z3). Z1 — лидер, остальные — ведомые.
-
Servers: три сервера (S1, S2, S3), которые хотят участвовать в выборах мастера.
-
/master Znode: эфемерный Znode в ZooKeeper, который будет представлять текущего мастера.
-
S1 создает /master: сервер S1 пытается создать эфемерный Znode /master. Если ему это удается, он становится мастером.
-
S2 и S3 наблюдают за /master: серверы S2 и S3 устанавливают наблюдателей (Watchers) на Znode /master.
-
Отказ S1: если S1 выходит из строя, его сессия с ZooKeeper завершается и эфемерный Znode /master автоматически удаляется.
-
Уведомление S2 и S3: S2 и S3 получают уведомление об удалении /master.
-
Выборы нового мастера: S2 и S3 пытаются создать /master. Тот, кому это удастся первым, становится новым мастером.
Таким образом, ZooKeeper обеспечивает автоматическое переключение мастера в случае сбоя, без ручного вмешательства.
Какие компании применяют Apache ZooKeeper в своей работе
-
Yahoo! ZooKeeper изначально разработали в Yahoo! для координации работы Hadoop (системы распределенной обработки данных). Его используют, чтобы управлять конфигурацией, выбирать лидера и обеспечивать отказоустойчивость в различных компонентах Hadoop. ZooKeeper в инфраструктуре Yahoo! отвечает за надежную работу многих сервисов.
-
Netflix. Netflix использует ZooKeeper для управления облаком. Он помогает обнаруживать сервисы, управлять конфигурацией и координировать распределенные задачи. ZooKeeper обеспечивает надежную работу системы, даже при большом количестве серверов и постоянных изменениях. Благодаря этому Netflix может быстро адаптироваться к меняющимся нагрузкам и обеспечивать бесперебойную работу для пользователей.
-
X (бывший Twitter) использует ZooKeeper для координации работы сервисов. Он помогает в управлении очередями сообщений, распределении задач и обеспечении отказоустойчивости. ZooKeeper отвечает за надежность доставки твитов и обработку больших объемов данных.
-
LinkedIn использует ZooKeeper для координации и синхронизации различных сервисов и компонентов платформы. ZooKeeper помогает LinkedIn обеспечивать консистентность данных и надежность работы распределенных систем. Благодаря ему LinkedIn может масштабировать свою инфраструктуру и поддерживать высокую доступность сервисов для миллионов пользователей.
Плюсы и минусы использования Apache ZooKeeper
Плюсы:
-
Надежность и отказоустойчивость. ZooKeeper разработан для работы в распределенной среде и способен выдерживать сбои отдельных серверов. Данные реплицируются между несколькими серверами, они сохранятся, даже если часть кластера выйдет из строя. Автоматический выбор лидера гарантирует, что система продолжит работать без ручного вмешательства.
-
Простота использования. У ZooKeeper простой для взаимодействия API. Разработчикам не нужно вникать в сложные детали реализации распределенных алгоритмов, достаточно использовать готовые примитивы, предоставляемые ZooKeeper. Это значительно упрощает разработку распределенных приложений.
-
Широкая распространенность. ZooKeeper — это зрелый и проверенный временем проект, который используется многими компаниями. У него большое сообщество пользователей и разработчиков, готовых помочь в решении проблем. Доступно множество документации, примеров и готовых библиотек для разных языков программирования.
Минусы:
-
Ограничение на размер данных. ZooKeeper не предназначен для хранения больших объемов данных. Каждый Znode может содержать лишь ограниченный объем информации (обычно до 1 Мб). Это связано с особенностями реализации ZooKeeper и необходимо для высокой производительности.
-
Сложность настройки. Настройка кластера ZooKeeper может быть непростой задачей, особенно для новичков. Нужно понимать принципы работы распределенных систем и особенности конфигурации ZooKeeper. Неправильная настройка может привести к проблемам с производительностью и отказоустойчивостью.
-
Единая точка отказа (в некоторых случаях). Хотя ZooKeeper — распределенная система, в некоторых случаях он может стать единой точкой отказа. Например, если все серверы ZooKeeper одновременно выйдут из строя, система перестанет работать. Чтобы избежать этого, необходимо тщательно планировать архитектуру и обеспечивать резервирование.
-
ZAB (ZooKeeper Atomic Broadcast) — протокол, используемый для обеспечения консистентности, может быть сложен для понимания.
Сравнение Apache ZooKeeper с аналогами
|
Система |
Плюсы |
Минусы |
|
ZooKeeper |
+ Надежность, отказоустойчивость. + Простота использования. + Широкая распространенность, зрелость проекта, большое сообщество. |
— Ограничение на размер данных. — Сложность настройки. — Потенциальная единая точка отказа. ZAB может быть сложен. |
|
Consul |
+ Поддержка обнаружения сервисов (service discovery). + Встроенный механизм проверки здоровья (health checks). + Поддержка нескольких дата-центров. + Удобный веб-интерфейс. + Поддержка HTTP API. |
— Более сложная архитектура, чем у ZooKeeper и etcd, может быть сложнее в настройке. |
|
Apache Curator |
+ Набор высокоуровневых утилит и рецептов, упрощающих работу с ZooKeeper. + Предоставляет готовые решения для распространенных задач, таких как выбор лидера, распределенные блокировки и очереди. + Уменьшает количество boilerplate-кода и упрощает разработку. |
— Является не самостоятельной системой, а надстройкой над ZooKeeper. Требует наличия ZooKeeper. — Добавляет дополнительный уровень абстракции, который может быть избыточным в простых случаях. |
|
etcd |
+ Простота настройки и использования, поддержка HTTP/JSON API. + Хорошая производительность. + Активное развитие. + Используется в Kubernetes. |
— Менее зрелый проект по сравнению с ZooKeeper, меньше сообщество. |
Что выбрать?
-
Если вам нужны максимальная надежность и зрелость и вы готовы к некоторой сложности настройки — выбирайте ZooKeeper.
-
Если вам нужна простота и вы используете Kubernetes, etcd — отличный выбор.
-
Если вам нужны расширенные возможности, такие как обнаружение сервисов и поддержка нескольких дата-центров, — обратите внимание на Consul.
-
Если вы уже используете ZooKeeper и хотите упростить разработку — используйте Apache Curator.
Обучиться работе с моделями машинного обучения: от базовой математики до написания собственного алгоритма — можно на совместной магистратуре Skillfactory и МИФИ «Прикладной анализ данных и машинное обучение».
ссылка на оригинал статьи https://habr.com/ru/articles/905760/
Добавить комментарий