Есть ли в системе Zookeeper Watches ошибка или это ограничение теоремы CAP?

Документация Zookeeper Watches гласит:

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

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

Это важно, потому что в такой системе, как Avout Clojure, вы пытаетесь имитировать программную транзакционную память Clojure по сети, используя Zookeeper. Это зависит от наличия уведомления о каждом изменении.

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

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

1 ответ

Решение

Похоже, что это ограничение в способах реализации 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'
Другие вопросы по тегам