Curator实现zookeeper分布式锁的基本原理

在这里插入图片描述
1 比如客户端A和客户端B现在一起来争抢zk的分布式锁,然后客户端a抢先一步对zk发起了加分布式锁的请求—即直接在mylock锁节点下创建了临时顺序节点。

2 然后客户端A会查mylock这个锁节点下的所有子节点,并且这些子节点是按照序号排序的,然后客户端A会走一个关键性的判断–即判断我创建的那个顺序节点是不是第一个。如果是的话就加锁成功。

3接着假如说客户端A都加完了锁,然后客户端B也来加锁,他也是在mylock这个锁节点下创建一个临时顺序节点–即最后的序号是0002结尾的(客户端B因为是第二个来创建顺序节点的,所以zk内部会维护序号为"2"

4 同时它也会检查自己创建的节点是不是临时顺序节点的第一个,很显然它不是啊,所以这个时候他其实会就加一个监听器

5 监听上一个节点是否被删除等变化。

6 接着客户端A加锁之后,可能处理了一些代码逻辑,之后就释放了锁----即把那个0001节点给删除掉

7 删除节点以后,zk其实会反向通知客户端B的监听器:节点删除了

8 然后客户端会尝试重新加锁

9 会进一步判断自己其实就是临时顺序节点中的第一个节点,就会加锁成功。

总结:

如果有 A,B,C,D等多个节点,来争抢锁,
1. 大家都是上来直接在锁节点下 创建一个接一个的临时顺序节点,
2. 如果自己不是第一个节点,就会对自己的上一个节点加监听器
3. 只有上一个节点释放了锁,自己就排在了前面去。相当于一个排队机制

而且用临时顺序节点的另外一个用意就是,如果某个客户端创建了临时顺序节点以后,不小心宕机了,这个时候zk会自动感知到客户端的宕机,会自动删除对应的临时顺序节点,相当于自动释放锁,取消排队

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值