предисловие
ZooKeeper — это служба распределенной координации с открытым исходным кодом, которая может реализовывать публикацию/подписку на данные, балансировку нагрузки, службу именования, распределенную координацию/уведомление, управление кластером, главные выборы, обслуживание конфигурации, службу имен, распределенную синхронизацию, распределение на основе блокировок ZooKeeper и распределенных очередей. .
Расскажите о своем понимании Zookeeper?
ZooKeeper — это распределенная служба координации с открытым исходным кодом для распределенных приложений. Это программное обеспечение, которое предоставляет согласованные услуги для распределенных приложений.Предоставляемые функции включают в себя: обслуживание конфигурации, службу доменных имен, распределенную синхронизацию, групповую службу и т. д.
Цель ZooKeeper — инкапсулировать сложные и подверженные ошибкам ключевые службы и предоставить пользователям простой в использовании интерфейс и систему с высокой производительностью и стабильными функциями.
Каковы функции Zookeeper?
1. Управление кластером: отслеживание состояния выживания узла, выполнение запросов и т. д.;
2. Выбор главного узла: после того, как главный узел повесит трубку, с резервного узла можно начать новый раунд выборов главного узла.Выбор главного узла относится к процессу выбора, и Zookeeper может использоваться для помощи в этом процессе;
3. Распределенные блокировки: Zookeeper предоставляет два типа блокировок: эксклюзивные блокировки и общие блокировки. Исключительная блокировка означает, что только один поток может одновременно использовать ресурс.Общая блокировка разделяется блокировками чтения, а чтение и запись являются взаимоисключающими, то есть несколько потоков могут читать один и тот же ресурс одновременно. должна использоваться блокировка записи, ее может использовать только один поток. Zookeeper может управлять распределенными блокировками.
4. Служба имен. В распределенной системе с помощью службы имен клиентское приложение может получить адрес, поставщика и другую информацию о ресурсе или службе в соответствии с указанным именем.
Расскажите о своем понимании протокола ZAB?
Протокол ZAB — это атомарный широковещательный протокол, специально разработанный для службы распределенной координации Zookeeper для поддержки восстановления после сбоев. Протокол ZAB включает два основных режима: восстановление после сбоя и широковещательная рассылка сообщений.
Когда весь кластер Zookeeper только что запущен, или сервер-лидер не работает, перезапускается или из-за сбоя сети более половины серверов поддерживают нормальную связь с сервером-лидером, все серверы переходят в режим аварийного восстановления, сначала выберите нового лидера. сервер, а затем серверы-последователи в кластере. Запустите синхронизацию данных с новым сервером-лидером. Когда более половины машин в кластере завершают синхронизацию данных с сервером Лидер, они выходят из режима восстановления и переходят в режим рассылки сообщений.Сервер Лидер начинает получать запросы транзакций от клиентов для формирования предложений транзакций для обработки запросов транзакций.
Как Zookeeper обеспечивает синхронизацию состояния главного и подчиненного узлов?
Ядром Zookeeper является механизм атомарного вещания, обеспечивающий синхронизацию между различными серверами. Протокол, реализующий этот механизм, называется протоколом Zab. Протокол Zab имеет два режима: режим восстановления и режим широковещания.
1. Режим восстановления
Заб переходит в режим восстановления при запуске службы или после сбоя лидера.Режим восстановления заканчивается, когда лидер избран и большинство серверов завершили синхронизацию с состоянием лидера. Синхронизация состояний гарантирует, что лидер и сервер имеют одинаковое состояние системы.
2. Режим трансляции
Как только лидер синхронизирует состояние с большинством последователей, он может начать широковещательную рассылку сообщений, то есть войти в широковещательное состояние. В это время, когда сервер присоединяется к службе ZooKeeper, он запускается в режиме восстановления, обнаруживает лидера и синхронизирует состояние с лидером. После завершения синхронизации он также участвует в рассылке сообщений. Служба ZooKeeper остается в состоянии трансляции до тех пор, пока лидер не выйдет из строя или лидер не потеряет поддержку большинства последователей.
Сколько режимов развертывания есть у Zookeeper?
Zookeeper имеет три режима развертывания:
1. Автономное развертывание: запуск на одном кластере;
2. Развертывание кластера: работает несколько кластеров;
3. Развертывание псевдокластера. Кластер запускает несколько экземпляров Zookeeper.
Расскажите о механизме уведомлений Zookeeper?
Клиентская сторона установит событие наблюдателя для znode.Когда znode изменится, эти клиенты получат уведомление zk, а затем клиент сможет внести бизнес-изменения в соответствии с изменениями znode.
Почему в кластере есть главный узел?
В распределенной среде некоторая бизнес-логика должна выполняться только определенной машиной в кластере, а другие машины могут совместно использовать результат, что может значительно сократить повторные вычисления и повысить производительность, поэтому требуется выбор лидера.
В кластере 3 сервера, и один из узлов не работает. Можно ли еще использовать Zookeeper в это время?
Его можно продолжать использовать, и единственный сервер может продолжать использоваться до тех пор, пока не будет отключено более половины серверов.
Правило кластера — 2N+1 единиц, N > 0, то есть требуется не менее 3 единиц.
Расскажите о процессе двухэтапной фиксации и трехэтапной фиксации? В чем проблема соответственно?
Протокол двухфазной фиксации 2PC
1. Первый этап (этап голосования):
(1) Узел-координатор запрашивает все узлы-участники, можно ли выполнить операцию фиксации (голосование), и начинает ждать ответа от каждого узла-участника;
(2) Узел-участник выполняет все транзакционные операции до тех пор, пока не будет инициирован запрос, и записывает информацию об отмене и повторении в журнал.
(3) Каждый узел-участник отвечает на запрос, инициированный узлом-координатором. Если транзакционная операция узла-участника действительно успешна, он возвращает сообщение «согласовано», если транзакционная операция узла-участника фактически терпит неудачу, он возвращает сообщение «отмена».
2. Второй этап (стадия выполнения фиксации):
Когда соответствующие сообщения, полученные узлом-координатором от всех узлов-участников, «согласны»:
(1) Узел-координатор отправляет запрос «формальной фиксации» всем узлам-участникам;
(2) узел-участник официально завершает операцию и освобождает ресурсы, занятые в течение всего периода транзакции;
(3) Узел-участник отправляет сообщение «complete» узлу-координатору;
(4) Узел-координатор завершает транзакцию после получения сообщения «Завершено», отправленного обратно всеми узлами-участниками.
Проблемы с двухфазным коммитом:
1. Во время выполнения все участвующие узлы блокируют транзакцию. Когда участник занимает общедоступный ресурс, другие сторонние узлы должны находиться в состоянии блокировки для доступа к общедоступному ресурсу;
2. Сбой участника: координатору необходимо указать дополнительный механизм тайм-аута для каждого участника, после чего вся транзакция завершается сбоем;
3. Сбой координатора: участники будут заблокированы навсегда. Для отказоустойчивости требуются дополнительные резервные машины;
4. Проблема, которую нельзя решить на втором этапе: координатор вылетает после повторной отправки сообщения коммита, и единственный участник, получивший это сообщение, тоже вылетает при этом. Тогда, даже если координатор создаст нового координатора через протокол выборов, состояние этой транзакции будет неопределенным, и никто не знает, была ли совершена транзакция.
Протокол трехфазной фиксации 3PC
В отличие от двухфазной фиксации, трехфазная фиксация имеет две точки изменения:
1. Введите механизм тайм-аута. При этом как у координатора, так и у участников вводится механизм тайм-аута;
2. Вставьте фазу подготовки между первой и второй фазами. Гарантируется, что состояние каждого участвующего узла непротиворечиво перед финальной фазой фиксации.
То есть в дополнение к введению механизма тайм-аута 3PC снова делит этап подготовки 2 шт. Еще два, так что существует три фазы CanCommit, преобладают и докусмит для трехфазного представления.
1. Стадия подтверждения
Фаза CanCommit в 3PC на самом деле очень похожа на фазу подготовки в 2PC. Координатор отправляет участнику запрос на фиксацию, и участник возвращает ответ «Да», если участник может зафиксировать, и ответ «Нет» в противном случае.
(1) Запрос транзакции: координатор отправляет участнику запрос CanCommit. Спросите, можно ли выполнить операцию фиксации транзакции. Затем начните ждать ответа участника.
(2) Ответная обратная связь: после того, как участник получит запрос CanCommit, при нормальных обстоятельствах, если он считает, что транзакция может быть выполнена гладко, он вернет ответ «Да» и перейдет в состояние готовности. В противном случае отзыв No.
2. Предкоммитный этап
Координатор решает, продолжать ли операцию PreCommit транзакции в соответствии с реакцией участников. В зависимости от ответа есть два варианта:
Если координатор получает ответ Да от всех участников, то выполняется предварительное выполнение транзакции.
(1) Отправляет запрос на отправку предварительного: преобладающего координатора отправляет запрос и входит в подготовленную фазу для участников.
(2) Предварительная фиксация транзакции: после того, как участник получит запрос PreCommit, он выполнит операцию транзакции и запишет информацию об отмене и повторении в журнале транзакций.
(3) Ответная обратная связь: если участник успешно выполняет транзакционную операцию, он возвращает ответ ACK и начинает ждать последней команды.
Если какой-либо участник отправляет координатору ответ No или после ожидания таймаута координатор не получает ответа от участника, то транзакция прерывается.
(1) Отправить запрос на прерывание: координатор отправляет всем участникам запрос на прерывание.
(2) Прервать транзакцию: после того, как участник получает запрос на прерывание от координатора (или по истечении тайм-аута запрос от координатора не был получен), выполнение транзакции прерывается.
3. этап выполнения
На этом этапе выполняется отправка реальной транзакции, которую также можно разделить на следующие две ситуации.
3.1 Выполнение коммита
(1) Отправить запрос на фиксацию: когда координатор получает ответ ACK, отправленный участником, он переходит в состояние фиксации из состояния до фиксации. и отправить запрос doCommit всем участникам.
(2) Фиксация транзакции: после того, как участник получает запрос doCommit, выполняется формальная фиксация транзакции. И освободите все ресурсы транзакции после завершения транзакции.
(3) Ответная обратная связь: после отправки транзакции координатору отправляется ответ ACK.
(4) Завершение транзакции: после того, как координатор получит ответы ACK от всех участников, транзакция завершена.
3.2 Прерывание транзакции
Если координатор не получает ACK-ответ, отправленный участником (возможно, получатель не отправил ACK-ответ или ответ истек), будет выполнена транзакция прерывания.
(1) Отправить запрос на прерывание: координатор отправляет всем участникам запрос на прерывание.
(2) Откат транзакции: после того, как участник получает запрос на прерывание, он использует информацию об отмене, записанную на этапе 2, для выполнения операции отката транзакции и освобождает все ресурсы транзакции после завершения отката.
(3) Результат обратной связи: после того, как участник завершает откат транзакции, он отправляет сообщение ACK координатору.
(4) Прервать транзакцию: после того, как координатор получит сообщение ACK, возвращенное участником, транзакция прерывается.
Вопросы подаются в три этапа:
Сетевые разделы могут быть проблематичными. Требуется четырехэтапное решение: четырехэтапное решение напрямую вызывает статус данных удаленной службы, чтобы определить текущую согласованность данных.
Как бороться с простоем Zookeeper?
Сам Zookeeper тоже является кластером, и рекомендуется настраивать не менее 3-х серверов. Сам Zookeeper также гарантирует, что, когда узел выйдет из строя, другие узлы продолжат предоставлять услуги. Если подписчик выйдет из строя, есть два сервера для предоставления доступа, потому что данные на Zookeeper имеют несколько копий, и данные не будут потеряны; если лидер выйдет из строя, Zookeeper выберет нового лидера.
Механизм кластера Zookeeper заключается в том, что пока более половины узлов исправны, кластер может нормально предоставлять услуги. Кластер выходит из строя только тогда, когда висит слишком много узлов Zookeeper и работает только половина или меньше узлов. так:
Кластер из 3 узлов может выйти из строя 1 узел (лидер может получить 2 голоса > 1,5)
Кластер из 2 узлов не может повесить ни один узел (лидер может получить 1 голос
11. Назовите следующие четыре типа узла данных Znode?
1. ПОСТОЯННЫЙ: постоянный узел, если он не удален вручную, всегда существует в Zookeeper.
2. EPHEMERAL: Временный узел. Жизненный цикл временного узла привязан к сеансу клиента. После сбоя сеанса клиента (клиент отключается от Zookeeper, сеанс не обязательно завершается сбоем), то все временные узлы, созданные клиентом будут перемещены удалить.
3. PERSISTENT_SEQUENTIAL: Постоянный узел последовательности, основные функции такие же, как и у постоянного узла, но добавлен атрибут последовательности, и к имени узла будет добавлено целое число с автоинкрементом, поддерживаемое родительским узлом.
4. EPHEMERAL_SEQUENTIAL: Временный узел последовательности, основные характеристики такие же, как у временного узла, добавлен атрибут последовательности, и к имени узла будет добавлено целое число с автоинкрементом, поддерживаемое родительским узлом.
Отношения между Zookeeper и Dubbo?
Dubbo абстрагирует реестр, чтобы он мог подключаться к различным носителям для предоставления услуг реестру, таких как ZooKeeper, Memcached, Redis и т. д.
Внедрение ZooKeeper в качестве носителя данных также знакомит с функциями ZooKeeper. Во-первых, это балансировка нагрузки.Грузоподъемность одного центра регистрации ограничена.Когда трафик достигает определенного уровня, его необходимо распределять.Балансировка нагрузки существует для целей распределения.Группа ZooKeeper может легко добиться балансировки нагрузки с помощью соответствующее веб-приложение. ;Синхронизация ресурсов, балансировка нагрузки сами по себе недостаточны, данные и ресурсы между узлами должны быть синхронизированы, и кластер ZooKeeper, естественно, имеет такую функцию; служба именования, древовидная структура используется для ведения глобального списка адресов службы , сервис-провайдеры. При запуске введите свой собственный URL-адрес в каталог /dubbo/${serviceName}/providers указанного узла в ZooKeeper, и эта операция завершит выпуск службы. Другие функции включают выбор мачты, распределенные блокировки и т. д.
Наконец
Прошу всех обратить внимание на мой официальный аккаунт [Программист в погоне за ветром], в нем будут обновляться статьи, а также размещаться отсортированная информация.