什么是 CAP 理论?

2023年2月5日

💎 加入 E+ 成长计划 如果你想要透过更深入、更具系统性的内容来成长,或是想要有社群一同交流,欢迎

什么是 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
CAP Theorem: CP
CAP Theorem: CP
  • AP:当两节点 Node 1 将A 更新为1 ,当 Node 1 欲将A 复制到 Node 2 时发生错误,则 Client 重新在 Node 2 读取A 值时,因为为了确保 Availability,所以会得到旧的值0
CAP Theorem: AP
CAP Theorem: AP

CAP 的细节

  1. CAP 的关注点是数据 每当讨论 CAP 时,通常都是以系统、节点的方式来讨论,以至于会误以为系统架构要马选择AP ,要马选择CP ,但其实是要以数据的角度来看,因此每一个系统有不同的数据就可以选择不同策略,某些数据使用AP ,某些数据则使用CP

  2. CAP 是忽略网路延迟的 在资料的复制过程中,一定会有网路延迟,短则几毫秒,长则几时毫秒,因此在复制的过程中会有短暂的不一致问题,因此在某些情况下,是做不到CP 的,例如:用户余额、商品库存等,这种业务上需要做到一致性的,最终只能做到CA ,也就代表只能做到单点写入,其他节点做备份,无法做到分散式的多点写入。

  3. 正常状况不存在 CPAP 时,则可以满足 CA 在分散式系统中,通常只能选择 CPAP ,但也需要同时考虑当 P 没有发生时,要如何保证 CA 。例如:用户的数据可以用 Message Queue 来实现 CA

  4. 放弃并不等于什么都不做

    系统不会一直都处于错误的状态,但错误还是有可能发生,因此需要为错误发生后要怎么恢复来做准备,举例来说,用户管理系统一开始选择了CP ,当分区发生后,节点一可以注册新帐户,节点二无法注册新帐户(不满足A ),当分区发生故障时( P 失效时),节点一会先将纪录存在 Log 里,分区恢复后再将资料同步到节点二。所以对于节点一而言,目前是 CA 状态。

🧵 如果你想收到最即时的内容更新,可以在 FacebookInstagram 上追踪我们