(原)3.4 Zookeeper应用 - 分布式锁
本文为原创文章,转载请注明出处,谢谢
分布式锁
1、原理
- 建立表示锁的父节点(图中locker节点)
- 每个争抢锁的服务器在locker节点下创建有序的临时节点
-
判断自己是否抢到锁:获取locker下所有子节点,并进行从小到大排序,判断自己创建的临时节点是否是最小节点。
- 是最小节点,说明抢到锁,执行相应的操作,最后删除自己创建的临时节点
- 不是最小节点,则监听比自己节点小1的(顺序节点的数字-1)节点的删除事件,出发此事件则进行新一轮的争抢
- 是最小节点,说明抢到锁,执行相应的操作,最后删除自己创建的临时节点
2、扩展
- 设置超时时间,超过此事件放弃此次争抢时间。
-
加入对网络抖动的支持,设置支持抖动次数,次数以下在争抢锁时如果出现自己创建节点获取不到,则创建节点进行争抢
3、架构图
- locker:争抢时要创建的节点
- client_n:每个参与争抢的客户端服务器,由这些客户端创建locker与node节点
- node_n:客户端服务器创建的排队节点
4、流程图
5、总结
分布式锁主要用在分布式项目中需要唯一执行的功能点,例如利用定时任务进行数据处理,多个服务器部署项目进行集群,定时任务分布在各个服务器进行处理,可利用分布式锁进行服务器层面的分布式锁或者更细粒度的定时任务级别的分布式锁;分布式锁开发的关键点在于创建自增序号的节点、判断自身是否为最小的节点以及对比自己次小节点删除事件的监控,针对网络抖动以及超时进行处理。
编程改变生活,改变人生
个人博客:http://blog.5ishuai.com
个人博客:http://blog.5ishuai.com