Zookeeper中分布式锁的实现原理

Zookeeper中的数据存储结构就像一棵树,树上的节点叫做Znode。这里,Znode有四种类型:

  1. 持久节点;
  2. 持久节点顺序节点
  3. 临时节点
  4. 临时节点顺序节点

所谓的顺序节点,即在创建节点时,Zookeeper会根据创建的时间顺序给节点的名称进行编号;

Redis实现分布式锁时,需要实现三个核心要素:

  1. 加锁;
  2. 解锁
  3. 锁超时机制

Redis实现分布式锁时,存在三个问题:

  1. 保证原子性操作,即保证加锁和锁超时的操作要一次性完成;
  2. 防止误删锁;
  3. 添加守护线程,为锁续命。

Zookeeper基于临时节点有序节点的实现分布式锁

通过创建和释放临时节点,实现加锁和解锁。
在这里插入图片描述
通过创建和释放临时节点有序节点,实现加锁、解锁和对临界资源的有序访问。
在这里插入图片描述
通过Watch事件通知机制,就可以在锁释放时,即删除一个临时节点有序节点,通知下一个客户端执行操作。基于此,Zookeeper实现了顺序访问临界资源。

Zookeeper和Redis分布式锁的比较

分布式锁实现 优点 缺点
Zookeeper 1.有封装好的框架,容易实现;
2.有等待锁的队列,大大提升了抢占锁的效率
添加和删除节点性能较低。
Redis Set和Del指令的性能较高 1.实现复杂,需要考虑超时、原子性、误删等情形;
2.在客户端自旋来等待锁的释放,效率低下。

猜你喜欢

转载自blog.csdn.net/zyxhangiian123456789/article/details/106815609