浅谈CAP理论

什么是CAP

  • CAP 是分布式系统的三要素 ,分别是

    • 一致性 Consistency
    • 可用性 Availability
    • 分区容错性 Partition tolerance

A
B
C
  • 一个简单的分布式系统架构如上图,serve端 一共由B,C组成,client端为 A
  • 下面我们来简单谈一下什么是CAP?
  • 一致性 Consistency
    • 可以理解为如果我写了一个值就一定可以读到这个值,不管是从分布式的那台机子上读
    • 举例我 A 写入 B id=1 name=tony ,那 A 读 C 就可以读出 id=1 的 name=tony
A B C 写入 id=1 name=tony 同步数据 同步成功 已写入成功 读取 id=1 name=? name=tony A B C

  • 可用性 Availability
    • 可以理解成分布式服务的主机,收到命令就一定要给回复
A B C ping pong ping pong A B C
  • 分区容错性 Partition tolerance
    • 分布式的子系统可能在不同的网络中,我们必须考虑,分布式系统间网络不通的情况,比如B和C之间网络连接断开
B C ping B C

为什么分布式 CAP 理论,只能满足其中两个

  • 因为既然是分布式,那么 P 分区容错性就一定要保障
    • 保障了分区容错性就说明我们B,C间的网络可能是不通的
    • 那么这时就可能出现两种情况了

情况一、A向B更新数据,B不能同步给C,于是A求情C的时候C直接返回未同步的结果给A,很明显这没有符合CAP里的C一致性

A B C 更新 id=1 name=tony 为 id=1 name= jack 网络中断,同步失败 更新成功 读取 id=1 name=? name=tony A B C

情况二、A向B更新数据,B不能同步给C,于是A求情C的时候,C一直等待B的同步,直到B同步才返回结果给A,但由于B、C间网络中断,所以C一直阻塞,不能返回结果给A,很明显这没有符合CAP里的A可用性

A B C 更新 id=1 name=tony 为 id=1 name= jack 网络中断,同步失败 更新成功 读取 id=1 name=? 未同步B的信息, 不能返回结果,只 有同步了才能返回 A B C

结论

  • 在分布式系统中 CAP 不能兼得,通常我们只能保证 CP 和 AP(CA模型不是分布式而是传统数据库模型)
  • 在业务的技术选型中,要着重考虑我们的服务是优先需要保证一致性还是可用性
  • 只有明白了我们服务自身的特点,我们才能在技术选型的时候不选错技术方案

你可能感兴趣的:(分布式)