分布式协议与算法实战——CAP理论(笔记)

CAP理论是根据业务特点,为系统设计合适的分区容错一致性模型,以实现集群能力的指南针

CAP 理论是对分布式系统的特性做了高度抽象,比如抽象成了一致性、可用性和分区容错性,并对特性间的冲突(也就是 CAP 不可能三角)做了总结。

CAP三指标

CAP 理论对分布式系统的特性做了高度抽象,形成了三个指标:

  • 一致性(Consistency):是客户端的每次读操作,不管访问哪个节点,要么读到的都是同一份最新的数据,要么读取失败。
  • 可用性(Availability):是任何来自客户端的请求,不管访问哪个节点,都能得到响应数据,但不保证是同一份最新数据。
  • 分区容错性(Partition Tolerance):当节点间出现任意数量的消息丢失或高延迟的时候,系统仍然可以继续提供服务。

可以把一致性看作是分布式系统对访问本系统的客户端的一种承诺:不管访问哪个节点,要么返回的都是绝对一致的数据,要么读取失败。可以看到,一致性强调的不是数据完整,而是各节点间的数据一致。

可以把可用性看作是分布式系统对访问本系统的客户端的另外一种承
诺:尽力给客户端返回数据,不会不响应客户端,但是不保证每个节点给客户端的数据都是最新的。这个指标强调的是服务可用,但不保证数据的一致。

可以把分区容错性看作是分布式系统在告诉访问本系统的客户端:不管系统内部出现什么样的数据同步问题,系统会一直运行,提供服务。这个指标,强调的是集群对分区故障的容错能力。

因为分布式系统与单机系统不同,它涉及到多节点间的通讯和交互,节点间的分区故障是必然发生的,所以在分布式系统中分区容错性是必须要考虑的。

CAP 不可能三角

CAP 不可能三角说的是对于一个分布式系统而言,一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)3 个指标不可兼得,只能在 3 个指标中选择 2 个。

如何使用 CAP 理论

只要有网络交互就一定会有延迟和数据丢失,还必须保证系统不能挂掉。因此,节点间的分区故障是必然发生的。也就是说,分区容错性(P)是前提,是必须要保证的。

CP模型

当选择了一致性(C)的时候,如果因为消息丢失、延迟过高发生了网络分区,部分节点无法保证特定信息是最新的,那么这个时候,当集群节点接收到来自客户端的写请求时,因为无法保证所有节点都是最新信息,所以系统将返回写失败错误,也就是说集群拒绝新数据写入

AP模型

当选择了可用性(A)的时候,系统将始终处理客户端的查询,返回特定信息,如果发生了网络分区,一些节点将无法返回最新的特定信息,它们将返回自己当前的相对新的信息。

CA模型

不存在网络分区的情况下,也就是分布式系统正常运行时(这也是系统在绝大部分时候所处的状态),就是说在不需要 P 时,C 和 A 能够同时保证。只有当发生分区故障的时候,也就是说需要 P 时,才会在 C 和 A 之间做出选择。而且如果各节点数据不一致,影响到了系统运行或业务运行(也就是说会有负面的影响),推荐选择 C,否则选 A。

总结

  • CA 模型,在分布式系统中不存在。因为舍弃 P,意味着舍弃分布式系统,就比如单机版关系型数据库 MySQL,如果 MySQL 要考虑主备或集群部署时,它必须考虑 P。
  • CP 模型,采用 CP 模型的分布式系统,一旦因为消息丢失、延迟过高发生了网络分区,就影响用户的体验和业务的可用性。因为为了防止数据不一致,集群将拒绝新数据的写入。
    典型的应用是 ZooKeeper,Etcd 和 HBase。
  • AP 模型,采用 AP 模型的分布式系统,实现了服务的高可用。用户访问系统的时候,都能得到响应数据,不会出现响应错误,但当出现分区故障时,相同的读操作,访问不同的节点,得到响应数据可能不一样。
    典型应用就比如 Cassandra 和 DynamoDB。

你可能感兴趣的:(笔记)