【问题标题】:Apache Zookeeper / Curator time-to-live on locksApache Zookeeper / Curator 锁上的生存时间
【发布时间】:2016-12-19 08:04:20
【问题描述】:

Apache Curator 锁配方(或较低级别的 ZooKeeper)中是否有任何工具可用于自动释放已超过某些 TTL 的锁?如果没有,是否有处理该问题的最佳实践?我看到 Curator 在客户端连接丢失的情况下会自动释放锁,这很好……而且锁获取超时也很有帮助。

我想知道我需要在多大程度上保护我的系统,方法是执行一项重复性工作来查找已经存在很长时间的锁并手动释放它们。我会通过让我的单独进程直接删除相关的 ZNode 来做到这一点吗?

【问题讨论】:

    标签: locking apache-zookeeper apache-curator


    【解决方案1】:

    Curator 的锁是使用 EPHEMERAL znodes 实现的。因此,如果锁持有者以某种方式变得不稳定,ZooKeeper 应该自动释放锁。如果您正在寻找一种方法来撤销其他进程持有的锁,那么 Curator 的一些锁配方具有协作撤销功能。除此之外,从进程下面删除锁似乎会导致巨大的不稳定。我想不出这样做的充分理由。

    (注:我是Curator的主要作者)

    【讨论】:

    • 感谢您的回复!希望你能看到这一点,我很感激你的其他 SO 回复。绝对知道自动处理失去连接的 ZK 客户端,以及合作撤销。也许我太偏执了,但我使用 ZK / Curator 作为执行分布式锁定的库的实现细节。无法控制在持有锁时执行的代码。我想我可以抽象出合作撤销方面,因此有一种方法来处理行为不端的客户端代码。感谢您的回复。
    【解决方案2】:

    仅供参考 - 这是 2 年后。我已经为 ZooKeeper 编写并接受了 TTL 节点(当然,Curator 会支持)。它现在处于 master 状态,并将在 ZooKeeper 和 Curator 的未来版本中。

    https://issues.apache.org/jira/browse/ZOOKEEPER-2169

    【讨论】:

    • Curator 是否增加了对 TTL 锁的支持?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多