предисловие
Как служба распределенной координации для распределенных приложений, Zookeeper предоставляет вызовы API на языке C и языке Java. Сам он, разработанный Java, имеет некоторые основные концепции, нам необходимо иметь четкое представление, чтобы лучше использовать промежуточное программное обеспечение службы. На этот раз он будет расширяться из следующих частей:
-
Сеанс сеанса
-
Watch
-
модель данных
Session
Как показано на рисунке, ZK представляет собой архитектуру C/S, включающую клиент, сервер, и клиент подключается к серверу, что называется сеансом.
Процесс и характеристики установления сеанса следующие:
-
Клиент подключается к сеансу, и ZK назначает уникальный идентификатор сеанса.
-
Клиент отправляет тактовые импульсы через определенные промежутки времени для поддержания достоверности сеанса, которая задается параметром tickTime.
-
Если пульс клиента не получен по истечении времени ожидания сеанса, сервер определяет, что клиент недействителен, и вешает трубку;
-
minSessionTimeout Минимальное время ожидания сеанса (по умолчанию 2x tickTime)
-
maxSessionTimeout Максимальный тайм-аут сеанса (по умолчанию 20 раз от tickTime)
-
Запросы в сеансе выполняются в порядке FIFO, подобно очереди.
модель данных
Являясь службой распределенной координации, ZK также является службой централизованного хранения.Данные хранятся в контенте, отличаются высокой производительностью и малой задержкой и зависят от собственной модели данных.
Иерархическое пространство имен
- Подобно файловой системе unix, с (/) в качестве корневого образа.
-
Отличие: узлы могут содержать связанные с ними данные, а также дочерние узлы (как файлы, так и папки с точки зрения файловой системы).
-
Путь узла всегда представляется как канонический, абсолютный путь, разделенный косой чертой.
Как показано на рисунке, каждый узел может установить соответствующее значение
Среди них каждый узел называется znode.
znode
-
Уникальное имя, соглашение об именах
-
Типы узлов: постоянные, последовательные, эфемерные, эфемерные последовательные
-
Состав данных узла
znode — соглашение об именах
Имена узлов могут использовать любые символы Юникода, за исключением следующих ограничений.
-
Нулевой символ (\u0000) не может быть частью имени пути
-
Следующие символы нельзя использовать, потому что они не очень понятны, \u0001 - \u0019 и \u007F - \u009F.
-
Следующие символы не допускаются: \ud800 - uf8fff, \uFFF0 - \uFFFF
-
Символ «.» можно использовать как часть другого имени, но «.» и «..» нельзя использовать отдельно для обозначения узла на пути, zookeeper не применяет относительные пути, оба являются узлами абсолютного пути. Например: "/a/b/./c" "c/a/b/../" - недопустимые имена узлов
-
У zookeeper есть зарезервированный узел «zookeeper».
znode - тип узла
Узел содержит четыре типа узлов
постоянный узел
create /test1 test
временный узел
create -e /test1 /abd abds
последовательный узел
create -s /test1/abc 908
Узел временной последовательности
create -e -s /test1/abd/ 90
Среди них узел последовательности представляет собой 10-значный десятичный порядковый номер, каждый родительский узел несет счетчик, zk разработан java, счетчик представляет собой целое число со знаком (4 байта), а значение достигает 2147483647, после чего произойдет переполнение. происходят, вызывая имя "-2147483648"
Как показано на рисунке, после завершения создания четырех типов узлов вы можете увидеть десятичное число последовательного узла
В то же время временный узел, допустимый диапазон находится в пределах периода действия текущего сеанса, закрывает текущий сеанс и повторно открывает клиент.
На рисунке вы видите текущий sessionid 0x100002011b80003
Снова взглянув на узлы, вы обнаружите, что временные узлы c и f0000000005 больше не существуют. Эфемерные узлы широко используются в службах координации.
znode - состав данных
Данные узла: сохраненные данные координации (информация о состоянии, конфигурация, информация о местоположении и т. д.)
Метаданные узла (структура статистики)
Максимальный объем данных: 1M
zk — это служба распределенной координации, база данных без хранилища, и она используется только для распределенной координации, поэтому объем данных невелик, а высокая производительность гарантирована.
znode - структура статистики метаданных
В клиенте zk вы можете использовать команду stat для просмотра метаданных узла. Включите следующие данные:
| Поле структуры статистики | описывать |
|---|---|
| cZxid | Создайте zxid (идентификатор транзакции) узла |
| mZxid | Наконец, измените zxid узла |
| pZxid | Zxid последнего обновленного дочернего узла текущего узла |
| ctime | Время создания узла |
| mtime | Время последнего изменения узла |
| dataVersion | Время изменения данных узла |
| cversion | Количество изменений дочернего узла узла |
| dataLength | Длина данных узла |
| numChildren | Количество дочерних узлов узла |
| ephemeralOwner | Узел является временным узлом, идентификатор сеанса владельца, если это не временный узел, значение равно 0 |
| aclVersion | Время изменения ACL узла |
Клиент предоставляет следующие команды для использования функции контроля доступа
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
setAcl [-s] [-v version] [-R] path acl
getAcl [-s] path
Предоставляет настройки в формате (схема:выражение, разрешения)
схемы включают
-
Доступ к миру может получить любой клиент.
-
auth содержит авторизованного клиента.
-
дайджест использует имя пользователя: дайджест пароля SHA1 в кодировке base64.
-
ip ip:127.0.0.1,read
-
x509
завивка включает
-
CREATE: может создавать дочерние узлы
-
READ: получить данные узла и список дочерних узлов.
-
WRITE: установить данные узла
-
DELETE: удалить дочерний узел
-
ADMIN: установка разрешений
время в зоопарке
zk использует различные способы отслеживания времени.
-
ZxidКаждая операция изменения в Zookeeper соответствует уникальному идентификатору транзакции, называемому Zxid, который представляет собой глобально упорядоченную отметку времени.
-
Version numbersНомер версии, номер версии будет увеличиваться для каждой операции смены узла.
-
TicksПри использовании кластера zk сервер использует тики для определения времени событий, таких как загрузка статуса, время ожидания сеанса, время ожидания соединения между одноранговыми узлами и т. д. Время тика только косвенно раскрывается через минимальное время ожидания сеанса (по умолчанию 2 раза).Если установленное время ожидания сеанса, запрошенное клиентом, меньше минимального времени ожидания сеанса, установленного сервером, сервер уведомит клиента о фактическом тайм-аут сеанса, то есть будет использоваться тайм-аут сеанса сервера.Настройте время и сообщите клиенту о результате. Если время ожидания сеанса, установленное клиентом, больше, чем конфигурация сервера, используется настройка клиента.
-
Real timeZookeeper не использует реальное время или часы, за исключением того, что метка времени помещается в структуру статистики при создании и изменении znode.
Механизм наблюдения за часами
Клиент может отслеживать изменения znode в режиме реального времени, установив часы на znode
-
данные наблюдают за изменениями данных
-
дочерние часы прослушивают изменения дочернего узла
Сначала добавьте наблюдение за узлом, а затем измените данные узла.Все клиенты будут запускать время наблюдения и отслеживать изменения.
addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
Начиная с Zookeeper версии 3.6.0, режим наблюдения можно установить, добавив наблюдение с помощью метода addWatch.По умолчанию используется значение PERSISTENT_RECURSIVE, которое представляет собой постоянную рекурсию и может запускаться несколько раз.
Особенности зоопарка
-
Последовательная согласованность: гарантирует, что клиентские операции будут выполняться по порядку.
-
Атомарность: обновление выполнено успешно или неудачно, без частичных результатов
-
Единый образ системы: клиенты видят одно и то же содержимое независимо от того, к какому серверу в кластере они подключаются.
-
Надежность: изменения данных не будут потеряны, если только клиент не перезапишет их.
-
При изменении данных в zk сначала выполняется запись транзакций, а в кластере будет выполняться обработка алгоритма согласованности для достижения согласованности и надежности.
-
Своевременность: убедитесь, что данные, считанные клиентом системы, являются самыми последними.