分布式系统理论是一组用于理解、设计和分析分布式系统的核心概念、模型和原理。这些理论帮助解决由分布性、并发性、故障和不确定性带来的挑战。基础理论包括 CAP 理论和 BASE 理论。
CAP 理论
基本概念
一致性(Consistency)
在分布式环境中,一致性是指数据在多个节点之间能够保持一致的特性。如果在某个节点上执行变更操作后,用户可以立即从其他任意节点上读取到变更后的数据,那么就认为这样的系统具备强一致性。
可用性(Availability)
可用性是指系统提供的服务必须一直处于可用状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。
它主要强调以下两点:
- 有限的时间内:对于用户的一个请求操作,系统必须要在指定的时间内返回处理结果,如果超过这个时间,那么系统就被认为是不可用的。
- 返回结果:不论成功或者失败,都需要明确地返回响应结果。
分区容错性(Partition Tolerance)
分区容错性指定是分布式系统在遇到网络分区时,仍需要能够对外提供一致性和可用性的服务,除非是整个网络环境都发生了故障。
这里的网络分区指的是:
- 在分布式系统中,由于不同的节点会分布在不同子网中(不同机房或异地网络等),由于一些特殊的原因,可能会出现子网内部是正常的,但子网彼此之间却无法正常通信,从而导致整个系统的网络被切分成若干个独立的区域。
核心概念
在分布式系统中,一致性 (C)、可用性 (A) 和分区容错性 (P) 这三个理想特性无法同时完全满足。当发生网络分区(P)时,系统必须在一致性(C)和可用性(A)之间做出取舍。
选择策略

因为 CAP 理论不能将一致性、可用性和分区容错性都满足,所以需要根据不同系统的特性进行取舍,主要分为以下三种情况:
-
保证 AC,放弃 P
- 这种情况下可以将所有数据都放在一个分布式节点上,这样可以避免网络分区带来的影响,但同时也意味着放弃了系统的可扩展性。
-
保证 CP,放弃 A
- 这种情况下如果发生了网络分区故障,此时节点间的数据就无法同步。因此在故障修复前都需要放弃对外提供服务,直至网络恢复,数据到达一致为止。
-
保证 AP,放弃 C
- 这种情况相当于放弃一致性。
- 具体而言,是放弃数据的强一致性,但保证数据的最终一致性。因为不论是什么系统,数据最终都需要保持一致,否则整个系统就无法使用。
- 在这种策略下,在某个短暂的时间窗口内会存在数据不一致的情况。
BASE 理论
BASE 是 Basically Available(基本可用)、Soft-state(软状态)和 Eventually Consistent(最终一致性)三个短语的缩写。
BASE 理论是对 CAP 中一致性 C 和可用性 A 权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。
基本概念
基本可用(Basically Available)
基本可用是指分布式系统在出现不可预知的故障时,允许损失部分可用性,例如:
- 延长响应时间:比如原来的的查询只需要 0.5 秒,在系统出现故障时延长到 2~3 秒;
- 服务降级:比如在商品秒杀时,部分用户会被引导到一个降级页面。
软状态(Soft-state)
软状态也称为弱状态,是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统整体的可用性,即允许不同节点间的数据同步存在延时。
最终一致性(Eventually Consistent)
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终需要达到一致的状态。
核心思想
即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。也就是牺牲数据的一致性来满足系统的高可用性,系统中一部分数据不可用或者不一致时,仍需要保持系统整体『主要可用』。