zookeeper实现分布式锁
2018-09-17 本文已影响128人
kevin0016
本文通过zookeeper实现分布式锁,一共有两个版本,分别是curator框架实现,javaapi实现
实现原理
![](https://img.haomeiwen.com/i10115652/186044538384c0d9.png)
实现原理其实很简单,就是利用了zookeeper的临时有序节点实现,其实ID最小的节点获得锁权限,执行完之后,删除节点,其余各点依次获取锁权限,类似于队列FIFO的操作
demo实现:
1、curator实现
![](https://img.haomeiwen.com/i10115652/7f210e078d61360e.png)
CuratorClientUtils工具类,负责创建客户端
![](https://img.haomeiwen.com/i10115652/d6c032a97876ac86.png)
![](https://img.haomeiwen.com/i10115652/ac39aebd68d8c6b6.png)
LockWatcher负责监听事件,包括节点的新增,删除,更改
![](https://img.haomeiwen.com/i10115652/f12baaa1d9f92116.png)
![](https://img.haomeiwen.com/i10115652/2ca2a48553c93069.png)
![](https://img.haomeiwen.com/i10115652/721087f59714c6a7.png)
DistributeLock类,分布式锁主要类,实现分布式锁的主要逻辑
![](https://img.haomeiwen.com/i10115652/6c23996b92b4e7ab.png)
![](https://img.haomeiwen.com/i10115652/f3b4682d4c926a7b.png)
2、javaAPI实现:
![](https://img.haomeiwen.com/i10115652/3906b031e726e900.png)
![](https://img.haomeiwen.com/i10115652/826ebf578097aa73.png)
![](https://img.haomeiwen.com/i10115652/44436759143aa288.png)
![](https://img.haomeiwen.com/i10115652/3b412230b389ac46.png)
![](https://img.haomeiwen.com/i10115652/322bc68b07709380.png)
测试方法都相同,在这就不贴了,代码只是逻辑的一个体现,不同框架其实实现底层都差不多,只不过封装模式不太一样而已。
当然实现分布式锁还有别的方法,例如数据库实现,redis实现,总的来说原理都差不多,各有利弊吧,多看看可以举一反三吧