CAP理论
CAP 理论描述了在分布式系统中涉及到共享数据的时候,以下三个特性只能满足两个:
- 一致性 consistency : 任何时刻,任何节点的数据都是符合预期的
- 可用性 availablity : 系统不间断提供服务的能力。 可靠性是平均无故障时间计算、可维护性是平均可修复时间计算; 可用性 = 平均无故障时间/(平均无故障时间 + 平均可修复时间)
- 分区容忍性 partition tolerance : 分布式环境因为网络造成失联分区后,依旧可以提供服务的能力
严格的数学证明已经完成了,这里就不再赘述了,现在看看对于取舍CAP的话,看看不同的取舍会造成什么后果:
- CA without P : 对于一个分布式系统不存在稳定的通信,分区现象会一直存在 , 所以 分区容忍性可以认为必须存在的,是一个天然的属性。 除非是放弃分布式,直接单体,那么就丧失了扩展性。
- CP without A: 放弃可用性 , 意味着发生网络分区的时候,节点无法快速恢复,信息同步时间无限期延长,可以理解为数据再次保持强一致的同步时间很久,长到无法预估。适合对于数据质量要求很高的场景。
- AP without C: 放弃了一致性 , 这是系统最经常使用的场景;我们退而求其次,选择最终一致性
这里其实也说到了 , 其实P 不是一个选项。
CAP只考虑了一个分布式系统下的数据一致性的模型 , 还有其他因素,如网络延迟、死亡节点的事情,都是没有考虑的。
CAP已经是一个很老的理论了。
BASE
CAP 是对系统完美状态的阐述
BASE 是 基本可用、软状态、最终一致性的简写
- 基本可用:允许丧失部分可用性,但是不等于系统不可用
- 响应时间上丧失:响应时间耗时增加
- 功能上丧失:引导到一个降级页面
- 弱状态:允许系统中的数据存在中间状态
- 最终一致性:系统所有的数据副本,经过一段时间的同步,可以达到一个一致的状态
- 因果一致性:A 更新的数据通知B , B 后面可以读取到A最新的数据,同时基于A的数据操作
- 读己之所写:A 更新数据之后,自己后面访问的就是自己最近更新的数据
- 会话一致性:客户端在一个会话界面,访问到的就是自己刚刚更新的最新值
- 单调读一致性:一个进程读取系统一个值之后,其历史的旧值是无法被读取到的
从CAP 到 BASE , 是一个分布式系统在对共享数据场景下的理论探讨。