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 , 是一个分布式系统在对共享数据场景下的理论探讨。