通过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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值