эта статьяgithub/JavaMapЗаписано.
Существует карта знаний о стеке технологий Java и вопросы для интервью, чтобы вы больше не запутались в учебе.Добро пожаловать в Star.
Zookeeper
Это инфраструктура распределенных служб, в основном используемая для решения некоторых проблем управления данными, возникающих в распределенных приложениях, таких как:统一命名服务
,状态同步服务
,集群管理
,分布式应用配置项的管理
Ждать.
Мы можем просто положитьZookeeper
Это понимается как большая домработница распределенной семьи, так как же подбирается команда домработниц?Leader
как насчет? Вам интересно, давайте посмотрим на это дальше.
Основы человеческих выборов
объяснятьZookeeper
Давайте представим человеческие выборы перед избирательным процессом.
Каждый из нас в той или иной степени пережил несколько выборов, и в процессе голосования мы можем столкнуться со следующими ситуациями:
Дело 1: Вы знакомы с несколькими кандидатами, будете голосовать за то, что думаете能力比较强的人
;
Случай 2: Вы также кандидат, и вы не знакомы с несколькими другими кандидатами. В это время вы должны думать о возможности голосов, потому что вы чувствуете, что вы самый мощный человек, и все должны голосовать за меня. Но, к сожалению, в процессе проволоки вы发现别人比你强
, вы начали чувствовать себя хуже и, наконец, проголосовали за человека, которого вы считали самым сильным.
После того, как все отдали свои голоса, урна для голосования подсчитывается, и избирается человек, набравший наибольшее количество голосов.
Во всем процессе голосования мы можем выделить четыре основные концепции:
-
候选人能力
: Основной принцип состоит в том, чтобы выбрать самое сильное голосование людей. -
遇强改投
: Если вы найдете более сильного человека позже, вы можете изменить свой голос. -
投票箱
: Все голоса будут опущены в урну для голосования. -
领导者
: Человек с наибольшим количеством голосов становится лидером.
Из принципа избрания человека давайте вкратце выведем принцип избрания Zookeeper.
Основы выбора зоопарка
Обратите внимание, что если Zookeeper является автономным развертыванием, выборы не требуются, нужно только выбрать кластерный режим.
Принцип выбора Zookeeper аналогичен логике выбора человека. Примените четыре основных понятия выбора человека, чтобы подробно объяснить Zookeeper.
- Индивидуальные способности
Как измерить индивидуальные возможности узлов Zookeeper? Ответ数据是否够新
, если данные узла новее, значит личная способность узла сильнее, не кажется ли это странным, вот что это такое!
В Zookeeper обычно это идентификатор транзакции (далее именуемыйzxid
Состояние) Чтобы определить данные (версию), данные узла, представителя последнего ZXID Чем больше, чем больше новый узел, узел будет представлять эту способность сильнее.
Полное имя zxid
ZooKeeper Transaction Id
, который является идентификатором транзакции Zookeeper.
- Изменение на голосование в случае сильного
В начале выборов кластера узел сначала считает себя самым сильным (т.е. данные самые последние), а затем пишет свое имя в бюллетене (включаяzxid
иsid
), zxid — это идентификатор транзакции, а sid уникально идентифицирует себя.
Затем он будет передавать голоса другим узлам, и в то же время он также получит голоса, переданные другими узлами. После того, как каждая нода получит голоса, она будет сравнивать, сильнее ли этот человек меня (zxid больше меня), если сильнее, то мне нужно改票
, Очевидно, другие сильнее меня, я не могу быть нахальным, верно?
- избирательная урна
Кластер Zookeeper, немного отличающийся от урны для голосования на выборах, поддерживает урну для голосования в памяти каждого узла. Узлы будут вносить свои голоса и голоса других узлов в эту урну для голосования. Поскольку бюллетени передаются друг другу, бюллетени в урне для голосования каждого узла в конце концов будут одинаковыми.
- лидер
В процессе голосования будет подсчитано, больше половины голосов и один и тот же узел выбран ими самими, то есть все они считают, что определенный узел является самым сильным. Как только кластер超过半数
Все узлы считают, что определенный узел является самым сильным, затем этот узел является лидером, и голосование закончилось.
В каких случаях необходимо избирать Zookeeper?
Zookeeper Cluster Когда сервер идет одно из двух вещей, вам нужно ввестиLeader 选举
.
(1) Сервер инициализирован и запущен.
(2) Отказ лидера во время работы сервера.
Выборы лидера во время запуска
Предположим, что в кластере Zookeeper 5 серверов, идентификаторы пронумерованы от 1 до 5, и все они запущены заново, без исторических данных.
Предполагая, что сервер запустится, мы должны проанализировать избирательный процесс:
(1) Сервер 1 запускается
Когда инициируются выборы, сервер 1 отдает один голос за себя, в это время у сервера 1 есть один голос, и выборы не могут быть завершены, если голосов меньше половины (3 голоса).
Результат голосования: Сервер 1 - 1 голос.
Состояние сервера 1 остается какLOOKING
.
(2) Сервер 2 запускается
Выборы инициируются, а серверы 1 и 2 отдают свои голоса. В это время сервер 1 находит, что идентификатор сервера 2 больше, чем его собственные, и изменяет голосование для голосования за сервер 2.
Результат голосования: 0 голосов за сервер 1 и 2 голоса за сервер 2.
Состояние сервера 1, 2 поддерживаетсяLOOKING
(3) Сервер 3 запускается
Чтобы инициировать выборы, серверы 1, 2 и 3 сначала отдают свои голоса, а затем, поскольку у сервера 3 самый большой идентификатор, они меняют свои голоса, чтобы проголосовать за сервер 3;
Итоги голосования: 0 голосов за сервер 1, 0 голосов за сервер 2 и 3 голоса за сервер 3. На данный момент количество голосов за сервер 3 превысило половину (3 голоса),Сервер 3 избранLeader
.
Сервер 1, 2 меняет состояние наFOLLOWING
, сервер 3 меняет состояние наLEADING
.
(4) Сервер 4 запускается
Инициировать выборы. В это время серверы 1, 2 и 3 больше не находятся в состоянии LOOKING, и информация о голосовании не будет изменена. Результат обмена информацией о голосовании: 3 голоса за сервер 3 и 1 голос за сервер 4. В это время сервер 4 подчиняется большинству, и информация о голосовании изменяется на сервер 3.
сервер 4 и изменить состояние наFOLLOWING
.
(5) Сервер 5 запускается
Проголосуйте за 3 как за сервер 4. На данный момент у сервера 3 всего 5 голосов, а у сервера 5 0 голосов.
сервер 5 и изменить состояние наFOLLOWING
.
конечный результат:
Сервер 3Leader
, статус такойLEADING
; остальные серверыFollower
, статус такойFOLLOWING
.
Выборы лидера во время выполнения
Во время запуска ZookeeperLeader
и非 Leader
Каждый из них выполняет свои обязанности, когда сервер, не являющийся лидером, выходит из строя или подключается, это не влияет на лидера, но как только сервер лидера выходит из строя, весь кластер Zookeeper приостанавливает внешние службы, что запускает новый раунд выборов.
В исходном состоянии в качестве сервера выбран сервер 3.Leader
, предполагая, что сервер 3 сейчас не работает, zxid на каждом сервере может быть другим в это время, server1 — 99, server2 — 102, server4 — 100, а server5 — 101
Текущие выборы в основном аналогичны начальному процессу голосования штата и могут быть грубо разделены на следующие этапы:
(1) изменения состояния. Лидер после провала, остальные非 Observer
Сервер будет владеть изменением состояния сервераLOOKING
, затем начните вводитьLeader选举过程
.
(2) Каждый сервер будет проводить голосование.
(3) Получение голосов с каждого сервера.Если данные других серверов новее, чем ваши, голосование будет изменено.
(4) Обработка и подсчет голосов.После каждого тура голосования производится подсчет голосов, и может быть избрано более половины из них.
(5) Изменить статус сервера и объявить выборы.
Чтобы не быть голословным, вот картинка:
(1) При первом голосовании каждая машина будет голосовать сама за себя.
(2) Затем каждая машина отправит свой голос другим машинам.Если обнаружится, что zxid других машин больше, чем ее собственный, то необходимо изменить голос и снова проголосовать. Например, server1 получил три голоса и обнаружил, что xzid server2 равен 102. PK обнаружил, что проиграл, а затем решил проголосовать за server2 как за босса.
Основные понятия, используемые в избирательном механизме
Стучите по доске, эти понятия обязательны для собеседования.
(1) Идентификатор сервера: Идентификатор сервера
Например, есть три сервера с номерами 1, 2 и 3. Чем больше число, тем больше вес в алгоритме выбора, например, ID сервера сравнивается при инициализации.
(2) Zxid: идентификатор транзакции
Идентификатор транзакции данных, хранящихся на сервере. Чем больше значение, тем новее данные, а чем новее данные, тем больше вес в алгоритме выборов.
(3) Эпоха: логические часы
Также называемое количеством голосов, значение логических часов в одном и том же раунде голосования одинаково, и эти данные будут увеличиваться после каждого поданного голоса.
(4) Статус сервера: статус выборов
LOOKING
, статус кампании.
FOLLOWING
, статус последователя, синхронизировать статус лидера и участвовать в голосовании.
OBSERVING
, наблюдать за состоянием, синхронизировать состояние лидера и не участвовать в голосовании.
LEADING
, состояние лидера.
Суммировать
(1) Выбор Zookeeper происходит в исходном состоянии и рабочем состоянии сервера.
(2) В начальном состоянии он будет сравниваться по номеру sid сервера, чем больше номер, тем больше вес, и лидер может быть избран более чем половиной голосов.
(3) Лидер неисправности вызывает новый раунд выборов.zxid
Чем новее репрезентативные данные, тем больше вес.
Ежедневные нахальные просьбы о похвале: Привет, технари, сначала похвали, а потом смотри, выработай привычку, не занимайся проституцией по пустякам.
Об авторе: ☕Я читаю книги уже несколько лет: окончил Хуачжунский университет науки и технологий со степенью магистра;
😂 Проехал мимо нескольких крупных заводов: Huawei, NetEase, Baidu...
😘 Я всегда верил, что технологии могут изменить жизнь, я готов сохранить первоначальный замысел и давай техников!Wechat поищите общедоступный номер [Архитектор, который любит смеяться] и обратите внимание на этого технического человека, который преследует технологии и жизнь.
Наконец, я рекомендую проект с открытым исходным кодом,github/JavaMap
Вот наиболее полная карта знаний о стеке технологий Java.Если вы запутались в обучении, вы можете взглянуть на то, как учиться дальше.
Рекомендую всем, кто видел!!!