如何理解Redis RedLock的潜在失败场景与Zookeeper的锁一致性保障?-灵析社区

Frank的私人司机

redis有红锁机制 zookeeper有ZAB协议。 两者都是必须超过一半的节点响应成功才算成功 那为什么基于redlock还是有可能会加锁失败?而zookeeper则认为可以保证一定能一致呢? 比如网上常举例的,redis有A B C D E五个节点,现在A B C 写入了一个锁,然后C还没来得及持久化就重启,或者C突然不可用被踢出,又新加了一个节点F。客户端2在D E F上加了同一把锁成功。 那zookeeper就没有上述问题吗? 再者,它加锁加的是一个临时有序节点,那如果这个节点自己崩溃了呢?客户端认为获取到了这把锁,然后这个节点自己崩溃了,那客户端2是不是就可以加锁了?

阅读量:176

点赞量:0

问AI
Martin 和 antirez 两位大佬就 RedLock 是否安全在很多年前展开过一次讨论,那次讨论很有名,网上也有大把的解读。 非要说一个结论的话就是:所有带超时机制的分布式锁,都无法在某个节点取得锁之后完美解决 NPC 问题 。因此 Zookeeper 同样也不是百分百安全的。 P.S. NPC 即 Network Delay, Process Pause, Clock Drift 三个分布式问题的首字母缩写。