2015-06-21 78 views
1

动物园管理员手表documentation statesZookeeper Watches系统是否有错误,或者这是CAP定理的限制吗?

“的客户端将看到一个Z序节点是看到对应于该Z序节点的新数据之前看手表的事件。”此外,“由于手表是一次性触发器,并且在获取事件和发送新请求以获得手表之间存在延迟,因此无法可靠地查看ZooKeeper中节点发生的每个变化。”

问题是,我们无法保证您会收到手表通知。

这一点很重要,因为在像Clojure的Avout一个系统正,你想模仿Clojure的Software Transactional Memory,在使用Zookeeper网络。这依赖于每个变化都有一个监视通知。

现在我试图解决这是一个编码缺陷还是一个基础的计算机科学问题(即CAP Theorem)。

我的问题是:Zookeeper Watches系统有错误吗?还是这是CAP定理的限制?

回答

0

这似乎是ZooKeeper实现手表的一种限制,而不是CAP定理的限制。有一项开放功能要求为ZooKeeper添加连续监视:https://issues.apache.org/jira/browse/ZOOKEEPER-1416

etcd具有使用长轮询的watch函数。您需要考虑的限制是在接收第一个长轮询结果和重新轮询之间可能发生多个事件。这大致类似于ZooKeeper的问题。然而,他们有一个解决方案:

但是,watch命令可以做的比这更多。使用索引[传递我们见过的最后一个索引],我们可以观察过去发生的命令。这对确保您不会错过watch命令之间的事件很有用。

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