此篇介绍几个跟分布式系统有关的理论。
FLP不可能原理
在网络可靠,存在节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。
CAP原理
一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三项中的两项。
- 一致性(Consistence)
对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。 - 可用性(Availability)
非故障节点在合理的时间内返回合理的响应。 - 分区容忍性(Partition Tolerance)
当出现网络分区后,系统能够继续履行职责。
在分布式环境下,必须选择 P。因为网络原因可能出现故障,所以分区是一个必然现象。因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP。
- CAP理论说分布式系统中这3点无法同时满足,但一定不要理解错误了,不要认为我们在架构设计时,这个系统要么 CP 要么 AP。
- 要记住:CAP 关注的粒度是数据,系统中会包含多种类型的数据,有的必须选择 CP,有的必须选择 AP。
BASE理论
BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。
- 基本可用(Basically Available)
分布式系统在出现故障时,允许损失部分可用性,保证核心可用。 - 软状态(Soft State)
允许系统存在中间状态,该中间状态不会影响系统整体可用性。 - 最终一致性(Eventual Consistency)
系统中所有数据副本经过一定时间后,最终能够达到一致状态。
BASE支持的是大型分布式系统,牺牲掉对一致性的约束(但实现最终一致性),来换取一定的可用性。
ACID原则
ACID原则指的是:
Atomicity(原子性)
Consistency(一致性)
Isolation(隔离性)
Durability(持久性)
用了四种特性的缩写。
ACID是传统数据库事务常用的设计理念,追求强一致性模型。
事务的隔离级别
- 读未提交(Read Uncommitted):可能发生脏读、不可重复读、幻读
- 读已提交(Read Committed):可能发生不可重复读、幻读
- 可重复读(Repeatable Read):可能发生幻读
- 串行化(Serializable):所有事务都是串行执行