基于分布式一致性系统实现的分布式锁的生命期问题探究
基于分布式一致性系统实现的分布式锁的生命期问题探究
分布式锁的生命期,即占有分布式锁所有权的Client与Quorum Server之间建立连接上耦合的Session的生命期,依赖着Client与Quorum Server之间定期心跳来更新。Client与Quorum Server,如果在本端的Session超时时间内没有收到心跳,则判定本端Session超时。这里必须遵循“Quorum Server比Client后判定Session过期”这一原则,否则会出现Client依旧认为自己占据Session对应分布锁所有权,Quorum Server却判定Session超时,释放分布式锁所有权,导致其余Client同时抢锁成功,从而出现多个Client均认为自己占有同一分布式锁的数据不一致后果。因此,Client与Quorum Server需要合理协商两端的Session过期时间。
下图展示的是在最坏情况:Quorum Server立即收到来自Client心跳,开启新一轮Quorum Server端Session生命期。Client刚好在本端Session超时前收到来自Quorum Server的心跳回复。Client也开始下一轮Session生命期,然后继续发送心跳,如果该心跳包异常丢失,那么Client会在第二个Session生命期结束时判定本端Session过期,而此时一直在等待心跳的Quorum Server也必须判断Session在本端过期。因此,Quorum Server端Session生命期至少为2倍Client端Session生命期,这样可确保Client、Quorum Server双方对同一分布式锁的Session有效期判断可以维持分布式一致性。
还没有评论,来说两句吧...