zookeeper分布式锁:
- ①获得锁:若自己创建的节点是序号最小的,则获得锁;
- ②释放锁:删除自己创建的子节点;
zookeeper分布式锁实现①【适合集群小于10台的情况】
- 客户端创建节点,节点后缀带上创建节点的序号;
- 客户端获取所有子节点;
- 注册watcher;(区别实现②)
- 若自己创建的节点是序号最小的,则获得锁;
- 若不是序号最小的;
- 等到下一次节点变更时,再次获取所有子节点;
zookeeper分布式锁实现②【适合集群规模较大的情况】
- 客户端创建节点,节点后缀带上创建节点的序号;
- 客户端获取所有子节点;
- 不注册任何watcher;(区别实现①)
- 若自己创建的节点是序号最小的,则获得锁;
- 若不是序号最小的;
- 找出序号比自己小的那些节点,对其调用exist()方法,注册事件监听;(区别实现①)
- 注册(小于自己序号的节点)watcher;(区别实现①)
- 等到下一次节点变更时,再次获取所有子节点;
参考:http://jm-blog.aliapp.com/?p=2554