如何使用ZooKeeper实现Chubby风格的锁定序列器?

时间:2012-01-09 21:05:01

标签: concurrency locking apache-zookeeper

谷歌的Chubby分布式锁管理器有一个名为“序列发生器”的功能,我想用ZooKeeper模拟它。有没有一种已知的好方法呢?

音序器的工作原理如下:

  1. 客户端获取资源锁定
  2. 客户端为其锁定请求一个音序器,这是一个带有一些元数据的字符串
  3. 客户端调用服务并将序列发生器作为参数传递
  4. 该服务使用sequencer验证客户端在处理请求之前是否仍然保持锁定
  5. 目标是防止客户端在调用必须受锁保护的远程服务后死亡。

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

    谢谢!

1 个答案:

答案 0 :(得分:6)

zookeeper lock recipes全部涉及锁定过程创建sequential ephemeral znode。顺序短暂znode的名称将是唯一的,并且如果由于锁定器未在超时内发送有效心跳而导致锁定器会话到期,则znode将不再存在。

因此锁定过程只需要在锁定到远程服务时传递它创建的顺序短暂znode的名称,远程服务可以在处理之前检查znode的存在。

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