是分布式里面比较重要的理论
CAP
布鲁尔定理(Brewer's theorem)
- Consistency(一致性):所有节点访问同一份最新的数据副本
- Availability(可用性):非故障节点在合理时间内返回合理响应
- Partition Tolerance(分区容错性):分布式系统出现网络分区的时候,仍然能对外提供服务
网络分区
因为某些故障,使得某些节点之间不再连通,网络就分成了几块,便是网络分区
不是3选2
当发生网络分区的时候,如果要继续服务,那么强一致性和可用性只能2选1
所以分布式系统理论上只能选择CP架构或者AP架构
系统没有发生分区的话,可以同时保证C和A
BASE
牺牲数据的一致性来满足系统的高可用性,是对CAP中AP方案的一个补充
- Basically Available(基本可用)
- Soft-state(软状态)
- Eventually Consistent(最终一致性)
允许损失部分可用性
- 响应时间上的损失
- 系统功能上的损失(部分非核心功能不可用)
软状态
允许系统中的数据存在中间状态,允许系统在不同节点间的数据副本间进行数据同步的过程有延时
最终一致性
系统中所有的数据副本,在经过一段时间的同步后,最终能达到一个一致的状态
实现方式:
- 读时修复:读取数据时,检测数据的不一致,进行修复
- 写时修复:写入数据时,检测数据的不一致,进行修复
- 异步修复:定时对账检测副本数据的一致性,并修复
推荐写时修复,对性能消耗较低
分布式一致性
- 强一致性:系统写入什么,就读出来什么
- 弱一致性:会尽量保证某个时刻达到数据一致
- 最终一致性:保证在一定时间内达到数据一致