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

Chr*_*ars 5 concurrency locking apache-zookeeper

谷歌的Chubby分布式锁管理器有一个叫做"序列发生器"的功能,我想用ZooKeeper来模拟它.有没有一种已知的好方法呢?

音序器的工作原理如下:

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

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

有关Chubby的主要文章可在http://research.google.com/archive/chubby.html上找到.排序器在2.4节中讨论.

谢谢!

sbr*_*ges 6

动物园管理员锁定食谱都涉及锁定过程中创建一个连续的短暂Z序节点.顺序短暂znode的名称将是唯一的,并且如果由于锁定器未在超时内发送有效心跳而导致锁定器会话到期,则znode将不再存在.

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

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