CAP

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,因为注册中心这种业务对可用性要求较高,而且数据不一致的影响不大,可以通过重试获取连接其它服务器解决问题。
  
  

  

原文地址:https://www.cnblogs.com/gc65/p/12773450.html