BASE 理论是对 CAP 理论进行权衡后得出的选择

1. BASE 理论

BASE 理论是指:

  • Basically Available 基本可用
  • Soft State 软状态
  • Eventual Consistency 最终一致性

1.1 Basically Available 基本可用

基本可用指的是当系统出现故障时,允许损失部分可用性(功能、响应时间等),但核心功能仍然可用。

1.2 Soft State 软状态

软状态是允许系统中的数据存在中间状态而不影响系统整体可用性。

通俗点说:除非刷新,否则信息(状态)会过期或被系统丢失,但系统仍然能正常运行。

相反地,当系统拥有强一致性时,数据所处的状态就是硬状态(Hard State)

软状态的定义比较模糊,想有更详细的了解可以浏览以下资料:

What does 'soft-state' in BASE mean? - Stack Overflow
"Soft" and "Hard" State - MIT

1.3 Eventual Consistency 最终一致性

最终一致性也称为乐观复制,是弱一致性的特殊形式,指的是能保证数据在更新前,返回最新值。

而一致性一般又分为五种:

1.3.1 Causal Consistency 因果一致性

因果一致性指的是:如果节点A在更新完某个数据后通知了节点B,那么节点B之后对该数据的访问和修改都是基于A更新后的值。于此同时,和节点A无因果关系的节点C的数据访问则没有这样的限制。

1.3.2 Read your Writes 读己之所写

读己之所写指的是:节点A更新一个数据后,它自身总是能访问到自身更新过的最新值,而不会看到旧值。其实也算一种因果一致性。

1.3.3 Session Consistency 会话一致性

会话一致性将对系统数据的访问过程框定在了一个会话当中:系统能保证在同一个有效的会话中实现 “读己之所写” 的一致性,也就是说,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值。

1.3.4 Monotonic Read Consistency 单调读一致性

单调读一致性指的是:如果一个节点从系统中读取出一个数据项的某个值后,那么系统对于该节点后续的任何数据访问都不应该返回更旧的值。

1.3.5 Monotonic Write Consistency 单调写一致性

单调写一致性指的是:一个系统要能够保证来自同一个节点的写操作被顺序的执行。

2. ACID 与 BASE

在传统的关系型数据库中,常常会要求拥有 ACID 性质(如事务),ACID 表示:

  • Atomicity 原子性 (事务操作要么全部执行,要么全不执行)
  • Consistency 一致性 (数据之间保持一致性约束)
  • Isolation 独立性 (每个事务之间不会互相干扰)
  • Durability 持久性 (事务对数据库的影响永远不会丢失)

ACID 和 BASE 可以说是两种截然相反的设计方向,ACID 要求了强一致性, BASE 放弃一部分一致性以提高系统伸缩性和性能。但在具体系统设计中,由于场景和对系统的要求不同,常常会结合使用。就连关系型数据库也有部分功能采用 BASE 设计。