CAP理论
CAP理论说明在分布式系统中,一致性,可用性和分区容忍性中的3项只能满足两项
-
C:一致性:假设在 T 时刻写入了一个值,那么在 T 之后的读取一定要能读到这个最新的值。
-
A:可用性:也就是无论系统发生任何故障,都仍然能对外提供服务。
-
P:分区容忍性。
P:分区容忍性
分区错误指的是分布式集群中的出现两个节点之间通信失败,可能是两个节点之间的通信链路出错,也可以是其中一个节点宕机。例如下图中的两个节点G1和G2分别处于两个子网中,G1向G2发送消息,G2可能无法收到,就出现了分区错误。
分区容忍性是指分布式系统中能够容忍分区错误的出现,在分布式系统内,分区是必然的发生的,因此分布式系统必须选则 P,否则一旦发生分区错误,整个分布式系统就完全无法使用了,这是不符合实际需要的。
C:一致性
一致性指的是在时间T1时刻向分布式集群中的一个节点写入一个数据,在时刻T之后的时间,不论在客户端从哪个节点读取数据,都必须是T时刻修改过后的数据。
如下图所示,t1时刻客户端向G1节点写一个数据V1,如果t2时刻从G2节点读取数据是t1时刻写入的数据,就说明系统一致,若从G2节点读取的数据是v0就说明系统不一致
A:可用性
可用性是指客户端任何时刻向系统读取数据,系统都会返回一个数据,即使是不一致或者说是过期的数据,如下图所示,t1时刻客户端向G1节点写入数据v1,但是由于分区错误,G1的数据没有同步到G2,t2时刻客户端从G2节点读取数据时任然可以得到数据v0,只是获取的数据并不是正确的数据。
由于P是分布式系统必须满足的特性,而当网络分区错误出现时,会出现分布式节点中网络不一致的情况,这时候一致性和可用性将不能同时满足
如下图所示为CP系统和AP系统,当G1和G2中的数据不一致时,CP系统中为了满足一致性,客户端从G2将不能获取到任何数据,即G2节点不可用,AP系统中为了满足可用性,G2节点会返回v0给客户端
Spanner官方声称是一个CA系统,但是准确来说是一个 CP + HA 系统,可用性是优于 5 个 9 ,稍微小于 6 个 9,也就是说,Spanner 在系统出现了大的故障的情况下,大概 31s+ 的时间就能够恢复对外提供服务,这个时间是非常短暂的,远远比很多外部的系统更加稳定。然后鉴于 Google 强大的自建网络,P 很少发生,所以 Spanner 可以算是一个 CA 系统。
TiDB 在设计的时候也是一个 CP + HA 系统,多数时候也是一个 CA 系统。如果出现了 P,也就是刚好对外服务的 leader 被隔离了,新 leader 大概需要 10s+ 以上的时间才能选举出来对外提供服务。