分布式锁本质上属于分布式系统:假如锁用一个int来实现,它的值代表拿到锁的holder,0表示锁空闲。 那么分布式锁本质是consensus问题。 既然是consensus问题,很多朋友自然而然联想到paxos。然而,分布式系统有一个非常重要的FLP定理,它揭示了在异步网络下,任何共识算法不可能同时满足safety和liveness。 而我们知道,paxos是满足safety属性的。 综上,结论为:基于异步网络下,任何基于分布式锁的算法和实现,safety和liveness不可兼得,因此,要么存在大家都拿不到锁的情况(liveness不满足),要么可能会有多个节点认为自己都拿到锁(safety不满足)。不可能存在“完美”的实现。 任何一篇分布式锁文章,都可以尝试用这种观点去审视。