此篇介绍几个跟分布式系统有关的理论。

FLP不可能原理

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

CAP原理

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三项中的两项。

  1. 一致性(Consistence)
    对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。
  2. 可用性(Availability)
    非故障节点在合理的时间内返回合理的响应。
  3. 分区容忍性(Partition Tolerance)
    当出现网络分区后,系统能够继续履行职责。

在分布式环境下,必须选择 P。因为网络原因可能出现故障,所以分区是一个必然现象。因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP。

  • CAP理论说分布式系统中这3点无法同时满足,但一定不要理解错误了,不要认为我们在架构设计时,这个系统要么 CP 要么 AP。
  • 要记住:CAP 关注的粒度是数据,系统中会包含多种类型的数据,有的必须选择 CP,有的必须选择 AP。

BASE理论

BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。

  1. 基本可用(Basically Available)
    分布式系统在出现故障时,允许损失部分可用性,保证核心可用。
  2. 软状态(Soft State)
    允许系统存在中间状态,该中间状态不会影响系统整体可用性。
  3. 最终一致性(Eventual Consistency)
    系统中所有数据副本经过一定时间后,最终能够达到一致状态。

BASE支持的是大型分布式系统,牺牲掉对一致性的约束(但实现最终一致性),来换取一定的可用性。

ACID原则

ACID原则指的是:

Atomicity(原子性)
Consistency(一致性)
Isolation(隔离性)
Durability(持久性)

用了四种特性的缩写。

ACID是传统数据库事务常用的设计理念,追求强一致性模型。

事务的隔离级别

  1. 读未提交(Read Uncommitted):可能发生脏读、不可重复读、幻读
  2. 读已提交(Read Committed):可能发生不可重复读、幻读
  3. 可重复读(Repeatable Read):可能发生幻读
  4. 串行化(Serializable):所有事务都是串行执行