分布式 CAP

119 阅读2分钟

1. 定义

CAP 是分布式里面的基础,只能取其二,不能得其三。

1.1 C -- Consistency

C 是指的强一致性,表示分布式集群内所有的节点数据保持一致。

1.2 A -- Availability

A 是指的可用性,表示在有限的时间内返回有效的响应。
注意两点:1. 有限时间内 2. 有效的响应

1.3 P -- Partition-tolerance

P 是指分区容错性,表示在集群内,即使发生故障,故障包括但不限于:网络故障、丢包、节点宕机等,导致集群发生分区,在分区后依然能对外提供服务。

2. A 和 P 有什么区别?

2.1 有两点不同:

2.1.1 架构层级不同:

P 是分布式的基石,是整体的基础,属于架构底层,偏硬件层,偏网络层。 A 是分布式的应用层,是上层服务,表示上层服务的质量。

2.1.1 关注维度不同:

P 关注的是否在各种情况下提供服务,至于服务质量并不在它的考虑范围。
A 关注的是服务质量,即: 1. 有限时间 2. 返回正确的有效响应。

3. CAP 为何只能得其二,不能兼得其三?

3.1 P 属于必选项

P是分布式的基础,属于必选项,没有P 就没有分布式。

3.2 那么为何 A 和 C 只能二者得其一?

假设发生网络故障导致集群发生了分区,1、2、3 三个节点分区为 1 和 2、3 两个分区, 这个时候用户发来请求,要求1号节点修改数据:

  1. 如果1号节点修改数据,那么必然导致 1号节点与2、3号节点不一致,违反了C(强一致性)的要求
  2. 如果1号节点不修改数据,那么必然导致分布式集群服务不可用,那么就违反了A(可用性)的要求
  3. 综上所述,C 和 A 不可兼得,只能二者取其一。