软件技术 · 知识点深化 · 分布式系统
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 就是"三人群聊断网"
三个人在群里聊天,突然 A 和 B 网络断了,分成两组。
一致性 C:必须保证两组看到的数据完全一样。那怎么办?断网期间 A 组不接受写入,等网络恢复同步后再服务。问题是断网期间 A 组不可用。
可用性 A:断网期间两组都继续服务,各自接受写入。问题是网络恢复前,两组数据可能不一致。
分区 P:网络一定会断,这是现实,必须容忍。
所以实际选择是:断网时你是宁可暂停服务等同步(CP),还是两边都服务接受暂时不一致(AP)?ZooKeeper 是 CP,Eureka/Nacos 是 AP。
BASE 理论Basically Available(基本可用)+ Soft State(软状态)+ Eventually Consistent(最终一致)。是 AP 方向的延伸,互联网大多走这条路。
④ 完整知识体系
CP vs AP 系统
| 维度 | CP 系统 | AP 系统 |
| 典型产品 | ZooKeeper、ETCD | Eureka、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 三个字母?
一致性、可用性、分区容忍。
基础3CP 系统例子?
ZooKeeper、ETCD。
基础4AP 系统例子?
Eureka、Nacos 默认。
基础5Raft 写成功要几台确认?
多数派(过半)。
▍中档 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 | 不看资料 |
← 返回软件技术总览