Обмен технологиями

Основной принцип Zookeeper

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

ZooKeeper — это высокодоступная служба распределенной координации, которая широко используется в распределенных системах для решения проблемы согласованности распределенных систем. Ниже будут подробно представлены основные принципы ZooKeeper, включая его архитектуру, модель данных, основной механизм и протокол согласованности.

1. Архитектура

ZooKeeper использует архитектуру «главный-подчиненный», которая обычно состоит из лидера и нескольких последователей. Также существуют узлы-наблюдатели в качестве узлов без права голоса, чтобы разделить давление запросов на чтение.

  • Лидер: отвечает за обработку всех запросов на запись (запросов транзакций) и координацию протокола согласованности.
  • Последователь: Участвуйте в голосовании и синхронизируйте статус Лидера, а также обрабатывайте запросы на чтение.
  • Наблюдатель: Не участвует в голосовании, только обрабатывает запросы на чтение и пересылает запросы на запись от клиентов.

2. Модель данных

ZooKeeper хранит данные в древовидной структуре, аналогичной файловой системе, и каждый узел называется znode.

  • znode: Узел данных с информацией о пути, данных и состоянии.
  • Постоянный znode: узел сохраняется при отключении клиента, если он не удален явно.
  • Эфемерный узел: узел автоматически удаляется при отключении клиента.
  • Последовательный узел: к узлу автоматически добавляется возрастающий порядковый номер при его создании.

3. Основной механизм

3.1. Управление сеансом.

Между каждым клиентом и кластером ZooKeeper устанавливается сеанс для поддержания состояния соединения и управления временными узлами. ZooKeeper определяет состояние соединения клиента с помощью механизма пульса. Если в течение определенного периода времени пульс не получен, сеанс считается отключенным.

3.2. Синхронизация данных.

Чтобы обеспечить согласованность данных каждого узла, ZooKeeper использует механизм синхронизации данных. Когда узел-лидер обрабатывает запрос на запись, он отправляет операцию изменения всем узлам-ведомителям. Узел-ведомитель подтвердит принятие операции изменения, а узел-лидер в конечном итоге решит, была ли операция изменения успешной.

3.3. Механизм уведомления.

ZooKeeper поддерживает механизм Watch. Клиент может зарегистрировать Watch на указанном znode. Когда данные или дочерние узлы znode изменятся, ZooKeeper уведомит клиента.

4. Протокол согласованности

ZooKeeper использует протокол согласованности под названием ZAB (Zookeeper Atomic Broadcast) для обеспечения согласованности данных. ZAB состоит из двух этапов: этапа выборов и этапа вещания.

4.1. Этап выборов.

Когда кластер ZooKeeper запускается или узел Лидера выходит из строя, необходимы выборы для определения нового Лидера. Этап выборов в основном делится на следующие этапы:

  1. голосование: Все узлы голосуют за себя и отправляют голоса другим узлам.
  2. получать голоса: Каждый узел получает голоса от других узлов и подсчитывает результаты голосования.
  3. Обновить опрос: Если среди полученных голосов есть кандидат, набравший больше голосов, чем вы, обновите свой голос за этого кандидата.
  4. Определить лидера: Когда кандидат получает более половины голосов, он становится новым Лидером.
4.2. Этап трансляции.

После определения лидера наступает фаза трансляции. Лидер отвечает за обработку запроса на запись клиента и трансляцию операции изменения всем ведомым узлам. Конкретные шаги заключаются в следующем:

  1. предложение: после получения запроса на запись Лидер генерирует предложение и отправляет его всем ведомым узлам.
  2. подтверждать: После получения предложения узел Follower выполняет протоколирование и отправляет сообщение с подтверждением Лидеру.
  3. представлять на рассмотрение: после того, как узел-лидер получает более половины сообщений подтверждения, он отправляет предложение и уведомляет все узлы-последователи о результате отправки.
  4. Применить изменения: после того, как узел Follower получает уведомление о фиксации, он применяет операцию изменения.

5. Пример кода

Ниже приведен простой пример использования ZooKeeper, показывающий, как создавать узлы, читать данные узла и регистрировать Watch.

5.1. Введение зависимостей.

существовать pom.xml Представьте зависимость клиента ZooKeeper.

 

xmlКопировать код