CAP定理:前提是分布式系统中,CAP三个只能满足两个,不能同时满足三个特性。

首先说分区容错性,基本上分布式系统都要满足这个,否则当某个节点挂了,就不对外提供服务了,那还能叫分布式系统么,挂一个就都挂了,那就是单机系统啊,分布式就没意义了。
好了,那么如果一般情况下都要满足分区容错性,那么就看看一致性和可用性能不能再同时满足。
比如说有3台机器ABC,正常情况下,3台机器互相数据同步,对外提供服务
如果某一时刻,A机器和BC机器断开了,那么应该怎么办?
要么就是继续都对外提供服务,那么此时就会出现ABC三台机器对外数据不一致的情况,这就是满足了可用性,但不满足一致性
另一种情况就是一旦发现机器不可用了,就暂停对外服务,直到ABC互相连通,再对外提供服务,这就是满足了一致性,但不满足可用性了,因为暂定服务这段时间服务就不可用了
所以说这种情况下,同时要满足可用性和一致性是不可能的,具体舍弃哪个,得看业务情况
上面举的例子,其实并不能很好解释为何不能同时满足,看着解释清楚,细想全是漏洞
如果做到以上三点是不是同时满足CAP?
其实并不是,满足以上三点后,也仅仅是CP, 集群一旦被分割成两部分,那么让哪部分保持可用呢?由于互相之间无法通信,只能通过数量来决定,剩余集群节点数量过半的保持可用,少于半数停止服务。这个时候其实不满足A,因为一旦集群宕机数量过半数,集群就无法访问了,而A的要求是一直可用。
C的要求是强一致
CAP不能同时满足最关键的原因是要求都太高了
在宕机数量不过半的情况下,我觉得是可以同时满足CA的
下一篇:Unity时间相关