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.