分布式系统的 CAP 理论:首先把分布式系统中的三个特性进行了如下归纳:
● 一致性(C): 在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
● 可用性(A): 在集群中一部分节点故障后,集群整体是否还能响应客户端 的读写请求。(对数据更新具备高可用性)
● 分区容忍性(P): 以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前 操作在 C 和 A 之间做出选择。(分区状态可以理解为部分机器不连通了,比如机器挂了,繁忙失去响应,单机房故障等)
Partition 字面意思是网络分区,即因网络因素将系统分隔为多个单独的部 分,有人可能会说,网络分区的情况发生概率非常小啊,是不是不用考虑 P, 保证 CA 就好。要理解 P,我们看回 CAP 证明中 P 的定义:
In order to model partition tolerance, the network will be allowed to lose arbitrarily many messages sent from one node to another。
我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。
网络分区的情况符合该定义,网络丢包的情况也符合以上定义,另外节点宕 机,其他节点发往宕机节点的包也将丢失,这种情况同样符合定义。现实情况 下我们面对的是一个不可靠的网络、有一定概率宕机的设备,这两个因素都会 导致 Partition,因而分布式系统实现中 P 是一个必须项,而不是可选项。
高可用、数据一致性是很多系统设计的目标,但是分区又是不可避免的事情。 我们来看一看分别拥有 CA、CP 和 AP 的情况。
CA without P:如果不要求 P(不允许分区),则 C(强一致性)和 A(可用 性)是可以保证的。
但其实分区不是你想不想的问题,而是始终会存在,CA 系 统基本上是单机系统,比如单机数据库。2PC 是实现强一致性的具体手段。