10

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

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

4

2 回答 2

11

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

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

于 2014-11-27T15:39:15.907 回答
3

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

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

于 2016-12-19T00:04:20.947 回答