分布式锁本质

分布式锁本质上属于分布式系统:假如锁用一个int来实现,它的值代表拿到锁的holder,0表示锁空闲。

那么分布式锁本质是consensus问题。

既然是consensus问题,很多朋友自然而然联想到paxos。然而,分布式系统有一个非常重要的FLP定理,它揭示了在异步网络下,任何共识算法不可能同时满足safetyliveness

而我们知道,paxos是满足safety属性的。

综上,结论为:基于异步网络下,任何基于分布式锁的算法和实现,safety和liveness不可兼得,因此,要么存在大家都拿不到锁的情况(liveness不满足),要么可能会有多个节点认为自己都拿到锁(safety不满足)。不可能存在“完美”的实现。

任何一篇分布式锁文章,都可以尝试用这种观点去审视。