1.什么是CAP
CAP原则又称CAP定理,指的是在一个分布式系统中的:Consistency 一致性、Availability 可用性、Partition tolerance 分区容错性。
CAP原则指的是,这三个要素最多只能同意实现两点,不可能三者兼顾。
2. Consistency 一致性
对某个特定的客户端来说,读操作保证能返回最新的写操作的结果。
下图中G1,G2属于一个集群,下面图解过程主要描述的是客户端向G1写入数据,之后向G2读取数据,达到一致性的过程。
3. Availability 可用性
非故障的节点在合理的时间内返回合理的响应。
4.Partition tolerance 分区容错性
当出现网络分区后,系统能够继续提供服务。
如下图,如果G1和G2网络不通,则出现了网络分区,此时,系统需要能够继续提供服务。
5.CAP为什么不能共存
举例:发生网络分区的时候,可用性的要求是继续提供读写服务,一致性的要求是数据要一致,已经有网络分区了(网不通),新增数据必然无法同步。
6.CAP必选之P-分区容错性
分区容错性是必要选择
1.所有的软件产品都是运行在互联网上的,互联网是以物理网络为载体的,那么网络分区是不可避免的(强行举例:曾经因为施工网线挖断,导致阿里服务暂停)
2.假设分区容错性不是必选,那么发生分区的时候不继续提供服务,A可用性肯定无法满足
7.CA二选一之CP、AP
CP:
描述:一致性和分区容错性,如果发生了网络分区,那么数据无法达成一致,需要停止服务,故牺牲了A可用性
优点:正常工作的集群,各服务节点的数据是一致的,那么客户端读取任何一个服务节点都不用担心数据不一致问题
缺点:要求数据一致,那么更新数据的时候,需要阻塞等待所有人同步完数据,服务延时较大
AP:
描述:可用性和分区容错性,如果发生了网络分区,依然可以对外提供读写服务,那么不同网络分区服务中的数据肯定会出现不一致,故牺牲了C一致性
优点:系统高可用,能容忍一定程度的外部错误(网络分区,少数服务器宕机)
缺点:客户端向集群中写入的数据,通过不同的服务读取,可能得到不同的结果
8.实战
zookeeper使用的是CP,对于C的话,使用的是最终一致性
eureka使用的是AP,因为注册中心这种业务对可用性要求较高,而且数据不一致的影响不大,可以通过重试获取连接其它服务器解决问题。