【问题标题】:Questions on zookeeper: barrier implementation and sequence nodezookeeper上的问题:barrier实现和sequence node
【发布时间】:2016-07-08 23:42:28
【问题描述】:

我有两个关于 zookeeper 的问题:

阻碍实施

https://zookeeper.apache.org/doc/r3.1.2/recipes.html#sc_recipes_eventHandles

为什么需要第四步?如果客户端等待barrier节点的delete事件,当事件触发后,为什么客户端还需要重新发出exists()调用?

序列节点

zookeeper 是否保证附加到序列节点名称的数字是连续,并且从 0 开始?就算混入Ephemeral属性?

例如,如果 /test 是一个新创建的节点,那么子节点的顺序必须是这样的:/test/xxx_00000000000, /test/xxx_00000000001 /test/xxx_00000000002...从/test/xxx_00000000000开始,/test/xxx_00000000001绝对不会错过。 p>

【问题讨论】:

    标签: apache-zookeeper


    【解决方案1】:

    第一个问题:

    可以有任意数量的客户端在观看,一个会进入,而对于其他的,exists() 将再次返回 true,因此需要重新测试。

    第二个问题:

    我认为是的,它们将是连续的,并且在所有场景中都从 0 开始。我没有很好的来源,但我在各种情况下使用了顺序节点(包括临时顺序),并且从未见过其他行为。

    【讨论】:

    • 如果所有客户端都在等待屏障节点的删除事件,并且当节点已被删除时,应通知所有客户端,并且任何对 exists() 的调用都应返回 false。既然节点已被删除,那么任何客户端如何才能为 exists() 调用返回 true?
    • 我假设第一个收到通知的客户将进入并将障碍物举起来让其他人看到。
    • 我还是不明白为什么第一个客户应该声名远扬?据我了解,如果障碍消失,即节点已被删除,那么所有客户端都应该继续处理。所以没有必要说障碍。如果我错了,请纠正我。
    • 屏障的全部意义在于一次限制对一个客户端的访问。所以我假设您不希望同时处理所有客户端,否则,您一开始就不需要障碍。
    • 在我的场景中,我需要所有客户端等待一个资源,当该资源准备好时,所有客户端继续处理。所以我需要先设置障碍,并在资源准备好时移除障碍。另一方面,如果我需要一次限制对一个客户端的访问,我不会使用屏障,而是使用分发锁。
    猜你喜欢
    • 2014-12-24
    • 1970-01-01
    • 2022-12-04
    • 2014-08-19
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多