分布式系统理论详解:CAP、BASE、PACELC

1 CAP理论

CAP理论是分布式系统领域中被广泛讨论的一个理论,由 Eric Brewer 在 2000 年提出,一般系统架构师会把其作为衡量系统设计的准则,其中CAP是一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)的缩写。

  • 一致性(C):这里特指强一致性,即任何时刻都可以读到最近一次成功更新的副本数据。
  • 可用性(A):指系统中一部分节点故障后,系统还能提供服务。
  • 分区容错性(P):指系统能够在网络分区(网络故障导致不同节点分布在不同的子网络,各个子网络内网络正常)的情况下还能提供服务。

它指出在一个分布式系统中,C、A和P这三个特性不能同时被满足,最多只能同时满足其中的两个

反证例子:

该系统由 A、B、C 三个节点构成,因 C 节点故障引发网络分区问题。若要完全满足 CAP 理论中的一致性要求,当客户端进行数据写入时,A 节点必须等待 C 节点同步完成,方可向客户端返回写入成功。

然而此时 C 节点已故障,数据注定无法写入。在此情况下,若出现读取该数据的请求,仅有两种应对之策:

  1. 放弃可用性,即等待所有节点数据达成一致状态,确保任意节点返回的数据相同,但此时系统必然无法及时响应;
  2. 放弃一致性,向客户端返回已写入 A、B 节点的新数据,不过后续 C 节点恢复后,当请求到达 C 节点时,会出现读取到的数据不一致的情况。

image-20241014210027442

所以在实际的分布式系统设计中,我们需要根据具体的业务需求来进行取舍。

image-20241014205142852

  1. 选择 AP 意味着舍弃强一致性,以保证高可用性和分区容错性。这种设计在大部分分布式系统中较为常见,在 AP 架构下,系统能够快速响应客户端的请求,即使在网络分区的情况下,也能尽量保证部分节点可用,从而为用户提供不间断的服务。然而,由于放弃了强一致性,可能会导致不同节点上的数据在同一时刻不一致,但可以通过后续的同步过程逐渐达到最终一致性。
  2. 选择 CP 意味着舍弃高可用性,以保证强一致性和分区容错性。在这种架构下,系统会优先确保数据的一致性,即使在网络分区的情况下,也会暂停部分节点的服务以保证数据的一致性。例如,一些数据库会在网络分区发生时,停止对不一致数据的读写操作,直到所有节点的数据达成一致。这种架构适用于对数据一致性要求极高的场景,如金融交易系统等。
  3. 选择CA意味着舍弃P,以保证高可用性和强一致性。这种情况在分布式系统中几乎不存在,因为网络分区在分布式系统中是必然的,P是分布式系统的前提。

从图中我们可以发现,关系型数据库多为CA架构,因为关系型数据库通常采用集中式或主从复制的架构,在设计上更注重数据的一致性和事务的完整性,对于可用性也有较高的要求,所以传统的关系型数据库通常在单一数据中心或较小规模的环境下运行,网络分区的情况相对较少。而在分布式系统中,由于节点众多且分布在不同的物理位置,网络分区的可能性大大增加,所以很难同时保证高可用性和强一致性,因此在 AP 和 CP 中较少出现关系型数据库。

2 BASE 理论

BASE理论是由 eBay 的架构师 Dan Pritchett 在 2008 年提出的,能适用于大型高可用可扩展的分布式系统。该理论提出了三个概念:

  1. BABasically Available(基本可用)。当系统出现故障或意外情况时,允许放弃掉部分可用性,保证核心功能可用,例如大促时降级策略等。
  2. SSoft state(软状态)。允许系统存在中间状态,并且该中间状态不会影响系统整体可用性。
  3. EEventually consistent(最终一致性)。指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。即意味着中间状态,只会短暂存在,在一定时间后,肯定会变成最终状态

在彻底认识BASE理论之前,我们需要回顾传统关系型数据库的ACID理论,即:

  • “Atomicity”(原子性):将组成事务的多个操作视作一个不可分割的整体,要么全部成功,要么全部失败,不能仅部分生效。
  • “Consistency”(一致性):事务执行前后,数据库只能从一个一致状态转变为另一个一致状态,即事务执行对整体数据产生的变化是一致的。
  • “Isolation”(隔离性):多事务并发执行时,各事务之间不能被其他事务干扰,就如同每个事务都在独立的沙箱中执行。
  • “Durability”(持久性):一旦事务提交,无论发生何种状况(如故障、宕机等),该事务对数据的变更都会永久保存。

BASE不同于ACID的强一致性模型,而是通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。

如果ACID为分布式数据库提供了一致性选择,那如何在分布式数据库里保证可用性呢?一个答案就是BASE理论。

所以很多人会认BASE理论是在CAP基础上,满足AP后对C方面的拓展与延伸,但这其实并不完全正确,BASE并非CAP的延伸理论,它是分布式场景中ACID理论的替代品。CAP的一致性,关注的是数据一致性;BASE的一致性,关注的是状态一致性,与ACID中的一致性是相同概念。

3 PACELC理论

PACELC(前者是CAP,后者是ELC,else->latency or consistency)理论才是CAP理论的扩展,由Daniel J. Abadi提出,进一步拓展了CAP理论。它考虑的是这样一个问题:系统在大部分时间下,分区都是平稳运行的,并不会出错,在这种情况下,系统设计要均衡的其实就是延迟与数据一致性的问题,为了保证数据一致性,写入与读取的延迟就会增高。这就引出了 PACELC 理论。

如果有分区(P),系统就必须在可用性(A)和一致性(C)之间权衡; 否则当系统运行在无分区情况下,系统需要在延迟(L)和 一致性(C)之间权衡。

image-20241014231953269

如今的分布式系统设计指导理论应该采用PACELC理论,来替代CAP理论,因为它不仅关注网络分区的极端情况,还涵盖了系统在正常运行时的表现。即使没有网络分区,系统设计依然要考虑在延迟和一致性上的取舍。对于现代分布式系统而言,延迟与一致性之间的平衡往往是影响用户体验和系统性能的关键问题。


相关内容

Buy me a coffee~
HeZephyr 支付宝支付宝
HeZephyr 微信微信
0%