Apache ZooKeeper: как работает запись - PullRequest
21 голосов
/ 24 марта 2011

Apache ZooKeeper - это высокодоступное хранилище данных для небольших объектов.Кластер ZooKeeper состоит из нескольких узлов, которые хранят весь набор данных в своей памяти.Набор данных называется «всегда согласованным», поэтому каждый узел имеет одинаковые данные каждый раз.

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

  • Узел всегда отвечает на чтение локально, поэтому связь с кластером не задействована.
  • Запись направляется на указанный узел "Лидер", который пересылаетwrite-request ко всем узлам и ждет их ответов.Если хотя бы половина узлов отвечает, запись считается успешной.

Вопрос: Почему руководителю достаточно дождаться ответа половины узлов?Если кто-то подключается к одному из узлов, которые не получили обновление, он получает устаревший результат (только локальное чтение с локальным значением).

1 Ответ

23 голосов
/ 24 марта 2011

Для достижения высокой доступности чтения Zookeeper гарантирует слабую согласованность по репликам: клиентский узел всегда может ответить на чтение, а возвращенный ответ может быть устаревшим значением (даже новая версия была зафиксированачерез лидера).

Тогда пользователи сами решают, является ли ответ на чтение «устаревшим» или нет, так как не все приложения требуют актуальную информацию.Таким образом, предоставляются следующие варианты:

1) Если вашему приложению не нужны обновленные значения для чтения, вы можете получить высокую доступность для чтения, запрашивая данные непосредственно у клиента.

2) Если вашему приложению требуются современные значения для чтения, вы должны использовать API синхронизации перед запросом на чтение, чтобы синхронизировать версию на стороне клиента с лидером.

Итак, Zookeeper предлагает настраиваемую гарантию согласованности, и пользователи могут сами выбирать баланс между доступностью и согласованностью.

Если вы хотите узнать больше о внутренностях Zookeeper, я рекомендую этобумага: ZooKeeper: координация без ожидания для систем Интернет-масштаба .Вышеуказанная стратегия описана в разделе 4.4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...