Post

CAP定理

CAP定理

CAP定理

1
CAP定理又叫布鲁尔定理,在分布式体统中,不可能同时满足CAP,只能选择CP或AP

C(Consistency):一致性

  • 强一致性;在不同节点取到的数据是一样的,是最新的。
  • 当某个节点出现(网络)故障时,不能保证系统仍然可以正常工作(可用性)。

A(Availability):可用性

  • 非故障节点要求在合理的时间返回。不能阻塞请求。
  • 当某个节点出现(网络)故障时,不能保证到的数据是最新的(一致性)。

P(Partition tolerance):分区容错性

  • 一个集群中,当某个节点出现故障,这个集群仍然可以正常工作。

在分布式系统中应用

实际场景中,必然会遇到节点故障 / 网络故障情况,必须优先保证 P 。 只能在 CP 和 AP 之间做出选择。


CP:优先保证一致性

CP 系统基于多数派共识算法(Raft / Paxos)优先保证一致性,宁可拒绝服务,牺牲可用性,也绝不破坏一致性。

  • 当出现无法保证数据一致性的情况时,会拒绝/阻塞请求。
  • 特点是:强一致性,低可用性。可能会拒绝/阻塞请求。
  • 常见系统有ZooKeeper、etcd


AP:优先保证可用性

AP 系统原则是优先保证可用性,系统能用,但是读到的数据不一定是最新。然后最终一致性。

  • 每个非故障节点持续提供服务,可能读到旧数据。
  • 特点是:高可用性,最终一致性。可能读到旧数据
  • 常见系统有Elasticsearch、ClickHouse(默认模式)


1
2
3
4
5
6
7
8
9
10
11
12
13
为什么不能同时满足 CAP ?

假设设计一个系统来保存数据 x ,有 A 、B 两个节点。

情况 1:CP 设计
1 、客户端向 A 节点写入数据 x=1 。
2 、B 节点发生故障,无法与 A 通信。
3 、客户端写请求失败/阻塞,不满足【可用性】

情况 2:AP 设计
1 、客户端向 A 节点写入数据 x=1 。
2 、还没有同步到 B 节点,A 节点宕机。
3 、客户端向 B 节点读数据,读到旧数据 x=0 ,不满足【一致性】
This post is licensed under CC BY 4.0 by the author.