Концепции и основы ZooKeeper

задняя часть база данных сервер ZooKeeper

Информация быстро расширяется, и многие приложения не могут полагаться на один сервер для обработки огромного объема данных. Поскольку распределенные системы и приложения могут обеспечить более высокую вычислительную мощность, лучшую устойчивость к сбоям и возможность расширения, постепенно предпочтение отдается им.

При разработке распределенных приложений обычно требуется много времени и усилий для решения проблем совместной коммуникации в гетерогенных системах.

Что такое ZooKeeper?

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

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

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

Основы ZooKeeper

Он состоит из нескольких инструкций, а процесс, используемый для выполнения определенной функции, называется примитивом.

Чтобы обеспечить гибкость, ZooKeeper не предоставляет примитивы напрямую, а предоставляет API, подобный файловой системе, что позволяет разработчикам реализовывать свои собственные примитивы через API, обычно используя рецепты (рецепты) для представления реализации примитивов.

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

Обзор API

ZooKeeper предоставляет следующие API:

  • create /path dataСоздание узлов и включение данных

  • delete /pathудалить узел

  • exists /pathПроверить, существует ли узел

  • setData /path dataустановить данные узла

  • getData /pathПолучить данные узла

  • getChildren /pathПолучить список дочерних узлов

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

Тип узла

При создании znode необходимо указать тип узла, который влияет на его поведение.

Znodes делятся на постоянные узлы и временные узлы. Постоянные узлы можно удалить, только вызвав API удаления; эфемерные узлы удаляются, когда клиент выходит из строя или закрывает соединение с сервером ZooKeeper, а API удаления также может удалять временные узлы.

znode может быть установлен как упорядоченный узел. При создании упорядоченного узла ему присваивается целочисленный порядковый номер и добавляется к пути.Например, при создании упорядоченного узла /tasks/task- путь узла после добавления целого числа будет /tasks/task- 1 .

Таким образом, существует четыре типа znode: постоянные (неупорядоченные), временные (неупорядоченные), постоянные упорядоченные и временные упорядоченные.

Слушайте уведомления

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

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

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

Существуют различные типы точек наблюдения, такие как мониторинг изменений данных znode, мониторинг изменений дочерних узлов znode и мониторинг создания или удаления znode.

соответствие версии

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

Арбитражный режим

Автономный режим Когда есть только один один сервер зоофиторов, состояние не может быть реплицировано. Арбитражный режим используется, когда есть набор серверов Zookeeper. В режиме кворума каждый сервер повторяет состояние и обслуживает клиентские запросы одновременно.

В режиме кворума, если клиент ждет для всех серверов, чтобы закончить сохранение данных, прежде чем продолжить, проблема задержки будет большой, а Zookeeker использует кворум для определения минимального количества серверов, которые должны работать эффективно при работе. Если есть 5 серверов, и любые 3 сервера удерживают данные, клиент может продолжать работать. Другие 2 сервера также в конечном итоге захватывают данные для сохранения.

Количество серверов должно быть нечетным, если серверов 5, то максимум 2 могут вылететь. Если количество серверов четное, количество серверов, которым разрешен сбой, не увеличится, но кворум будет больше, что потребует больше операций подтверждения.

Начало работы с ZooKeeper

Прежде чем начать использовать ZooKeeper, вам необходимоСкачайте дистрибутив ZooKeeper. Разархивируйте сжатый файл в формате tar.Каталог bin содержит скрипт для запуска ZooKeeper, каталог conf содержит конфигурационный файл ZooKeeper, а каталог lib содержит некоторые сторонние файлы, необходимые для работы.

запустить сервер

Выполните следующую команду в каталоге ZooKeeper, чтобы запустить сервер ZooKeeper.

$ bin/zkServer.sh start

запустить клиент

$ bin/zkCli.sh

Список всех узлов под корневым узлом

[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]

создать узел

[zk: localhost:2181(CONNECTED) 1] create /test ""
Created /test
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper, test]

удалить узел

[zk: localhost:2181(CONNECTED) 3] delete /test
[zk: localhost:2181(CONNECTED) 4] ls /
[zookeeper]

Выйти из клиента

[zk: localhost:2181(CONNECTED) 5] quit
Quitting...
2018-05-02 15:58:34,004 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x1630a0cdc400001 closed
2018-05-02 15:58:34,006 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x1630a0cdc400001

выключить сервер

$ bin/zkServer.sh stop

исходный адрес