CAP理论

CAP理论是对分布式系统的特性进行高度抽象,提出了三个指标:

  1. 一致性(Consistency)
  2. 可用性(Availability)
  3. 分区容错性(Partition Tolerance)

一致性(C)

  1. 一致性要求无论客户端进行读取操作时访问哪个节点,都应该读取到相同的最新数据,或者读取失败。
  2. 一致性可以被视为分布式系统对客户端的一种承诺:无论访问哪个节点,系统都会返回绝对一致的数据,否则读取操作将失败。因此,一致性强调的是各节点之间的数据一致性,而非数据完整性。
    可用性(A)
  3. 可用性要求任何来自客户端的请求,无论访问哪个节点,都能得到响应数据,但不保证是同一份最新数据。
  4. 可用性可以被视为分布式系统对客户端的另一种承诺:尽力返回数据,不会不响应,但不保证每个节点返回的数据都是最新的。该指标强调的是服务可用性,而非数据一致性。
    分区容错性(P)
  5. 当节点间出现任意数量的消息丢失或高延迟时,系统仍然能够提供服务。
  6. 换句话说,分布式系统向访问客户端保证:无论出现何种内部数据同步问题,系统都将持续运行并提供服务。该指标强调集群对分区故障的容错能力。

如何使用CAP理论

鉴于网络交互必然伴随延迟和数据丢失,分区故障是不可避免的。因此,分区容错性(P)是必须要保证的前提。
此时需要在一致性(C)和可用性(A)之间做出选择:要么选择一致性以保证数据绝对一致性,要么选择可用性以保证服务可用。
CP和AP的含义

  • 选择一致性(C)时,若由于消息丢失或延迟导致网络分区,部分节点无法保证特定信息为最新时,集群将拒绝新数据写入。
  • 选择可用性(A)时,系统将始终处理客户端的查询,若发生网络分区,则一些节点将返回非最新的信息,但不会出现响应错误。
    总结:
  • CA模型在分布式系统中不存在,因为舍弃P意味着舍弃分布式系统,如单机版关系型数据库MySQL。
  • CP模型的分布式系统,一旦发生网络分区,将影响用户体验和业务可用性,典型应用有ZooKeeper、Git和HBase。
  • AP模型的分布式系统实现了服务的高可用性,用户访问系统时都能得到响应数据,但出现分区故障时,访问不同节点可能得到不同的响应数据,典型应用有Cassandra和DynamoDB。

BASE理论

BASE理论是CAP理论中A(可用性)和P(分区容错性)的延伸,强调可用性,其核心是:

  • 基本可用(Basically Available)
  • 软状态(Soft state)
  • 最终一致性(Eventually consistent)

基本可用:

  1. 当分布式系统出现不可预知的故障时,允许损失部分功能的可用性,以保障核心功能的可用性。
  2. 可以将基本可用理解为当系统节点出现大规模故障时,通过服务降级牺牲部分功能的可用性,以保障系统的核心功能可用。
    软状态:
    软状态描述的是实现服务可用性时系统数据的一种过渡状态,即不同节点间存在短暂的数据不一致。
    最终一致性:
  3. 所有数据副本在一段时间的同步后,最终能够达到一致的状态,存在短暂的数据一致性延迟。
  4. 几乎所有互联网系统都采用最终一致性,只有在无法满足时才会使用强一致性或事务,比如对于系统运行的敏感元数据和与钱相关的支付系统或金融系统的数据。

如何使用BASE理论

  1. BASE 理论是对 CAP 中一致性和可用性权衡的结果,它来源于对大规模互联网分布式系统实践的总结,是基于 CAP 定理逐步演化而来的。它的核心思想是,如果不是必须的话,不推荐实现事务或强一致性,鼓励可用性和性能优先,根据业务的场景特点,来实现非常弹性的基本可用,以及实现数据的最终一致性。
  2. BASE 理论主张通过牺牲部分功能的可用性,实现整体的基本可用,也就是说,通过服务降级的方式,努力保障极端情况下的系统可用性。
  3. ACID 理论是传统数据库常用的设计理念,追求强一致性模型。BASE 理论支持的是大型分布式系统,通过牺牲强一致性获得高可用性。BASE 理论在很大程度上,解决了事务型系统在性能、容错、可用性等方面痛点。BASE 理论在 NoSQL 中应用广泛,是 NoSQL 系统设计的事实上的理论支撑。