Как стать автором
Обновить

Apache Zookeeper: гид для начинающих

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров3K

Разбираемся, что это за инструмент, какие у него есть плюсы, минусы и аналоги.

Александр Рыжков

Ментор 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

Представим, что у нас есть простая система из трех серверов, которые обрабатывают данные. Нам нужно выбрать один из них в качестве главного (мастера), а остальные сделать резервными. Если мастер выходит из строя, нужно автоматически выбрать нового мастера.

Описание:

  1. ZooKeeper Cluster: у нас есть кластер ZooKeeper из трех серверов (Z1, Z2, Z3). Z1 — лидер, остальные — ведомые.

  2. Servers: три сервера (S1, S2, S3), которые хотят участвовать в выборах мастера.

  3. /master Znode: эфемерный Znode в ZooKeeper, который будет представлять текущего мастера.

  4. S1 создает /master: сервер S1 пытается создать эфемерный Znode /master. Если ему это удается, он становится мастером.

  5. S2 и S3 наблюдают за /master: серверы S2 и S3 устанавливают наблюдателей (Watchers) на Znode /master.

  6. Отказ S1: если S1 выходит из строя, его сессия с ZooKeeper завершается и эфемерный Znode /master автоматически удаляется.

  7. Уведомление S2 и S3: S2 и S3 получают уведомление об удалении /master.

  8. Выборы нового мастера: 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 и МИФИ «Прикладной анализ данных и машинное обучение».

Теги:
Хабы:
+2
Комментарии3

Публикации

Ближайшие события