有了zookeeper的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独 占,另一个是控制时序。

对于第一类,我们将zookeeper上的一个znode看作是一把锁,通过createznode的方式来实 现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这 把锁。用完删除掉自己创建的distribute_lock 节点就释放出锁。

对于第二类, /distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录 节点,和选master一样,编号最小的获得锁,用完删除,依次方便。