Java 分布式架构(3)CAP原则

901 阅读3分钟

三、CAP原则

概念解释

CAP原则又称为CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance) 这三个要素只能同时实现两点,不能三者兼顾。

  1. C:一致性(Consistency),数据在多个副本节点中保持一致,可以理解为两个用户访问两个系统A和B,当A系统数据有变化时,及时同步给B系统,让两个用户看到的数据是一致的。
  2. A:可用性:(Availability),系统对外提供服务必须一直处于可用状态,在任何故障下,客户端都能在合理时间内获得服务端非错误的响应。
  3. P:分区容错性:(Partition tolerance),在分布式系统中遇到的任何网络分区故障,系统仍能对外提供服务。网络分区,可以这样理解,在分布式系统中,不同的节点分布在不同的子网络,有可能子网络中只有一个节点,在所有网络正常的情况下,由于某些原因导致这些子节点之间网络出现故障,造成整个节点环境被切分成了不同的独立区域,这就是网络分区。

为什么只能满足两个

CAP原则

用户1和用户2分别访问系统A和系统B,系统A和系统B通过网络进行同步数据。理想的状态是:用户1访问系统A对数据进行修改,将data1改成了data2,同时用户2访问系统B,拿到的是data2数据。

但是在实际中,由于分布式系统具有八大谬论:

  1. 网络相当可靠
  2. 延迟为零
  3. 传输带宽是无限的
  4. 网络相当安全
  5. 拓扑结构不会改变
  6. 必须要有一名管理员
  7. 传输成本为零
  8. 网络同质化

我们知道只要有网络调用,网络总是不可靠的。

  1. 当网络发生故障时,系统A和系统B没法进行数据同步,也就是我们不满足P,同时两个系统依然可以访问,n那么此时其实相当于是单机系统,就不是分布式系统了,所以既然我们是分布式系统,P必须满足。
  2. 当P满足时,如果用户1通过系统A对数据进行了修改data1改成了data2,也要让用户2通过系统B正确拿到data2,那么此时是满足C,就必须等待网络将系统A和系统B的数据同步好,并且在同步期间,任何人不能访问系统B(让系统不可用),否则数据就不是一致性的。此时满足的是CP。
  3. 当P满足时,如果用户1通过系统A对数据进行了修改将data1改成了data2,也要让系统B能继续提供服务,那么此时,只能接受系统A没有将data2同步给系统B(牺牲了一致性)。此时满足AP。