zookeeper的znode版本统计限制?

时间:2014-09-17 23:07:30

标签: apache-zookeeper

zookeeper中,znode具有单调版本号,每次修改节点时都会更改。这用于实现原子更新,如果版本号不完全是指定的版本号,则设置操作将失败。

但是,删除znode然后重新创建它将重置其版本号。 想象一下这个场景,一个进程试图以原子方式递增一个值" / x":

  1. 进程A读取znode" / x"。它有价值" 1"和版本1.
  2. 流程B删除" / x"
  3. 进程C创建" / x"并将值设置为" 0"。版本号现在为0.
  4. 流程D更新" / x"并将值设置为" 100"。版本号现在为1。
  5. 进程A在其#34; / x"的读取副本中添加1,得到" 2"。进程A尝试设置" / x"到" 2"版本= 1
  6. 写入成功,因为版本号正确。
  7. 现在尝试增加一个数字实际上导致它下降了98! 请注意,这不是理论上的,我已经创建了一个演示这种情况的测试用例。

    所以我的问题是:

    如何在可以随时删除和重新创建节点的情况下,如何在zookeeper中正确实现原子更新?或者这是系统的一个基本限制,只有在从不重复使用znode路径时它才能正确?

0 个答案:

没有答案