CAP是什么?,分为以下三部分
1.一致性(Consistency)数据一致性
2. 可用性(Availability)系统能提供服务就好,数据不一定一致
3.分区容错性(Partition tolerance)网络节点之间无法通信的情况下, 节点被隔离,产生了网络分区, 整个系统仍然是可以工作的,这就是分区容错性
简单的解释一下:
首先画个简单的分布式图
简单来说,以上的分布式系统,将数据做冗余,中间有数据的备份,复制,保证了数据的同步,这个就是数据的一致性。但是这个有那么一个问题,如果有一天,机器A的网络突然断开了,导致以下两个问题
1.负载均衡找不到A机器,把用户的访问转向了B机器。
2.数据复制也找不到A机器,用户刚写的的数据没办法复制到B机器上,B机器还是老的数据。
但是这个不影响功能的提供,就是少看了几条数据,无伤大雅,网络通了数据复制就会开始工作,一切就会恢复,这个就是系统的可用性。
所以问题就很明显了, 在网络节点之间无法通信的情况下, 和数据复制相关的功能, 要么选择可用性(A) , 要么选择一致性(C), 不能同时选择两者。
这里就衍生了另外一个概念
那就是网络节点之间无法通信的情况下, 节点被隔离,产生了网络分区, 整个系统仍然是可以工作的,这个就是分区容错性(Partition tolerance, 简称P)。
如果选择了可用性(A) + 分区容错性(P) , 就要放弃一致性(C)。
如果选在一致性(C) + 分区容错性(P) , 就得放弃可用性(A) , 对了, 这种情况下,虽然系统的有些功能是不能使用的, 因为需要等待数据的同步, 但是那些和数据同步无关的功能还是可以访问的 , 相当于系统做了功能的降级。
既然有AP和CP, 会不会出现仅仅是CA(一致性+可用性)这种组合呢? 就是没有分区容错性, 只保留可用性和一致性? 仔细想想, 这种情况其实就退化成了单机应用, 没有意义了。