01 - ACID / BASE / CAP
CAP Theorem
C-onsistency
每次对系统读取返回的是最新写入的资料,否则返回错误
A-valiability
任何时候对系统发出请求时都能返回结果,不会返回错误,但系统不能保证结果是正确的
P-artition Tolerance
主系统 scale out 多个子系统,当主系统发生故障时,整个系统依旧能返回正确结果
CAP: 分布式系统中最多满足上述三个性质中的两个,所以一共有 $C_3^2 = 3$ 种搭配
- Consistency + Availiability
- 单机系统,只要电脑不发生故障,系统就能持续工作且结果保持一致,但缺少了 Scalability
- Consistency + Partition Tolerance
- 有 Scalability,若系统内有一个元件还未更新到最新结果,由于缺少 Availability 和需保持 Consistency,系统返回错误
- 应用:
Distributed RDBMS
以 Consistency 为最高原则,不允许一个 Client A 在向 Server A 写入结果时,能从 Server B 读取其他数据
- Availability + Partition Tolerance
- 任何时候都能返回正确结果,但是不保证返回结果的即时性
- 应用:
DNS
和NoSQL
,两者皆保证系统能正常运作,但返回的结果不一定是最新的
ACID
Wiki:当我通过银行转帐,数据库第一步从我帐户扣除金额,第二步在对方帐户增加金额,这两步连续动作就是一个Transaction
A-tomicity
一个 Transaction 里的动作要么全部执行成功要么全部失败
C-onsistency
一个 Transaction 将数据库从一个合法状态转移到另一个合法状态,当 Transaction 结束后,资料符合数据库的完整性约束
I-solation
多个 Transactions 并非同时执行,而是并发执行的
D-urability
一个 Transaction 对数据的改动是永久保存的,即使系统失效重启
注意: ACID 与 CAP 表示的 Consistency 意义不同,ACID 表示数据库的数据在修改后是合法的,CAP 表示每个元件的副本数据都是一致的
BASE
B-asically A-vailable
服务基本保持可用, Client的请求一定能返回结果,类似于 CAP 中的 A
S-oft State
即使 Client 没有发送请求,元件中存储的资料也可能会随时间改变
E-ventually Consistency
一定程度上的 Consistency+Availability。如目前元件断线,Client 也可以读取到旧数据,但当一段时间过后,所有元件都会更新成最新的资料,Client 再次读取时就能取得最新的资料
Summary
分布式系统中,Partition 是不可避免的,取舍 Consistency 和 Availability 主要看应用需求。
像 BASE 中的 Eventually Consistency 就做出了 Consistency 和 Availability 的平衡,因此我们不需要绝对地抛弃任何一个性质,而是看应用需求确定平衡的比例是多少。