28 вопросов для интервью ZooKeeper, которые больше всего задавали интервьюеры в 2019 году

Java

предисловие

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

Вопросы интервью ZooKeeper

1. Вопросы для собеседования с ZooKeeper?
2. Что предоставляет ZooKeeper?
3. Файловая система Zookeeper
4. Протокол ZAB?
5. Четыре типа узлов данных Znode
6. Механизм Zookeeper Watcher -- уведомление об изменении данных
7. Клиент регистрирует реализацию Watcher
8. Реализация Watcher для серверной обработки
9. Наблюдатель обратного вызова клиента
10. Механизм контроля разрешений ACL
11. Функции Chroot
12. Управление сессиями
13. Роли сервера
14. Рабочий статус сервера под Zookeeper
15. Синхронизация данных
16. Как zookeeper обеспечивает последовательную согласованность транзакций?
17. Зачем в распределенном кластере Мастер?
18. Как бороться с простоями zk node?
19. Разница между балансировкой нагрузки zookeeper и балансировкой нагрузки nginx
20. Zookeeper, у которого есть несколько моделей развертывания?
21. Какое минимальное количество машин, необходимых для кластера? Каковы правила кластера?
22. Поддерживает ли кластер динамическое добавление машин?
23. Являются ли уведомления мониторинга Zookeeper для узлов постоянными? Почему не постоянный?
24. Что такое Java-клиенты Zookeeper?
25. Что такое чубби и чем он отличается от смотрителя зоопарка?
26. Произнесите несколько общих команд смотрителя зоопарка.
27. Связь и различие алгоритмов ZAB и PAXOS?
28. Типичные сценарии применения Zookeeper

Анализ ответов на вопросы интервью ZooKeeper

1. Что такое ZooKeeper?

ZooKeeper — это служба распределенной координации с открытым исходным кодом, которая является менеджером кластера, отслеживающим состояние каждого узла в кластере и выполняющим следующую разумную операцию в соответствии с отзывами, отправленными узлом. В конечном итоге пользователям предоставляется простой в использовании интерфейс и система с высокой производительностью и стабильными функциями.
Распределенные приложения могут реализовывать такие функции, как публикация/подписка на данные, балансировка нагрузки, службы именования, распределенная координация/уведомление, управление кластером, выбор мастера, распределенные блокировки и распределенные очереди на основе Zookeeper.
Zookeeper гарантирует следующие характеристики распределенной согласованности:
(1) Последовательная согласованность
(2) атомарность
(3) Один вид
(4) Надежность
(5) В режиме реального времени (возможная согласованность)
Запрос клиента на чтение может быть обработан любой машиной в кластере.Если у запроса на чтение есть прослушиватель, зарегистрированный на узле, прослушиватель также обрабатывается подключенным компьютером zookeeper. Для запросов на запись эти запросы будут отправлены на другие компьютеры zookeeper одновременно, и запрос не будет возвращать успех, пока не будет достигнуто соглашение. Следовательно, по мере увеличения количества машин кластера в zookeeper пропускная способность запросов на чтение будет увеличиваться, а пропускная способность запросов на запись будет уменьшаться.
Порядок — очень важная функция в zookeeper.Все обновления упорядочены глобально, и каждое обновление имеет уникальную отметку времени, которая называется zxid (идентификатор транзакции Zookeeper). Запрос на чтение будет упорядочен только относительно обновления, то есть возвращаемый результат запроса на чтение будет иметь последний zxid зоопарка.

2. Что предоставляет ZooKeeper?

(1) Файловая система
(2) Механизм уведомления

3. Файловая система Zookeeper

Zookeeper предоставляет многоуровневое пространство имен узлов (узлы называются znodes). В отличие от файловой системы, эти узлы могут устанавливать связанные данные, а в файловой системе только файловый узел может хранить данные, а узел каталога не может.
Чтобы обеспечить высокую пропускную способность и низкую задержку, Zookeeper поддерживает эту древовидную структуру каталогов в памяти, что делает Zookeeper неспособным хранить большой объем данных, а верхний предел хранения данных для каждого узла составляет 1 МБ.

4. Протокол ZAB?

Протокол ZAB — это атомарный широковещательный протокол, специально разработанный для службы распределенной координации Zookeeper для поддержки восстановления после сбоев.
Протокол ZAB включает два основных режима: восстановление после сбоя и широковещательная рассылка сообщений.
Когда весь кластер zookeeper только что был запущен или сервер-лидер не работает, перезапускается или из-за сбоя сети более половины серверов поддерживают нормальную связь с сервером-лидером, все процессы (серверы) переходят в режим аварийного восстановления, сначала выберите новый ведущий сервер, а затем кластер Последующий сервер начинает синхронизацию данных с новым ведущим сервером Когда более половины машин в кластере завершают синхронизацию данных с ведущим сервером, они выходят из режима восстановления и переходят в широковещательную рассылку сообщений Ведущий сервер начинает получать запросы на транзакции от клиента и генерировать предложения по транзакциям для проведения транзакций.

5. Четыре типа узлов данных Znode

(1) PERSISTENT-постоянный узел
Узлы существуют в Zookeeper, если только они не удалены вручную
(2) EPHEMERAL-временный узел
Жизненный цикл временной ноды привязан к клиентской сессии.Если клиентская сессия недействительна (клиент отключен от zookeeper, сессия не может быть недействительной), то все временные ноды, созданные клиентом, будут удалены.
(3) PERSISTENT_SEQUENTIAL — постоянный узел последовательности
Основные функции такие же, как и у постоянных узлов, за исключением того, что добавляется атрибут последовательности, а к имени узла добавляется автоинкрементное целое число, поддерживаемое родительским узлом.
(4) EPHEMERAL_SEQUENTIAL-узел временной последовательности
Основные функции такие же, как и у временных узлов, но добавляется атрибут последовательности, а к имени узла добавляется автоинкрементное целое число, поддерживаемое родительским узлом.

6. Механизм Zookeeper Watcher -- уведомление об изменении данных

Zookeeper позволяет клиенту зарегистрировать прослушиватель Watcher с Znode на сервере.Когда некоторые указанные события на сервере запускают этот Watcher, сервер отправит уведомление о событии указанному клиенту для реализации функции распределенного уведомления, а затем клиент Следите за Наблюдателем. Уведомляйте о состояниях и типах событий, чтобы вносить изменения в бизнес.
Рабочий механизм:
(1) Клиент регистрирует наблюдателя
(2) Наблюдатель за серверной обработкой
(3) Наблюдатель обратного вызова клиента
Сводка наблюдения функций:
(1) Одноразовый
Будь то сервер или клиент, после запуска Watcher Zookeeper удалит его из соответствующего хранилища. Этот дизайн эффективно снижает нагрузку на сервер, иначе для узлов, которые очень часто обновляются, сервер будет продолжать отправлять уведомления о событиях клиенту, что оказывает большую нагрузку на сеть и сервер.
(2) Последовательное выполнение клиента
Процесс обратного вызова клиентского Watcher представляет собой процесс последовательной синхронизации.
(3) Легкий
3.1 Уведомление Watcher очень простое, оно только сообщает клиенту, что произошло событие, и не объясняет конкретное содержание события.
3.2 Когда клиент регистрирует Watcher на сервере, он не передает реальную объектную сущность Watcher клиента серверу, а только использует атрибут логического типа, чтобы пометить его в клиентском запросе.
(4)watcher event 异步发送 watcher 的通知事件从 server 发送到 client 是异步的,这就存在一个问题,不同的客户端和服务器之间通过 socket 进行通信,由于网络延迟或其他因素导致客户端在不通的时刻监听到事件,由于 Zookeeper 本身提供了 ordering guarantee,即客户端监听事件后,才会感知它所监视 znode发生了变化。 Поэтому мы не можем ожидать, что сможем отслеживать каждое изменение узла с помощью Zookeeper. Zookeeper может гарантировать только конечную согласованность, а не сильную согласованность.
(5) Зарегистрируйте наблюдатель getData, exists, getChildren
(6) Триггерный наблюдатель создает, удаляет, устанавливает данные
(7) Когда клиент подключается к новому серверу, часы будут запущены любым событием сеанса. Когда соединение с сервером потеряно, часы не могут быть получены. И когда клиент повторно подключается, все ранее зарегистрированные часы будут зарегистрированы повторно, если это необходимо. Обычно это совершенно прозрачно. Существует только один особый случай, когда наблюдение может быть потеряно: существующее наблюдение за несозданным znode, если оно было создано во время отключения клиента и впоследствии удалено до подключения клиента, в этом случае событие наблюдения может быть потеряно.

7. Клиент регистрирует реализацию Watcher

(1) Вызвать три API getData()/getChildren()/exist() и передать объект Watcher
(2) Отметьте запрос запроса и инкапсулируйте Watcher в WatchRegistration.
(3) Инкапсулировать его в объект Packet и отправить серверу для отправки запроса
(4) После получения ответа от сервера зарегистрируйте Watcher в ZKWatcherManager для управления
(5) Запрос возвращается для завершения регистрации.

8. Реализация Watcher для серверной обработки

(1) Сервер получает Watcher и сохраняет его
Получите запрос клиента, обработайте запрос, чтобы определить, следует ли регистрировать Наблюдателя, и, если необходимо, подключите путь узла данных к ServerCnxn (ServerCnxn представляет собой соединение между клиентом и сервером и реализует интерфейс процесса Наблюдателя). , который в настоящее время можно рассматривать как объект Watcher. ) хранятся в WatchTable и watch2Paths WatcherManager.
(2) Триггер наблюдателя
В качестве примера возьмем сервер, получающий запрос транзакции setData() для запуска события NodeDataChanged:
2.1 Инкапсуляция WatchedEvent
Инкапсулировать статус уведомления (SyncConnected), тип события (NodeDataChanged) и путь узла в объект WatchedEvent.
2.2 Наблюдатель запросов
Найти Watcher на основе пути к узлу из WatchTable
2.3 Не найдено означает, что ни один клиент не зарегистрировал Watcher на узле данных
2.4 Найдите, извлеките и удалите соответствующий Watcher из WatchTable и Watch2Paths (из этого видно, что Watcher одноразовый на стороне сервера, и при однократном срабатывании он будет невалидным)
(3) Вызовите метод процесса, чтобы вызвать Watcher
Процесс здесь в основном заключается в отправке уведомлений о событиях Watcher через TCP-соединение, соответствующее ServerCnxn.

9. Наблюдатель обратного вызова клиента

Клиентский поток SendThread получает уведомление о событии и передает его потоку EventThread для обратного вызова Наблюдателя.
Механизм Watcher клиента также является одноразовым, после срабатывания Watcher становится недействительным.

10. Механизм контроля разрешений ACL

UGO (Пользователь/Группа/Другие)
В настоящее время используется в файловых системах Linux/Unix, а также является наиболее широко используемым методом контроля разрешений. Это режим контроля разрешений файловой системы общего назначения.
ACL (список управления доступом) список управления доступом
Он включает в себя три аспекта:
Режим разрешения (схема)
(1) IP: управление доступом на основе детализации IP-адресов
(2) Дайджест: наиболее часто используемая конфигурация разрешений, аналогичная имени пользователя: пароль, используется для конфигурации разрешений, что позволяет легко различать разные приложения для управления разрешениями.
(3) Мир: самый открытый метод управления разрешениями — это специальный режим дайджеста, в котором используется только один идентификатор разрешения «мир: любой».
(4) Супер: Суперпользователь
Авторизованный объект
Авторизованный объект относится к пользователю или указанному объекту, которому предоставлены полномочия, такие как IP-адрес или машинный свет.
Разрешение
(1) CREATE: разрешение на создание узла данных, позволяющее авторизованным объектам создавать дочерние узлы в Znode.
(2) DELETE: разрешение на удаление дочернего узла, позволяющее авторизованному объекту удалять дочерние узлы узла данных.
(3) ЧТЕНИЕ: разрешение на чтение узла данных, позволяющее авторизованным объектам получать доступ к узлу данных и читать его содержимое данных или список дочерних узлов и т. д.
(4) WRITE: полномочия обновления узла данных, позволяющие авторизованным объектам обновлять узел данных.
(5) ADMIN: полномочия управления узлом данных, позволяющие авторизованным объектам выполнять операции настройки, связанные с ACL, на узле данных.

11. Функции Chroot

После версии 3.2.0 была добавлена ​​функция Chroot, позволяющая каждому клиенту устанавливать для себя пространство имен. Если клиент находится в chroot, любые операции, которые клиент может выполнять с сервером, будут ограничены его собственным пространством имен.
Установив Chroot, клиент может быть применен к поддереву сервера Zookeeper, что очень полезно для достижения взаимной изоляции между различными приложениями в сценариях, когда несколько приложений совместно используют Zookeeper в группе.

12. Управление сессиями

Стратегия обмена ковшами: управлять аналогичными сеансами в том же блоке, чтобы зоофидер мог изолировать различные блоки для сеансов и равномерно обрабатывать один и тот же блок.
Принцип распределения: «следующий тайм-аут» (ExpirationTime) каждой сессии.
Формула расчета:
ExpirationTime_ = currentTime + sessionTimeout
ExpirationTime = (ExpirationTime_ / ExpirationInrerval + 1) *
ExpirationInterval , ExpirationInterval — это интервал проверки тайм-аута сеанса Zookeeper, по умолчанию tickTime

13. Роли сервера

Leader
(1) Единственный планировщик и обработчик запросов транзакций для обеспечения упорядоченности обработки транзакций кластера
(2) Планировщик каждой службы в кластере
Follower
(1) Процесс нетразакировать запрос клиента и пересылать транзакционный запрос на сервер лидера
(2) Участвовать в голосовании предложений по запросам на сделки
(3) Участвовать в голосовании на выборах лидера
Observer
(1) Роль сервера, представленная после версии 3.0, улучшает возможности кластера по обработке транзакций, не влияя на возможности обработки транзакций кластера.
(2) Обработать нетранзакционный запрос клиента и перенаправить транзакционный запрос на ведущий сервер.
(3) Не участвовать в голосовании ни в какой форме.

14. Рабочий статус сервера под Zookeeper

У сервера есть четыре состояния: СМОТРЮ, СЛЕДУЮЩИЙ, ВЕДУЩИЙ, НАБЛЮДАЮЩИЙ.
(1) ИЩУ: Найдите статус лидера. Когда сервер находится в этом состоянии, он будет думать, что в текущем кластере нет лидера, поэтому ему необходимо войти в состояние выбора лидера.
(2) FOLLOWING: Статус ведомого. Указывает, что текущая роль сервера — Follower.
(3) LEADING: Статус лидера. Указывает, что текущая роль сервера — Лидер.
(4) НАБЛЮДЕНИЕ: состояние наблюдателя. Указывает, что текущая роль сервера — Наблюдатель.

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

После того, как весь кластер завершает выборы Лидера, Ученик (в совокупности именуемый Последователем и Наблюдателем) регистрируется на сервере Лидера. Когда сервер Learner завершает регистрацию на сервере Leader, он вводит ссылку для синхронизации данных.
Процесс синхронизации данных: (все в виде передачи сообщений)
Учащийся Зарегистрируйтесь в Ученике
синхронизация данных
подтверждение синхронизации
Синхронизация данных Zookeeper обычно делится на четыре категории:
(1) Прямая дифференциальная синхронизация (DIFF-синхронизация)
(2) Сначала откат, а затем дифференцированная синхронизация (синхронизация TRUNC+DIFF)
(3) Только синхронизация отката (синхронизация TRUNC)
(4) Полная синхронизация (синхронизация SNAP)
Перед синхронизацией данных сервер Лидер завершит инициализацию синхронизации данных:
сверстникLastZxid:
· Извлечение сообщений, отправленных с регистрации ACKEPOCH сервера учащегося lastZxid (сервер учащегося последний раз обрабатывал ZXID)
МинКоммитлоглог:
Минимальный ZXIDmaxCommittedLog в очереди кэша предложений на сервере-лидере commitLog:
· Самый большой ZXID в очереди кэша предложений на ведущем сервере commitLog — это прямая дифференцированная синхронизация (синхронизация DIFF)
Сценарий: peerLastZxid находится между minCommittedLog и maxCommittedLog, сначала выполняется откат, а затем дифференцированная синхронизация (синхронизация TRUNC+DIFF).
· Сценарий: когда новый ведущий сервер обнаруживает, что обучающий сервер содержит запись о транзакции, которой у него нет, ему необходимо позволить обучающему серверу откатить транзакцию до той, которая существует на ведущем сервере, и также ближе всего к peerLastZxid ZXID только для отката синхронизации (синхронизация TRUNC)
· Сценарий: Peerlastzxid больше, чем maxCommemitedLog
Полная синхронизация (синхронизация SNAP)
Сценарий 1: peerLastZxid меньше, чем minCommittedLog
Сценарий 2: На сервере Leader нет очереди кэша предложений, а peerLastZxid не равен lastProcessZxid.

16. Как zookeeper обеспечивает последовательную согласованность транзакций?

zookeeper использует глобальный инкрементный идентификатор транзакции для идентификации, все предложения (предложения) добавляются с zxid, когда они предлагаются, zxid на самом деле является 64-битным числом, а верхние 32 бита — это эпоха (период; эпоха; мир; новая эра). используется для идентификации цикла лидера.Если генерируется новый лидер, эпоха будет автоматически увеличиваться, а младшие 32 бита используются для увеличения счетчика. Когда создается новое предложение, оно сначала отправляет запрос на выполнение транзакции другим серверам в соответствии с двухэтапным процессом базы данных.Если более половины машин могут выполнить и выполнить успешно, тогда выполнение начнется.

17. Зачем в распределенном кластере Мастер?

В распределенной среде некоторая бизнес-логика нуждается только в одной из машин в кластере для выполнения, другие машины могут делиться результатами, что может значительно уменьшить двойной счет, повысить производительность, поэтому он должен быть лидером выборов.

18. Как бороться с простоями zk node?

Сам Zookeeper тоже является кластером, и рекомендуется настраивать не менее 3-х серверов. Сам Zookeeper также гарантирует, что, когда узел выйдет из строя, другие узлы продолжат предоставлять услуги.
Если подписчик выходит из строя, остается 2 сервера для предоставления доступа, потому что данные на Zookeeper имеют несколько копий, и данные не будут потеряны;
Если лидер выйдет из строя, Zookeeper выберет нового лидера.
Механизм кластера ZK заключается в том, что пока более половины узлов работают нормально, кластер может нормально предоставлять услуги. Кластер выходит из строя только тогда, когда висит слишком много узлов ZK и работает только половина или меньше узлов.
так
Кластер из 3 узлов может вывести из строя 1 узел (лидер может получить 2 голоса > 1,5)
Кластер из 2 узлов не может повесить ни один узел (лидер может получить 1 голос

19. Разница между балансировкой нагрузки zookeeper и балансировкой нагрузки nginx

Балансировку нагрузки zk можно регулировать, nginx умеет только регулировать вес, а другие вещи, которые нужно контролировать, нужно писать плагины сами по себе, но пропускная способность nginx гораздо больше, чем у zk, надо сказать то, какой метод следует использовать в соответствии с бизнесом.

20. Какие существуют режимы развертывания Zookeeper?

Режим развертывания: автономный режим, псевдокластерный режим, кластерный режим.

21. Какое минимальное количество машин требуется для кластера?Каковы правила кластера?

Правило кластера — 2N+1 единиц, N>0, то есть 3 единицы.

22. Поддерживает ли кластер динамическое добавление машин?

По сути, это горизонтальное расширение, и Zookeeper в этом плане не очень хорош. Два пути:
Перезапустить все: остановите все службы Zookeeper и запустите их после изменения конфигурации. Не влияет на предыдущие сеансы клиента.
Перезапускайте один за другим: в соответствии с принципом доступности более половины машин перезапуск машины не влияет на внешние службы, предоставляемые всем кластером. Это более распространенный способ.
Версия 3.5 поддерживает динамическое расширение.

23. Являются ли уведомления мониторинга Zookeeper для узлов постоянными? Почему не постоянный?

нет. Официальное заявление: событие наблюдения является одноразовым триггером.Когда данные, для которых установлено наблюдение, изменяются, сервер отправляет изменение клиентам, установившим наблюдение, чтобы уведомить их.
Почему это не постоянное?Например, если сервер часто меняется, а клиент мониторинга во многих случаях, каждое изменение должно быть уведомлено для всех клиентов, что оказывает большую нагрузку на сеть и сервер.
Как правило, клиент выполняет getData("/node A", true). Если узел A изменен или удален, клиент получит свое событие наблюдения, но затем узел A снова изменился, и клиент не установил его. событие watch больше не отправляется клиенту.
В практических приложениях во многих случаях нашему клиенту не нужно знать каждое изменение сервера, мне нужны только самые последние данные.

24. Что такое Java-клиенты Zookeeper?

Клиент Java: zkclient, который поставляется с куратором с открытым исходным кодом zk и Apache.

25. Что такое чубби и чем он отличается от смотрителя зоопарка?

Chubby от Google, он полностью реализует алгоритм paxos и не имеет открытого исходного кода. zookeeper — это реализация Chubby с открытым исходным кодом, использующая протокол zab, вариант алгоритма paxos.

26. Произнесите несколько общих команд смотрителя зоопарка.

Общие команды: ls get set create delete и т. д.

27. Какая связь и разница между алгоритмами ZAB и Paxos?

Тот же пункт:
(1) Оба играют роль, аналогичную процессу-лидеру, который отвечает за координацию работы нескольких процессов-последователей.
(2) Процесс «Лидер» будет ждать, пока более половины подписчиков оставят правильный отзыв, прежде чем подавать предложение.
(3) В протоколе ZAB каждое Предложение содержит значение эпохи для представления текущего цикла Лидера, а имя в Paxos — «Бюллетень».
разница:
ZAB используется для создания высокодоступной распределенной системы мастеров и резервных копий данных (Zookeeper), а Paxos используется для создания распределенной согласованной системы конечных автоматов.

28. Типичные сценарии применения Zookeeper

Zookeeper — это типичная структура управления распределенными данными и координации модели публикации/подписки, разработчики могут использовать ее для публикации и подписки распределенных данных.
Благодаря перекрестному использованию узлов богатых данных в Zookeeper и механизме уведомления о событиях Watcher очень удобно создавать ряд основных функций, которые будут задействованы в распределенных приложениях в середине года, например:
(1) Публикация/подписка на данные
(2) Балансировка нагрузки
(3) Служба имен
(4) Распределенная координация/уведомление
(5) Управление кластером
(6) Генеральные выборы
(7) Распределенная блокировка
(8) Распределенная очередь

Данные публиковать/подписываться

вводить
Система публикации/подписки на данные, так называемый центр конфигурации, как следует из названия, заключается в том, что издатели публикуют данные для подписки подписчиков.
Цель
Получать данные динамически (информация о конфигурации)
Реализовать централизованное управление данными (информация о конфигурации) и динамическое обновление данных
Шаблоны проектирования
Push-режим
Режим вытягивания
Свойства данных (информация о конфигурации)
(1) Объем данных обычно относительно невелик
(2) Содержимое данных будет динамически обновляться во время выполнения.
(3) Каждая машина в кластере является общей, а конфигурация согласована.
Например: информация о списке машин, конфигурация переключателя времени выполнения, информация о конфигурации базы данных и т. д.
Реализация на базе Zookeeper
Хранение данных: храните данные (информацию о конфигурации) в узле данных на Zookeeper.
Сбор данных: приложение считывает данные из узла данных Zookeeper на узле инициализации запуска и регистрирует наблюдатель за изменением данных на узле.
Изменение данных: при изменении данных обновите данные узла, соответствующие Zookeeper, Zookeeper отправит уведомление об изменении данных каждому клиенту, и клиент сможет повторно прочитать измененные данные после получения уведомления.

балансировки нагрузки

служба именования zk
Служба именования относится к получению адреса ресурса или службы по указанному имени и использованию zk для создания глобального пути, этот путь можно использовать в качестве имени для указания на кластер в кластере, адрес предоставленной службы, или удаленный объект и т. д. Подождите.
Распределенное уведомление и координация
Для системного планирования: оператор отправляет уведомление о фактическом изменении состояния узла через консоль, а затем zk рассылает эти изменения всем клиентам, зарегистрированным в наблюдателе этого узла.
Для подведения итогов выполнения: каждый рабочий процесс создает временный узел в некотором каталоге. И переносите данные о ходе работы, чтобы агрегированный процесс мог отслеживать изменения подузлов каталога, чтобы получать глобальную ситуацию о ходе работы в реальном времени.
служба именования zk (файловая система)
Служба именования относится к получению адреса ресурса или службы по указанному имени и использованию zk для создания глобального пути, то есть уникального пути, этот путь можно использовать в качестве имени для указания на кластер в кластере и указать адрес службы или удаленного объекта и т.д.
Управление конфигурацией zk (файловая система, механизм уведомлений)
Программа распространяется на разных машинах, и информация о конфигурации программы размещается под znode zk.При изменении конфигурации, то есть при изменении znode, вы можете изменить содержимое узла каталога в zk, чтобы использовать watcher уведомляет каждого клиента об изменении конфигурации.
Управление кластером Zookeeper (файловая система, механизм уведомлений)
Так называемое управление кластером не заботится о двух моментах: есть ли машины, выходящие и присоединяющиеся, и выбор мастера.
Во-первых, все машины соглашаются создать узел временного каталога в родительском каталоге, а затем прослушивать узел родительского каталога.
сообщение об изменении дочернего узла. Как только машина умирает, машина отключается от zookeeper, созданный ею временный узел каталога удаляется, а все остальные машины уведомляются: родственный каталог удаляется, поэтому все знают: он находится на борту.
Присоединение новых машин происходит аналогично. Все машины уведомляются: добавляется новый одноуровневый каталог и снова highcount. Для второго пункта мы вносим небольшое изменение. Все машины создают временные последовательно пронумерованные узлы каталога, и каждый раз машина с наименьшим номером выбрана в качестве ведущей Все отлично.
Распределенная блокировка Zookeeper (файловая система, механизм уведомлений)
Благодаря согласованной файловой системе zookeeper проблемы с блокировкой упрощаются. Службы блокировки можно разделить на две категории: одна предназначена для сохранения эксклюзивности, а другая — для контроля времени.
Для первой категории мы рассматриваем znode на zookeeper как блокировку, которая реализуется путем создания znode. Все клиенты создают узел /distribute_lock, и успешно созданный клиент в конечном итоге становится владельцем блокировки. После израсходования удалите созданный вами узел распределения_блокировки и снимите блокировку.
Для второго типа /distribute_lock уже существует заранее, и все клиенты создают под ним временные последовательно пронумерованные узлы каталога, так же, как и при выборе master, получается блокировка с наименьшим номером, и ее удобно удалять по мере использования. .
Управление очередью Zookeeper (файловая система, механизм уведомлений)
Два типа очередей:
(1) Синхронная очередь, когда все члены очереди собраны, очередь доступна, в противном случае она ожидает прибытия всех участников.
(2) Очередь ставится в очередь и удаляется из нее в порядке FIFO.
Первая категория заключается в создании временного узла каталога в согласованном каталоге и отслеживании того, соответствует ли количество узлов требуемому количеству.
Второй тип согласуется с основным принципом сцены управляющей последовательности в службе распределенной блокировки. Создайте узел PERSISTENT_SEQUENTIAL в определенном каталоге. Когда создание будет успешным, Watcher уведомит ожидающую очередь, и очередь удалит узел с наименьшим порядковым номером для использования. В этом сценарии znode Zookeeper используется для хранения сообщений.Данные, хранящиеся в znode, представляют собой содержимое сообщения в очереди сообщений, а SEQUENTIAL порядковый номер — это номер сообщения, который может быть получен последовательно. Поскольку созданный узел является постоянным, не нужно беспокоиться о потере сообщений очереди.

Приглашаю всех обратить внимание на мой официальный аккаунт [Программист в погоне за ветром].В 2019 году многие компании собрали более 1000 400-страничных pdf-документов для вопросов на собеседовании по java.

Наконец

Приветствую всех, чтобы общаться вместе. Если вам понравилась статья, не забудьте подписаться на меня и поставить лайк. Спасибо за вашу поддержку!