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

Zookeeper Watches содержит документацию:

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

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

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

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

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


person hawkeye    schedule 21.06.2015    source источник


Ответы (1)


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

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

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

curl -L 'http://127.0.0.1:4001/v2/keys/foo?wait=true&waitIndex=7'
person Daniel Compton    schedule 21.06.2015