← 返回软件技术总览 软件技术 · 知识点深化 · CAP 与一致性协议:强一致、最终一致、Raft 基础
软件技术 · 知识点深化 · 分布式系统

CAP 与一致性协议:强一致、最终一致、Raft 基础

分布式系统三选一是 CAP:一致性(C)、可用性(A)、分区容忍(P),网络一定会分区,所以实际在 C 和 A 之间取舍。这一页讲透 CAP、BASE、以及 Raft/Paxos 的核心思想,不再被"CP 还是 AP"问倒。

① 怎么学(4 步走,约 70 分钟)

先建立直觉再抠细节,按这四步走最稳:

1看图建立直觉(10 分钟)
读②③:先在脑子里画出本课核心结构图。
2记完整体系(15 分钟)
读④:把对比表和公式看懂,不要急着背。
3跟例题走一遍(20 分钟)
精读⑤:看三个例题怎么用知识点解题。
4刷题纠错(剩余时间)
做⑦⑩,错题回⑥诊断。
本课小目标学完你要能:① 解释 CAP 三字母;② 说明为什么 P 必选;③ 对比 CP/AP 系统;④ 说出 BASE 思想。

② 一图看懂:CAP 与一致性选择

CAP 一致性 C 所有节点同时看到同数据 可用性 A 每个请求都有响应 分区 P 网络分区仍能运行 取舍 P 必选,C/A 二选一 应用:注册中心/数据库 Nacos/ETCD 易错:误以为三者能同时满足 网络分区必然发生
读法:中心是本课主题,四条分支展开核心维度,下方是典型应用与高频易错点。

③ 本质直觉:CAP 就是"三人群聊断网"

三个人在群里聊天,突然 A 和 B 网络断了,分成两组。

一致性 C:必须保证两组看到的数据完全一样。那怎么办?断网期间 A 组不接受写入,等网络恢复同步后再服务。问题是断网期间 A 组不可用。

可用性 A:断网期间两组都继续服务,各自接受写入。问题是网络恢复前,两组数据可能不一致。

分区 P:网络一定会断,这是现实,必须容忍。

所以实际选择是:断网时你是宁可暂停服务等同步(CP),还是两边都服务接受暂时不一致(AP)?ZooKeeper 是 CP,Eureka/Nacos 是 AP。

C A P P 必选,C/A 二选一 CP: ZK/ETCD AP: Eureka/Nacos
BASE 理论Basically Available(基本可用)+ Soft State(软状态)+ Eventually Consistent(最终一致)。是 AP 方向的延伸,互联网大多走这条路。

④ 完整知识体系

CP vs AP 系统

维度CP 系统AP 系统
典型产品ZooKeeper、ETCDEureka、Nacos、Cassandra
分区时拒绝写入继续服务
一致性强一致最终一致
适用注册中心元数据高可用业务
读法主节点读任意节点读
CAP 不可能三角网络分区 P 必然发生,只能在 C 和 A 间取舍
Raft 核心选举主节点 + 日志复制,多数派写入成功即提交

Raft 一句话

节点分 Leader 和 Follower。写请求都走 Leader,Leader 复制日志到 Follower,多数派确认后提交。Leader 挂了重新选举。ETCD 用 Raft。

一致性级别

强一致(线性一致)、最终一致、读己之写、会话一致。业务按需求选,不是越强越好。

⑤ 应用场景与例题

例1 注册中心选 CP 还是 AP?
Nacos 选 AP 为什么?
注册中心要求高可用,节点挂了不能影响服务发现。Nacos 默认 AP(临时实例),即使分区也能返回服务列表。CP 模式(持久实例)用于配置。
例2 ZooKeeper 为什么是 CP?
分区时会怎样?
ZK 选举 Leader 期间不可用,保证数据一致。选主期间集群暂停服务,这就是 CP——宁可不可用也要一致。
例3 银行账户选 CP 还是 AP?
资金场景必须 CP。钱不能两边不一致,宁可暂时不可用也要一致。用数据库主从强同步或 Raft。
做题心法选 CP 还是 AP 看业务:钱要一致,业务要可用。

⑥ 高频错误诊断(4 条)

错误1:以为能同时满足 CAP网络分区必然发生,P 必选,只能 C/A 二选一。
错误2:注册中心用 CP分区时注册中心不可用,整个服务发现瘫痪。应该 AP。
错误3:资金场景用 AP钱可能不一致,必须强一致。
错误4:以为最终一致就是不一致是短暂不一致,最终会同步,不是永远不一致。

⑦ 考点真题演练(5 题)

考点分布

考法出题形式应对
CAP问 P 为什么必选网络一定会分区
选型问注册中心选哪个AP
Raft问多数派写成功要过半节点确认
BASE问含义基本可用+软状态+最终一致

真题basic1. CAP 中哪个在分布式系统中必然要满足?

真题mid2. 注册中心(服务发现)通常选?

真题mid3. Raft 协议中日志提交需要?

真题hard4. BASE 理论中的 E 指?

真题hard5. 以下哪个是 CP 系统?

⑧ 必背知识点卡

CAP:C 一致 A 可用 P 分区容忍
P 必选:网络一定分区 C/A 二选一
CP:宁可不可用也要一致 ZK/ETCD/资金
AP:分区也服务,最终一致 注册中心/互联网
BASE:基本可用+软状态+最终一致
Raft:选主+日志复制+多数派 ETCD
选型:钱 CP,业务 AP

⑨ 动手输出:向团队解释为什么订单服务用 AP

场景:架构评审时有人问"我们为什么不做强一致?"
① 现实:网络一定会分区,P 必选。
② 业务:订单查询允许几秒延迟,不要求强一致。
③ 选择:走 AP+最终一致,分区时仍能服务。
④ 代价:接受短暂不一致,用重试和对账兜底。
⑤ 例外:资金和库存扣减用强一致或本地消息表。
口述思路一致性是有代价的,业务能容忍最终一致就别上强一致。

⑩ 分层练习(基础 + 中档 + 拔高)

▍基础 6 题

基础1CAP 三个字母?
一致性、可用性、分区容忍。
基础2P 为什么必选?
网络分区必然发生。
基础3CP 系统例子?
ZooKeeper、ETCD。
基础4AP 系统例子?
Eureka、Nacos 默认。
基础5Raft 写成功要几台确认?
多数派(过半)。
基础6BASE 的 E 是什么?
最终一致。

▍中档 5 题

中档1为什么不能三者全选?
网络分区发生时,要一致就得暂停服务(丢 A),要可用就得允许不一致(丢 C)。
中档2Nacos 默认 AP 还是 CP?
默认 AP(临时实例)。
中档3资金场景为什么 CP?
钱不能不一致,宁可不可用。
中档4最终一致是什么意思?
短时间不一致,最终会同步。
中档5Raft Leader 挂了怎么办?
Follower 重新选举新 Leader。

▍拔高 5 题

拔高1ZooKeeper 选举期间为什么不可用?
CP 特性,选主时暂停服务保证一致。
拔高2多数派为什么是过半?
防止脑裂,两个分区各自选主时只有过半分区能服务。
拔高3Nacos 什么时候用 CP?
持久化实例配置,需要强一致。
拔高4Paxos 和 Raft 区别?
Raft 是 Paxos 的简化工程实现,更易理解。
拔高5线性一致是什么?
所有读看到最近写,像单节点一样。

⑪ 记忆口诀 + 7 天复习计划

三句口诀① 网络必分区,P 没得选。② 钱要一致选 CP,业务可用选 AP。③ Raft 多数派,BASE 终一致。
天任务自检
第 1 天读②③,画 CAP 三角形三字母说清
第 2 天背 CP/AP 对比 + 基础 6 题能举例
第 3 天做中档 5 题,讲 Raft 流程选举说清
第 4 天做拔高 5 题,解释脑裂多数派为什么
第 5 天做⑦真题 5 题限时每题 2 分钟
第 6-7 天合书口述 BASE不看资料

← 返回软件技术总览