2015-06-21 2 views
1

Zookeeper Часы documentation states:У системы Zookeeper Watches есть ошибка, или это ограничение теоремы CAP?

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

Дело в том, что нет гарантии, что вы получите уведомление о часах.

Это важно, потому что в системном как Clojure-х Avout, вы пытаетесь имитировать Software Transactional Memory Clojure, в по сети с помощью Zookeeper. Это зависит от наличия уведомления о часах для каждого изменения.

Теперь я пытаюсь понять, является ли это недостатком кодирования или фундаментальной проблемой компьютерной науки (то есть CAP Theorem).

Мой вопрос: У системы Zookeeper Watches есть ошибка, или это ограничение теоремы CAP?

ответ

0

Это, кажется, ограничение в способе, которым ZooKeeper реализует часы, а не ограничение теоремы CAP. Существует открытый запрос функции для добавления непрерывного просмотра в ZooKeeper: https://issues.apache.org/jira/browse/ZOOKEEPER-1416.

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

Однако команда watch может сделать больше, чем это. Используя индекс [передавая последний индекс, который мы видели], мы можем наблюдать за командами, которые произошли в прошлом. Это полезно для обеспечения того, чтобы вы не пропускали события между командами часов.

curl -L 'http://127.0.0.1:4001/v2/keys/foo?wait=true&waitIndex=7'