zookeeper分布式锁

zookeeper分布式锁:

  • ①获得锁:若自己创建的节点是序号最小的,则获得锁;
  • ②释放锁:删除自己创建的子节点;

zookeeper分布式锁实现①【适合集群小于10台的情况】

  • 客户端创建节点,节点后缀带上创建节点的序号;
  • 客户端获取所有子节点;
  • 注册watcher;(区别实现②)
  • 若自己创建的节点是序号最小的,则获得锁;
  • 若不是序号最小的;
  • 等到下一次节点变更时,再次获取所有子节点;

zookeeper分布式锁实现②【适合集群规模较大的情况】

  • 客户端创建节点,节点后缀带上创建节点的序号;
  • 客户端获取所有子节点;
  • 不注册任何watcher;(区别实现①)
  • 若自己创建的节点是序号最小的,则获得锁;
  • 若不是序号最小的;
  • 找出序号比自己小的那些节点,对其调用exist()方法,注册事件监听;(区别实现①)
  • 注册(小于自己序号的节点)watcher;(区别实现①)
  • 等到下一次节点变更时,再次获取所有子节点;

参考:http://jm-blog.aliapp.com/?p=2554

相关推荐