利用zookeeper创建共享锁

在分布式环境中,利用Zookeeper创建共享锁可以避免多设备服务并发导致的数据不一致。然而,这种方式存在网络断开导致的锁删除问题和服务中断后的锁竞争。为解决这些问题,可以将临时节点改为永久节点,服务完成后主动删除节点,并引入设备ID和租约时间机制,通过定时更新和检查租约时间来确保锁的有效性和正确释放。
摘要由CSDN通过智能技术生成

背景:

多个设备节点上有相同的程序,可以提供相同的服务,但是如果多个设备同时提供服务,有可能会造成数据不一致性。

一般情况下,大家会利用zookeeper创建分布式锁,也就是多个设备节点都在zookeeper上创建相同名称的临时节点,哪个设备节点创建成功了,那么这个设备节点就获取到了服务权限,可以提供服务,其他的设备节点就会创建失败,不可以提供服务。

服务完成之后,再删除zookeeper上的临时节点,这样其他的设备节点就可以再次尝试创建zookeeper的临时节点。


带来的问题:

问题1:删除临时节点时,不一定能保证zookeeper的临时节点可以删除;例如设备节点的服务刚刚完成,刚要删除zookeeper的临时节点时,网络断了,而zookeeper自己也没有删除临时节点。

问题2:设备节点的服务还在继续,网络断开,zookeeper感知到了,主动删除了临时节点,会造成其他的设备节点抢占锁成功,这时就会有2各设备节点在提供服务。


解决方法:

1.将创建临时节点改为创建zookeeper的永久节点;

2.服务完成后,主动删除zookeeper节点;

3.创建节点时,在节点中设置value值,value值包含2各字段,分别是设备节点ID和租约时间;

4.设备节点ID表示是哪个设备创建的节点,只有设备节点ID对应的设备可以更新租约时间;

5.设备在提供服务时,要定时更新租约时间;例如是5秒钟更新一次,更新为当前时间;

6.设备定时检查zookeeper节点中的租约时间有没有过期,例如设备的当前时间大于zookeeper节点中的租约时间超过10秒钟,可以认为锁过期,可以删除该zookeeper节点;

7.创建zookeeper节点成功的设备,定时检查zookeeper节点中的租约时间,若发现获取不到租约时间,或者发现租约过期,停止本设备中的服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值