分布式系统CAP理论和BASE思想概述

CAP

CAP 理论指分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)和分区容忍性(P:Partition tolerance),最多只能同时满足其中两项。

  • 一致性 (Consistency):指在分布式环境中,数据在多个副本之间能否保持一致的特性。在一致性要求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。
  • 可用性 (Availability):指在分布式环境中,系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。这里的 “有限时间” 指对于用户的一个操作请求,系统必须能够在指定的响应时间内返回对应的处理结果,超过时间则认为不可用;而对于 “返回结果”,要求系统在完成对用户的请求处理后,返回一个正常的响应结果(成功或失败)。
  • 分区容忍性 (Partition tolerance):指在分布式环境中,系统遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

在设计分布式系统时,需要根据实际需求弱化某一要求。因此就有了下图中的三种设计:CA、CP 和 AP。 CAP

根据 CAP 定理的约束,我们可以推导出满足场景的应用如下:

放弃 CAP 定理 说明
放弃 P 放弃分区容忍性的简单做法是把所有与分布式相关数据都集中在一个节点上,这样不会碰到网络分区带来的问题,但是放弃了分布式系统的扩展性
放弃 A 放弃可用性意味着在系统遇到网络分区或者其他故障时,受影响的服务需要进行等待,在等待期间系统不可用
放弃 C 放弃一致性指放弃数据的强一致性,而保留最终一致性,这样系统无法保证实时的一致性,但是最终会达到一致的状态

所以,对于分布式系统,分区容忍性是最基本的要求,而可用性和一致性之间的平衡,往往需要架构师根据业务场景进行权衡。

BASE

BASE 理论是基本可用 (Basically Available)、软状态 (Soft state) 和最终一致性 (Eventually consistent) 三个短语的缩写。BASE 理论是对 CAP 中一致性和可用性权衡的结果,是基于 CAP 定理逐步演化而来的。

BASE> 理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

  • 基本可用:指分布式系统在出现故障的时候,保证核心可用,允许损失部分可用性。主要包括响应时间上的损失 (例如原来在 500ms 响应的服务,由于出现故障响应时间增加到 2s) 和功能上的损失 (例如电商大促时由于消费者购买行为激增,为了保证系统稳定,部分消费者被引导到降级页面)

  • 软状态:指允许系统存在中间状态,而该中间状态不会影响系统整体可用性,即允许系统在不同节点的数据副本之间进行同步的过程存在延时。

  • 最终一致性:指所有的数据副本,在经过一段时间的同步之后,最终都能够达到一致的状态。强一致性需要保证数据副本实时一致,而最终一致性只需要保证过一段时间是一致的。

ACID 是传统数据库系统常用的设计理论,追求强一致性模型。BASE 常用于大型分布式系统,只需要保证最终一致性。在实际的分布式场景中,不同业务单元和组件对一致性的要求是不同的,因此 ACID 和 BASE 往往会结合在一起使用。

FLP 不可能性原理

FLP 不可能原理指在网络可靠,存在节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。

FLP 不可能原理实际上告诉人们,不要浪费时间去为异步分布式系统设计在任意场景下都能实现共识的算法

FLP 原理实际上说明对于允许节点失效情况下,纯粹异步系统无法确保一致性在有限时间内完成。

参考资料

CAP theorem