使用zookeeper实现分布式锁思路

设计:

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

使用zookeeper实现分布式锁思路_第1张图片

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

避免羊群效应:

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

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

使用zookeeper实现分布式锁思路_第2张图片

 

你可能感兴趣的:(zookeeper)