CAP

CAP原理介绍

  • C:Consistency
    • 一致性,即访问所有节点得到的数据都应该是一致的,这里的一致性是指强一致性(数据更新完,访问任何节点看到的数据完全一致),这里和弱一致性和最终一致性有区别
  • A:Availability
    • 可用性,所有的节点都保持高可用性,也就是说,任务没有发生故障的服务必须在有限的时间内返回合理的结果集
  • P:Partiton tolerance
    • 分区容忍性,这里的分区指网络意义上的分区,如果出现节点之间无法通信的情况,要保证系统可以正常服务

CAP理论,一个数据分布式系统不可能同时满足C,A,P三个条件,大多数开源的分布式系统都会实现P,也就是分区容忍性,之后在C和A之间做抉择。

CAP原理实际上是一个对分布式数据存储系统的一个定论,我们对于CAP的讨论的实际场景,更多的是针对那些有数据存储,数据复制场景,也就是所谓的NoSQL数据库

CAP原理简单实例

  • 现在假设有两个节点,a1,a2

  • 有一个数据number = 1,之后向a1提交更新,将数据number 设置为2

  • 然后,a1把数据更新推送给a2,让a2也更新number

保证C和P

  • 保证数据一致性,a1将数据复制给a2,那么a1和a2需要进行通信,我们保证了P,也就是分区容忍性,这时a2不一定能及时收到a1的数据复制消息,当有请求向a2访问number数据时,为了保证数据的强一致性,a2只能阻塞,等待数据同步完成后返回,这时,无法保证高可用(A)

  • 所以,保证C和P时,无法保证A

    保证A和P

  • 为了保证高可用,a1和a2都必须在有限时间内返回,由于网络的不可靠,可能a2还没有收到a1发来的数据更新消息,就返回给客户端数据,这时候返回给客户端的可能是旧的数据,和a1不一致,因此违反了C,无法保证一致性(C)

  • 所以,保证A和P时,无法保证C

    保证A和C

  • 如果要保证一致性和高可用,那么网络状况必须良好,a1发送给a2的数据更新,a2必须马上能收到,但在实际情况下,网络通常是不可靠的,可能存在丢包等现象,所以如果要满足即时更新,必须将a1和a2放到一个区内才可以,这样就放弃了P,整个系统也不再是一个分布式系统了

  • 所以,保证A和C,无法保证P


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

博客系统开发过程 Previous
nginx反向代理 Next