背景
相信看这个的人都了解一些通过redis实现的锁,基本原理这里就不在讨论了,随便一百度,应该有很多。基于redis实现分布式锁有个很著名的算法叫做redlock,有名的原因在于引起了分布式系统的大佬和redis作者的“热烈讨论”。
原文
Martin Kleppmann 的质疑贴
Antirez 的反击贴
各自观点
Martin的观点
由于网络的延迟、客户端系统的处理延迟(如gc)、机器时钟滞后的影响,锁依然会出现不准确性,具体看下图。
对于这个问题可以通过fencing token来解决,例如:
t1 : client1 申请的锁具有token:10
t2: 在client1超时的情况下client2申请的锁具有token:11
t3:client1在写入storage的时候,storage系统根据token检查发现token10已经失效,会拒绝数据写入
而redlock并没有此机制,强烈依赖时间延迟方面的假设,不能作为严格的分布式锁使用,建议采用zookeeper来使用