分布式锁使用注意事项

    在分布式系统中,分布式锁被广泛用于共享资源互斥,Master选主等,然而,使用分布式锁使用过程中,需要注意以下一些坑:

分布式锁正确性的坑

    首先,分布式锁从协议上是正确的, 这里有一个假设条件是分布式锁的客户端和服务端的CPU时钟运转频率是一致的,或者相差很小。这样才能保证server端不会比client先感知到丢锁事件发生,造成锁的正确性被破坏。

 

Faulty Scenario 1

                                                                              图1



    其次,对于基于心跳机制实现的分布式锁,丢锁事件依赖于心跳异常来感知。异常事件可以通过回调函数来通知,也可以通过轮询心跳健康来判断是否发生丢锁。 但不论哪种实现,当丢锁事件发生时,假设对于互斥区的操作已经被发出(如网络延迟, FullGC事件),不可被撤回。那么就存在多个client,同时对互斥区进行操作的风险,如图1所示。 所以,负责互斥区的数据系统一定要有防护措施,能够避免这个情况,拒绝丢锁的进程仍然可以操作互斥区。 可以通过ConditionalUpdate或者基于互斥区版本递增的方法来进行预防。

                                                                                         图2

基于互斥区版本号来预防的方法可以参考: https://github.com/DistributedComponents/disel/wiki/Lease-based-Lock-Protocol

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值