two impossibility results in distributed system
在分布式领域,有两个比较著名的impossibility results理论。第一个是FLP impossibility result,这个理论在学术界比较知名,常用于指导分布式算法的设计。第二个是工业界比较知名的CAP理论,对于开发者设计分布式系统具有指导意义。
FLP impossibility result
FLP impossibility result是由Fischer,Lynch和Patterson三位提出,并且用他们名字的首字母命名的。
在分布式环境下,假设如果节点失败,只能是宕机引起的;网络是可靠的;网络延迟没有限制。在这3个假设的前提下,FLP理论认为对于异步分布式环境下的失败,不存在一个确定的算法能够解决一致性问题(consensus problem)(there does not exist a (deterministic) algorithm for the consensus problem in an asynchronous system subject to failures, even if messages can never be lost, at most one process may fail, and it can only fail by crashing (stop excecuting))。
FLP理论重要的原因在于它指明了异步系统模型设计的折中:解决一致性问题的算法只能满足安全性(safety)和活性(liveness)中的一个。
CAP
CAP理论相比于FLP理论,极为相似,只是多了一个不同的假设:网络失败。
这个理论陈述了三种特性:
一致性:所有节点在同一时刻所见的数据都是相同的。
可用性:某些节点的失败不能阻塞系统中其他正常节点的运行。
分区可容忍性:网络分区和节点失败不能阻塞系统的正常运行。
CAP理论认为,上面的三种特性只能满足两个。下图是图示说明

其中,三种特性都满足的算法是不存在。下面给出三种不同的组合:
CA(consistency + availability):代表算法有两阶段提交。
CP(consistency + partition tolerance):代表算法有Paxos。
AP(availability + partition tolerance):代表算法有八卦协议(Gossip protocol)。
这里的一致性表示强一致性。基于CA设计的系统不能容忍节点失败。基于CP设计的系统,在2f+1的节点下,可以容忍f个节点的失败,但是这f个节点是不可用的。基于AP设计的系统因为既要可用,又要能容忍分区,所以一致性不能保证。
对于早期很多分布式系统的设计都满足CA。而随着全球数据中心的部署,分区可容忍性也变得越来越重要。
这里有一个很容易产生的误区是,大家可能会误认为在允许网络分区的情况下,一致性和可用性只能二选一,其实不然。如果对于一致性要求没有非常严格的情况下,我们可以降低一致性的要求,从而同时满足两个特性,比如只要求弱一致性,或者最终一致性。
浙公网安备 33010602011771号