通过Zookeeper实现分布式锁

在分布式集群系统为什么需要分布式锁?

如下图所示,在分布式系统中,每台jvm都有一个 count,这个count在三个不同的jvm中,用户请求过来映射到哪个就操作哪个,这时候如果就需要给Count加上锁,以免产生重复。

这时候需要分布式锁:共享一个count

这样所有的jvm共用一个count,就不会让count产生重复。

Zookeeper实现分布式锁原理

使用zookeeper创建临时序列节点来实现分布式锁,大体思路就是创建临时序列节点,获取分布式锁,当执行完毕后关闭zookeeper来释放锁。

实现步骤:

多个Jvm同时在Zookeeper上创建同一个相同的节点( /Lock)

zk节点唯一的! 不能重复!节点类型为临时节点,

jvm1创建成功时候,jvm2和jvm3创建节点时候会报错,该节点已经存在。这时候 jvm2和jvm3进行等待。

jvm1的程序现在执行完毕后释放锁,关闭当前会话。临时节点不复存在了并且事件通知Watcher,jvm2和jvm3继续创建。

PS:zk强制关闭时候,通知会有延迟。但是close()方法关闭时候,延迟就小

如果程序一直不处理完,可能导致思索(其他的一直等待)。可以采用设置有效期的方式来解决

参考代码:

https://download.csdn.net/download/jiayoubing/12281205

发布了18 篇原创文章 · 获赞 0 · 访问量 488

猜你喜欢

转载自blog.csdn.net/jiayoubing/article/details/105184726