什么是 CAP 理论?
2023年2月5日
什么是 CAP 理论?
CAP 理论是指在一个分散式系统中,当涉及读写操作时,只能保证一制性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,剩下的一个必须被牺牲。
- 一制性 Consistency:对某个 Client 来说,读操作保证能够返回最新写操作的结果。
- 可用性 Availability:非故障节点能在合理的时间内返回合理地响应(不是错误和超时的响应)。
- 分区容错性 Partition Tolerance:当出现分区时(封包遗失、连接中断、塞车等),系统能够继续履行职责(返回 Reasonable Response)。
CAP 的应用
在分散式系统中,必然会需要选择 P
,因为网路本身不可能做到 100% 可靠,因此可能的系统可能是 AP
或者是 CP
。
- CP:当两节点 Node 1 将
A
更新为1
,当 Node 1 欲将A
复制到 Node 2 时发生错误,则 Client 重新在 Node 2 读取A
值时,因为为了确保 Consistency ,所以会得到Error
。
- AP:当两节点 Node 1 将
A
更新为1
,当 Node 1 欲将A
复制到 Node 2 时发生错误,则 Client 重新在 Node 2 读取A
值时,因为为了确保 Availability,所以会得到旧的值0
。
CAP 的细节
CAP 的关注点是数据 每当讨论 CAP 时,通常都是以系统、节点的方式来讨论,以至于会误以为系统架构要马选择
AP
,要马选择CP
,但其实是要以数据的角度来看,因此每一个系统有不同的数据就可以选择不同策略,某些数据使用AP
,某些数据则使用CP
。CAP 是忽略网路延迟的 在资料的复制过程中,一定会有网路延迟,短则几毫秒,长则几时毫秒,因此在复制的过程中会有短暂的不一致问题,因此在某些情况下,是做不到
CP
的,例如:用户余额、商品库存等,这种业务上需要做到一致性的,最终只能做到CA
,也就代表只能做到单点写入,其他节点做备份,无法做到分散式的多点写入。正常状况不存在
CP
和AP
时,则可以满足CA
在分散式系统中,通常只能选择CP
和AP
,但也需要同时考虑当P
没有发生时,要如何保证CA
。例如:用户的数据可以用 Message Queue 来实现CA
。放弃并不等于什么都不做
系统不会一直都处于错误的状态,但错误还是有可能发生,因此需要为错误发生后要怎么恢复来做准备,举例来说,用户管理系统一开始选择了
CP
,当分区发生后,节点一可以注册新帐户,节点二无法注册新帐户(不满足A
),当分区发生故障时(P
失效时),节点一会先将纪录存在 Log 里,分区恢复后再将资料同步到节点二。所以对于节点一而言,目前是CA
状态。