Zookeeper实现分布式锁

今天偶然在头条上看见一个基于Zk的分布式锁的推荐,觉得讲的不错,想起来自己在分析分布式锁的时候对于Zookeeper锁的分析没有完善。所以今天来补一篇。

分布式锁

Zookeeper的节点类型
1. 持久节点
节点创建后就会一直存在,直到主动删除,不会因为创建改节点的客户端会话消失而消失。

2.持久顺序节点
持久的,顺序节点,Zk会维护这个时序,记录子节点的创建的先后顺序。

3.临时节点
临时节点的生命周期和客户端会话绑定,如果客户端会话失效(不是连接断开),那么这个节点被自动清除掉,临时节点下面不能创建子节点
4.临时顺序节点
临时顺序节点,也是临时节点,不过是带有顺序的,客户端会话消失节点就消失,Zk的分布式锁主要是运用的这个特性。

Zookeeper的分布式锁架构图

Zookeeper的分布式锁流程分析
总体思路可以如下:

1. 获取分布式锁时在Lock节点下创建临时顺序节点,释放锁的时候删除该临时节点。

2. 客户端调用createNode方法在Lock节点下创建临时顺序节点。然后调用getChildren获取所有子节点。

    2.1 如果发现当前自己创建的节点的序号是最小的话,就认定该客户端获取到锁。

    2.2 如果发现不是最小的节点。说明获取锁失败,此时客户端需要找到比自己小的节点,对其注册事件监听器。

3. 当前获取到锁的客户端删除当前最小节点,那么注册过事件监听器的客户端会收到通知,此时再次判断是否自己的节点是最小的,是的话直接获取到锁,不是的话重复步骤监听比自己小的节点的事件。

Zookeeper的分布式锁流程图

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值