使用zookeeper实现分布式锁思路

本文探讨了ZooKeeper如何通过临时顺序znode实现分布式锁。锁请求者创建的znode后缀数字决定了获取锁的顺序,最小数字的请求者优先获得锁。文章还讨论了避免羊群效应的方法,确保锁的分配遵循先到先得原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计:

使用临时顺序znode来表示获取锁的请求,创建最小后缀数字znode的用户成功拿到锁。

上图中znode为lock,在lock底下保存锁请求,后缀数字最小的可以获得锁,成为锁的持有者。上图中有三个锁请求,从上到下人呗是后缀数字1-3,因为1是最小的,所以可以成为锁的持有者。

避免羊群效应:

把锁请求者按照后缀数字进行排队,后缀数字小的锁请求先获取锁。如果所有的锁请求者都watch锁持有者,当代表锁请求者的znode被删除后,所有的锁请求者都会被通知到,但只有一个锁请求者能够拿到锁。这就是羊群效应。

为了避免羊群效应,每一个锁请求者watch它前面的锁请求者。每次锁被释放,只会有一个锁请求者被通知。这样做还让锁的分配具有公平性,锁定的分配遵循先到先得的原则

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值