предисловие
Только лысая голова может стать сильнее.
Текст был включен в мой репозиторий GitHub, добро пожаловать, звезда:GitHub.com/Zhongf UC очень…
Я написал статью в прошлый разЧто такое очередь сообщений?В будущем я хотел начать работу с Kafka (установить среду и посмотреть некоторые концепции Kafka). Позже я обнаружил, что Kafka использует ZooKeeper, а я не знаю ZooKeeper, поэтому хочу сначала узнать, что такое ZooKeeper, а потом пойти посмотреть, что такое Kafka.
ZooKeeper считает, что это слово слышали все, много ли вы о нем знаете? Впервые я услышал о ZooKeeper, когда изучал Eureka (SpringCloud, что непрофессионалам понятно, пропустил кровопотерю!), тот же ZooKeeper можно использовать и какРегистрационный центр.
Когда я услышал о ZooKeeper позже, это было потому, что ZooKeeper можно было использовать какРаспределенная блокировкареализация .
Пока я не узнал о Kafka, я обнаружил, что Kafka также должен полагаться на ZooKeeper. Кафка использует ZooKeeperУправляйте собственной конфигурацией метаданных.
В этой статье я пишу свои заметки об изучении ZooKeeper.Если что-то не так, я надеюсь, вы можете указать на это в области комментариев.
1. Что такое ZooKeeper
Мы также можем найти из приведенного выше, что, кажется, фигура ZooKeeper, ZooKeeper что это такое? Мы пошли кОфициальный сайтОзнакомьтесь с введением:
На официальном сайте есть еще один абзац:
ZooKeeper: A Distributed Coordination Service for Distributed Applications
По сравнению с введением на официальном сайте, я на самом деле предпочитаюWikiВведение в ZooKeeper в:
(Оставляя слезы от незнания английского)
Позвольте мне кратко резюмировать:
- Зоотьевый ГлавныйОбслуживание распределенных систем, вы можете использовать ZooKeeper для: унифицированного управления конфигурацией, унифицированной службы именования, распределенных блокировок, управления кластером.
- Использование распределенной системы не может избежать проблемы управления узлами (требуется восприятие состояния узла в режиме реального времени, унифицированное управление узлами и т. д.), и поскольку эти проблемы могут быть относительно сложными для решения и увеличивают сложность системы, ZooKeeper как способныйУниверсальныйПоявилось промежуточное ПО для решения этих проблем.
2. Почему ZooKeeper так много умеет?
Из вышеизложенного мы можем узнать, что мы можем использовать ZooKeeper для: унифицированного управления конфигурацией, унифицированной службы именования, распределенных блокировок и управления кластером.
- мы тутПервыйнесмотря на
统一配置管理、统一命名服务、分布式锁、集群管理Каждое конкретное значение (будет рассмотрено позже)
Так почему же ZooKeeper может делать так много вещей? Давайте посмотрим, что такое ZooKeeper, он упоминается в Wiki:
ZooKeeper nodes store their data in a hierarchical name space, much like a file system or a tree data structure
Структура данных ZooKeeper очень похожа на файловую систему Unix и может рассматриваться какДерево, каждый узел называетсяZNode. Каждый узел может пройтидорожкаДля идентификации структурная схема выглядит следующим образом:
Итак, каковы характеристики «дерева» ZooKeeper? ? Узлы ZooKeeper, которые мы называемZnode, Znode делится надватип:
- Эфемерный: Znode (узел) создается при отключении клиента и серверабудет автоматически удален
- Настойчивый: Znode (узел) создается при отключении клиента и серверане будет удалять
Как и Redis, ZooKeeper также представляет собой структуру C/S (разделенную на клиентскую и серверную).
2.1 Слушатель
Выше мы просто знали структуру данных ZooKeeper, и ZooKeeper также сотрудничал сслушательуметь так много.
общийСценарии мониторинга следующие:
- Слушайте узлы Znodeизменение данных
- контролировать дочерние узлыувеличить или уменьшить
да, черезУзел Listen + Znode (постоянный/эфемерный [временный]), ZooKeeper может сыграть так много трюков.
3. Как это делает ZooKeeper?
Давайте посмотрим, как это сделать с помощью ZooKeeper: унифицированное управление конфигурацией, унифицированная служба именования, распределенные блокировки и управление кластером.
3.1 Единое управление конфигурацией
Например, теперь у нас есть три системы A, B и C, и у них есть три конфигурации, которыеASystem.yml、BSystem.yml、CSystem.yml, и потом, эти три конфигурации очень похожи, и многие элементы конфигурации почти одинаковы.
- В настоящее время, если мы хотим изменить информацию об одном из элементов конфигурации, весьма вероятно, что два других должны быть изменены. И, изменена информация элемента конфигурацииНаверное нужно перезагрузить систему
Поэтому мы надеемся наASystem.yml、BSystem.yml、CSystem.ymlОдинаковые элементы конфигурации извлекаются в одну копиюпубличныйКонфигурацияcommon.yml, и даже еслиcommon.ymlИзменено, нет необходимости перезапускать систему A, B, C.
Подход: мы можемcommon.ymlЭта конфигурация размещается в узле Znode ZooKeeper, и системы A, B и C отслеживают, изменился ли узел Znode.своевременныйотклик.
Использованная литература:
- Единое управление конфигурацией на основе zookeeper
3.2 Единая служба именования
Понимание единой службы имен на самом деле связано сдоменное имятак же, как мы даем для этой части ресурсавзять имя, другие могут получить соответствующие ресурсы через это имя.
Например, теперь у меня есть доменное имяwww.java3y.com, но у меня есть несколько машин под этим доменным именем:
- 192.168.1.1
- 192.168.1.2
- 192.168.1.3
- 192.168.1.4
другие посещаютwww.java3y.comЯ могу получить доступ к своей машине вместо доступа к ней по IP.
3.3 Распределенная блокировка
Я не буду здесь говорить о концепции замков, если вы мало знаете о концепции замков, вы можете обратиться к следующим статьям.
Мы можем использовать ZooKeeper для реализации распределенных блокировок, как это делается? ? Давайте взглянем:
Система A, B, C все идут в гости/locksузел
будет создан при посещениивременный/эфемерный с порядковым номером(EPHEMERAL_SEQUENTIAL) узел, например, Система А создаетid_000000узел, система B созданаid_000002Узел, система C созданаid_000001узел.
Затем получите/locksВсе дочерние узлы под узлом (id_000000, id_000001, id_000002),Определите, создали ли вы самый маленький узел
- Если да, то получите замок.
- Выпуск блокировки: после выполнения операции удалите созданный узел
- Если нет, прислушайтесь к изменениям узлов, которые на 1 меньше, чем вы.
Например:
-
Система А получает
/locksВсе дочерние узлы под узлом после сравнения находят себя (id_000000), который является наименьшим из всех дочерних узлов. так получить замок -
Система Б получает
/locksВсе дочерние узлы под узлом после сравнения находят себя (id_000002), не самый маленький из всех дочерних узлов. Так что слушайте узлы, которые на 1 меньше васid_000001статус -
Система C получает
/locksВсе дочерние узлы под узлом после сравнения находят себя (id_000001), не самый маленький из всех дочерних узлов. Так что слушайте узлы, которые на 1 меньше васid_000000статус -
…
-
После того, как система А завершит выполнение операции, удалите созданный ею узел (
id_000000). Прислушиваясь, System C обнаруживает, чтоid_000000Узел был удален и обнаружил, что он уже является самым маленьким узлом, поэтому он успешно получил блокировку. -
....система B, как указано выше
3.4 Статус кластера
После приведенных выше примеров я думаю, что каждому будет легко подумать о том, что такое ZooKeeper».восприятие"Узлы динамически добавляются или удаляются.
Или возьмите наши три системы A, B и C в качестве примера для создания в ZooKeeper.временный узелПросто:
Пока система А висит, то/groupMember/AЭтот узел будет удаленмониторgroupMemberСледующие дочерние узлы, системы B и C, могут определить, что система A повесила трубку. (То же самое относится и к новым дополнениям)
В дополнение к возможности отслеживать изменения узлов вверх и вниз, ZooKeeper также может реализовыватьДинамически выбирать Мастерафункция. (если кластер находится в режиме архитектуры master-slave)
Принцип также очень прост.Если вы хотите добиться функции динамического выбора Мастера, тип узла Znode сэфемерный узел порядкового номера(EPHEMERAL_SEQUENTIAL)Достаточно.
- Zookeeper каждый раз будет выбирать мастером наименьшее число.Если Мастер зависнет, соответствующий узел Znode будет удален. тогда пустьНовый минимальный номер в качестве Мастера, так что функция динамических выборов может быть реализована.
Наконец
В этой статье в основном объясняются знания, связанные с внедрением ZooKeeper.Тип узла Znode + механизм мониторингаТак много полезных функций для достижения!
Конечно, то, что ZooKeeper должен учитывать, не так просто. Если будет возможность углубиться, я продолжу делиться этим. Надеюсь, эта статья будет полезна всем~
Использованная литература:
- Платформа распределенных сервисов Zookeeper
- ZooKeeper первое знакомство и доводка (старое вино в новой бутылке)
- ZooKeeper
- Сценарии применения ZooKeeper
- zhuanlan.zhihu.com/p/59669985
рад вывестигалантерейные товарыОбщедоступный номер технологии Java: Java3y. В паблике более 200 статейоригинальныйТехнические статьи, обширные видеоресурсы, красивые карты мозга — идите сюдаобрати внимание нанемного!
Я думаю, что моя статья хорошо написана, пожалуйста, нажмитеотличный!