21-CAP理论
CAP理论
CAP定理又称作布鲁尔定理,是分布式计算领域公认的一个定理。采用Robert Greiner第二版对CAP定理的定义为:在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性、可用性、分区容错性三者中的二个,另外一个必然牺牲。
CAP三个约束的简单解释(以下解释来源于Robert Greiner第二版对CAP的分析):
一致性(Consistency):对某个指定的客户端来说,读操作能够保证返回最新的写操作结果。
可用性(Availability):非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。
分区容错性(Partition tolerance):当出现网络分区后,系统能够继续"履行职责"。
提示
分区指的是,你整个分布式系统不再是连通的,造成的原因可能是网络中断,可能是丢包,也可能是阻塞。
CAP应用
虽然CAP理论中定义三者只能取二个,但是在分布式系统中,我们必需选择P要素,因为网络本身无法做到100%可靠,有可能出现故障,分区是一个必然的现象。因此只能选择CP或都AP。
CP
如下图所示,为了保证一致性,当发生分区现象后,N1节点的数据已经更新为y,由于复制通道中断,数据无法同步到N2节点,N2节点的数据还是x。这时客户端C访问N2时,N2需要返回Error,提示客户端系统发生了错误。这种处理方式违背了可用性的要求,因此只能满足CP。
AP 如下图所示,为了保证可用性,当发生分区现象后,N1节点的数据已经更新为y,由于复制通道中断,数据无法同步到N2节点,N2节点的数据还是x。这时客户端C访问N2时,N2将当前拥有的数据x返回给客户端C,而实际上当前最新的数据已经是y了,这就不满足一致性的要求,因为CAP只能满足AP。虽然x不再是一个"正确的"结果,但是仍然是一个"合理"的结果,因为x是旧的数据,不是一个错乱的数据,只是不是最新的数据而已。