【问题标题】:How to implement Chubby-style lock sequencers with ZooKeeper?如何使用 ZooKeeper 实现 Chubby 风格的锁序列器?
【发布时间】:2012-02-06 09:18:27
【问题描述】:

Google 的 Chubby 分布式锁管理器有一个称为“序列器”的功能,我想使用 ZooKeeper 来模拟它。有没有已知的好方法?

音序器的工作原理如下:

  1. 客户端获取资源锁
  2. 客户端为它的锁请求一个定序器,这是一个带有一些元数据的字符串
  3. 客户端调用服务并将序列器作为参数传递
  4. 服务在处理请求之前使用定序器验证客户端是否仍然持有锁

目标是防止客户端在调用必须由锁保护的远程服务后死亡。

关于 Chubby 的主要论文可在http://research.google.com/archive/chubby.html 获得。定序器在 2.4 节中讨论。

谢谢!

【问题讨论】:

    标签: concurrency locking apache-zookeeper


    【解决方案1】:

    zookeeper lock recipes 都涉及到锁定过程创建一个sequential ephemeral znode。顺序临时 znode 的名称将是唯一的,如果由于 locker 在超时内未发送有效的心跳而导致 lockers 会话到期,则 znode 将不存在。

    所以加锁进程只需要将其在加锁时创建的顺序临时znode的名称传递给远程服务,远程服务可以在处理前检查znode是否存在。

    您甚至可以让远程服务向 znode 添加一个 watch,并在 znode 被删除时收到通知。

    【讨论】:

    • 谢谢。不知何故,我错过了序列号单调递增的事实。
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 2021-12-13
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多