[toc]

Zookeeper是如何实现分布式锁的

标签 : Zookeeper 分布式


实现分布式锁要考虑的重要问题

1. 三个核心要素

2. 三个问题


什么是临时顺序节点


1. 持久节点(Persistent)

2. 持久顺序节点(Persistent Sequential)

Zookeeper是如何实现分布式锁的-LMLPHP

3. 临时节点(Ephemeral)

Zookeeper是如何实现分布式锁的-LMLPHP
Zookeeper是如何实现分布式锁的-LMLPHP
Zookeeper是如何实现分布式锁的-LMLPHP

4. 临时顺序节点(Ephemeral Sequential)


Zookeeper实现分布式锁的原理


1. 获取锁

Zookeeper是如何实现分布式锁的-LMLPHP

Zookeeper是如何实现分布式锁的-LMLPHP

Zookeeper是如何实现分布式锁的-LMLPHP

Zookeeper是如何实现分布式锁的-LMLPHP

Zookeeper是如何实现分布式锁的-LMLPHP

Zookeeper是如何实现分布式锁的-LMLPHP

2. 释放锁

2.1 任务完成, 客户端显示释放

Zookeeper是如何实现分布式锁的-LMLPHP

2.2 任务执行过程中, 客户端崩溃

Zookeeper是如何实现分布式锁的-LMLPHP

3. 获得锁

Zookeeper是如何实现分布式锁的-LMLPHP


总结

Zookeeper和Redis分布式锁的比较

Zookeeper1.有封装好的框架,容易实现.
2.有等待锁的机制(Watcher),可以提高抢锁的效率,好处多多
添加和删除节点的性能比较低
RedisSetDel的性能比较高(毕竟键值数据库,Hash)1.实现复杂,需要考虑原子性,误删等情况.
2.没有等待锁的机制,只能通过客户端的自旋来等锁,效率低下.

9: https://www.funtl.com/assets/Lusifer2018101900098]: //bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL3d3dy5mdW50bC5jb20vYXNzZXRzL0x1c2lmZXIyMDE4MTAxOTAwMDgucG5n.jpg

05-12 15:52