CAP 理论(Consistency, Availability, Partition Tolerance)和 BASE 理论(Basically Available, Soft state, Eventually consistent)都是与分布式系统相关的理论,用于描述分布式系统在不同方面的特性和权衡。
CAP
CAP简介
CAP 理论/定理起源于 2000 年,由加州大学伯克利分校的 Eric Brewer 教授在分布式计算原理研讨会(PODC)上提出,因此 CAP 定理又被称作 布鲁尔定理(Brewer’s theorem)
2 年后,麻省理工学院的 Seth Gilbert 和 Nancy Lynch 发表了布鲁尔猜想的证明,CAP 理论正式成为分布式领域的定理。
CAP 是 Consistency(一致性) 、Availability(可用性) 、Partition Tolerance(分区容错性) 这三个单词首字母组合:
- 一致性(Consistency): 所有节点在同一时间看到相同的数据,即所有读操作都能获取到最新写入的数据。在分布式系统中,保持一致性可能需要对写操作进行同步处理,这可能会影响系统的性能和可用性。
- 可用性(Availability): 系统提供的服务必须保证在有限的时间内返回有效的响应,即系统能够响应客户请求。高可用性是分布式系统的一个关键目标,但在实现高可用性时可能会牺牲一些一致性。
- 分区容错性(Partition Tolerance): 分区是指网络中的通信问题,即节点之间无法相互通信。分区容错性意味着系统在遇到网络分区或消息丢失等问题时仍能继续运行。分布式系统通常会面临分区容忍的挑战,因此 CAP 理论认为分区容忍是必需的。
”3选2“?
CAP 理论提出了在分布式系统中不可能同时满足一致性、可用性和分区容错性这三个特性,最多只能同时满足其中两个。
如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但是对于分布式系统,分区是客观存在的,所以分布式系统理论上是不可选CA的。
因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。 比如 ZooKeeper、HBase 就是 CP 架构,Cassandra、Eureka 就是 AP 架构,Nacos 不仅支持 CP 架构也支持 AP 架构。
AP
要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。
CP
如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。
选择 CP 还是 AP 的关键在于当前的业务场景,没有定论,比如对于需要确保强一致性的场景如金融一般会选择保证 CP 。
另外,需要补充说明的一点是:如果网络分区正常的话(系统在绝大部分时候所处的状态),也就说不需要保证 P 的时候,C 和 A 能够同时保证。
BASE
尽管 CAP 理论提供了在分布式系统中一致性、可用性和分区容忍性之间的权衡,但它并没有提供具体的实现指导,而 BASE 理论则弥补了这一点。 BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。
BASE 是 Basically Available(基本可用) 、Soft-state(软状态) 和 Eventually Consistent(终一致性) 三个短语的缩写。
- 基本可用(Basically Available): 系统保证基本的可用性,即系统能够在有限的时间内返回有效的响应,但不需要保证强一致性。
- 软状态(Soft state): 系统中的数据可能会在一段时间内是不一致的,但最终会达到一致的状态。因此,系统允许数据在一段时间内是不确定的,这种状态称为软状态。
- 最终一致性(Eventually Consistent): 在一段时间后,所有节点的数据将会达到一致的状态。系统会保证最终数据的一致性,但在某些时刻可能会出现不一致的状态,然后会通过一定的机制最终达到一致。
BASE 理论强调的是在分布式系统中,不必要追求强一致性,而是可以通过牺牲一些一致性来获得更好的可用性和性能。BASE 理论的思想在大规模、高可用性的分布式系统中得到了广泛应用,例如在 NoSQL 数据库中。
base理论的基本特征
基本可用
假如系统出现了故障,允许损失部分可用性,当然也不能完全不可用。
损失的这部分可用性指的是什么?
- 响应时间上的损失:正常情况下的搜索引擎0.5秒即返回给用户结果,而基本可用的搜索引擎可以在2秒作用返回结果。
- 功能上的损失:在一个电商网站上,正常情况下,用户可以顺利完成每一笔订单。但是到了大促期间,为了保护购物系统的稳定性,出现错误时消费者可能会被引导到一个降级页面。
软状态
软状态指允许系统中的数据存在中间状态(CAP 理论中的数据不一致),并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
最终一致性
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证终数据能够达到一致,而不需要实时保证系统数据的强一致性。
分布式一致性的 3 种级别:
- 强一致性 :系统写入了什么,读出来的就是什么。
- 弱一致性 :不一定可以读取到新写入的值,也不保证多少时间之后读取到的数据是新的,只是会尽量保证某个时刻达到数据一致的状态。
- 终一致性 :弱一致性的升级版,系统会保证在一定时间内达到数据一致的状态。
业界比较推崇是最终一致性级别,但是某些对数据一致要求十分严格的场景比如转账还是要保证强一致性。
总结
CAP 理论和 BASE 理论都强调了在设计和运维分布式系统时需要权衡一致性、可用性和性能之间的关系。CAP 理论突出了在网络分区的情况下,一致性和可用性的权衡,而 BASE 理论则提供了一种通过牺牲强一致性来获得更好的可用性和性能的思路。这些理论为分布式系统的设计和架构提供了重要的指导原则。