第五关 · 分布式与微服务
总时长:48 小时 | 目标:解决"系统从单体走向分布式,代价是什么?收益是什么?" 考试映射:综合知识 8-12 题 | 案例分析:⭐ 2024年5月真题(单体vs微服务对比) | 论文:《论分布式事务及其解决方案》⭐ 2024年11月论文真题
Step 1:本关资料(海量输入)
| 资料类型 | 具体资料 | 用途 | |---------|---------|------| | 教材 | 《架构师教程》第 10-11 章(分布式系统、微服务架构) | 掌握 CAP、BASE、分布式事务、微服务治理 | | 真题 | 2020-2025 综合知识·分布式部分(约 45 题) | 锁定高频考点(CAP、事务方案、微服务优缺点) | | 案例真题 | 2024年5月案例一(单体vs微服务对比)+ 2022年11月案例四(缓存一致性) | 背诵标准答题模板 | | 论文参考 | 2024年11月《论分布式事务及其解决方案》真题范文 | 学习论文中分布式事务方案的展开方式 |
精准阅读策略:
- CAP 定理 + BASE 理论必背(选择题高频)
- 4 种分布式事务方案必背(论文+案例都考)
- 单体 vs 微服务 5优4劣必背(2024年5月案例真题)
Step 2:本关心智模型
模型 1:CAP 三角——"分布式系统的铁三角,只能选两个"
- 核心思想:分布式系统中,一致性(C)、可用性(A)、分区容错性(P)三者不可兼得。由于 P 在分布式系统中是必然存在的(网络分区总会发生),实际只能在 C 和 A 之间做选择。
- 关键变量:业务对一致性的要求(金融=强一致)、对可用性的要求(社交=高可用)
- 应用场景:选择题(CP vs AP)、案例分析(注册中心选型、缓存选型)
- 局限性:CAP 是理论模型,实际系统经常在 C 和 A 之间做更精细的折中(如最终一致性)
- 考试映射:每年必考 1-2 题
| 选择 | 含义 | 典型场景 | 代表技术 | |------|------|---------|---------| | CP | 宁可不可用,也不能给错数据 | 金融交易、库存扣减 | ZooKeeper、etcd | | AP | 宁可数据不一致,也不能挂 | 社交、内容推荐 | Eureka、Cassandra |
考试陷阱:CAP 中的 P 在分布式系统中必须存在,实际只能在 C 和 A 之间选择。不要选"CA"(理论存在,实际不可能)。
模型 2:分布式事务权衡链——"一致性越强,性能越差"
- 核心思想:分布式事务的 4 种方案构成一条"权衡链"——从 2PC(强一致但性能差)到本地消息表(最终一致但灵活)。没有银弹,只有根据业务需求选择最合适的方案。
- 关键变量:一致性要求(强一致 vs 最终一致)、性能要求、业务侵入程度
- 应用场景:案例分析(方案选型)、论文(2024年11月论文真题)
- 局限性:4 种方案不是互斥的,实际项目可能混合使用
- 考试映射:案例分析 + 论文,都是高频
| 方案 | 原理 | 优点 | 缺点 | 适用场景 | |------|------|------|------|---------| | 2PC | 协调者→准备→提交/回滚 | 强一致性 | 性能差、阻塞、单点故障 | 金融(强一致) | | TCC | Try-Confirm-Cancel 补偿 | 灵活、可控 | 业务侵入大 | 支付、订单 | | 本地消息表+MQ | 本地事务+消息表+异步通知 | 最终一致、灵活 | 实现复杂 | 最常用,电商/IoT | | Saga | 长事务拆分为多个本地事务 | 无阻塞、适合长流程 | 补偿逻辑复杂 | 跨服务长流程 |
模型 3:微服务拆分边界——"按业务拆,不按技术拆"
- 核心思想:微服务拆分的理论基础是 DDD(领域驱动设计),核心概念是限界上下文(Bounded Context)。拆分的关键原则:按业务领域拆(不是按技术层拆),每个服务有独立数据存储,服务间通过 API 通信。
- 关键变量:服务粒度(太细=运维爆炸,太粗=失去意义)、数据归属(不能共享数据库)
- 应用场景:案例分析(微服务拆分方案)、论文(微服务架构实践)
- 局限性:DDD 的学习曲线陡峭,小团队可能用不上完整的 DDD 方法论
- 考试映射:案例分析 10-15 分
Step 3:本关分歧点
分歧点 1:单体 vs 微服务——"拆还是不拆?"
| 维度 | A 方:微服务(拆) | B 方:单体(不拆) | |------|------------------|-----------------| | 核心信念 | 拆了才能独立扩展、独立部署、快速迭代 | 拆了运维复杂度翻倍,得不偿失 | | 可扩展性 | ✅ 独立扩展单个服务 | ❌ 整体扩展 | | 故障隔离 | ✅ 单个服务故障不影响其他 | ❌ 一处故障全局崩溃 | | 运维复杂度 | ❌ 监控、日志、部署翻倍 | ✅ 简单直接 | | 数据一致性 | ❌ 分布式事务复杂 | ✅ 本地事务简单 | | 适用 | 业务复杂、团队大、需要快速迭代 | 业务简单、团队小、快速上线 |
考试倾向:2024年5月案例真题考了优缺点对比(5优4劣),答题时要展开说明不能只写关键词。
分歧点 2:2PC vs 本地消息表——"强一致"还是"最终一致"?
| 维度 | A 方:2PC(强一致) | B 方:本地消息表(最终一致) | |------|-------------------|--------------------------| | 核心信念 | 数据必须时刻一致 | 允许短暂不一致,最终会一致 | | 性能 | ❌ 同步阻塞,性能差 | ✅ 异步解耦,性能好 | | 实现复杂度 | 较简单(协议标准) | 复杂(消息丢失、重复消费) | | 业务侵入 | 低(协议层面) | 中(需要消息表) | | 适用 | 金融核心交易 | 电商、IoT 等大多数场景 |
考试倾向:论文题偏向本地消息表方案(因为实际项目最常用),需要能写出具体实现步骤和问题解决方法。
分歧点 3:实时同步 vs 异步准实时——"缓存一致性怎么办?"
| 维度 | A 方:实时同步 | B 方:异步准实时 | |------|-------------|---------------| | 核心 | 数据库更新时同时更新缓存 | 数据库更新时记录日志,逐步排队更新 | | 一致性 | ✅ 强一致 | ❌ 短暂不一致 | | 性能 | ❌ 同步并发时不可控 | ✅ 性能可控 | | 选型 | 数据一致性要求极高 | 高并发、性能要求高 |
考试倾向:2022年11月案例真题,题目说"1s内完成响应" → 选异步准实时。
Step 4:闯关任务(动手验证)
任务 1:微服务拆分方案设计(3h)
为你的 AIoT 项目设计微服务拆分方案:
- 识别核心业务领域(设备管理、数据处理、用户管理、告警推送)
- 为每个微服务定义职责、数据归属、对外接口
- 画出服务间的调用关系图
任务 2:分布式事务方案设计(3h)
为"用户下单购买扫地机器人配件"设计分布式事务方案:
- 涉及哪些服务(订单、库存、支付)
- 选择哪种事务方案(2PC/TCC/本地消息表/Saga)
- 写出完整的执行流程(正常流程 + 异常补偿)
任务 3:论文草稿——分布式事务(3h)
以 AIoT 项目为背景,写一篇 1500 字的论文草稿:
- 项目概述(300字)
- 分布式事务方案选型和实现(800字)
- 效果和反思(400字)
Step 4.5:💬 AI 教练对话
使用时机:分布式事务方案不确定时、微服务拆分有疑问时
Review Agent(案例题批改)
我正在做软考架构师案例分析题,题目是:[粘贴题目]
我的答案是:[粘贴你的答案]
请帮我批改:
1. 有没有漏掉关键得分点?
2. 答案结构是否清晰?(结论→理论→分析→建议)
3. 用语是否准确?
4. 预估得分(满分 25 分)
Theory Agent(知识深挖)
我在学习"分布式事务",已经了解了 2PC、TCC、本地消息表。
请用以下方式帮我深化理解:
1. 考试中这 4 种方案的对比表格
2. 本地消息表方案中,消息丢失、重复消费、事务超时分别怎么解决?
3. 给一个电商下单的完整分布式事务流程
Step 5:关 AI 自测
⚠️ 关闭 AI,独立完成后再对照答案
自测题 1(综合知识风格)
在分布式系统中,CAP 定理指出 C、A、P 三者不可兼得。以下哪个说法是正确的?
A. CA 组合在分布式系统中是常见的 B. 在分布式系统中,P 是必须存在的,实际在 C 和 A 之间选择 C. CP 系统无法保证数据一致性 D. AP 系统无法保证可用性
点击查看答案
答案:B
CAP 定理的核心:在分布式系统中,P(分区容错性)是必然存在的,因为网络分区总会发生。因此实际只能在 C(一致性)和 A(可用性)之间做选择。
- A 错:CA 在分布式系统中理论上不可能(P 是必然存在的)
- C 错:CP 系统就是选择一致性优先
- D 错:AP 系统就是选择可用性优先
自测题 2(案例分析风格)
请从可扩展性、故障隔离、运维复杂度、数据一致性四个方面对比单体架构和微服务架构。
点击查看答案
可扩展性:微服务优于单体。微服务可以按需独立扩展某个服务,而不需要扩展整个系统,提高了资源利用率。单体架构所有功能耦合在一起,只能整体扩展。
故障隔离:微服务优于单体。单个微服务故障不会导致整个系统崩溃,提高了容错能力。单体架构一处故障可能导致整个系统不可用。
运维复杂度:单体优于微服务。单体架构运维简单,只需管理一个应用。微服务需要管理多个服务实例,监控、日志、部署复杂度成倍增长。
数据一致性:单体优于微服务。单体架构使用本地事务,数据一致性强。微服务架构中数据分布在不同服务中,需要引入分布式事务方案,一致性管理困难。
自测题 3(综合知识风格)
以下关于分布式事务方案的说法,正确的是?
A. 2PC 协议中,协调者故障会导致参与者永久阻塞 B. TCC 方案对业务代码无侵入 C. 本地消息表方案保证强一致性 D. Saga 模式适合强一致性要求的金融场景
点击查看答案
答案:A
- A 对:2PC 的最大缺点就是协调者故障会导致参与者阻塞(这也是 3PC 要解决的问题)
- B 错:TCC 需要为每个操作编写 Try/Confirm/Cancel 三个方法,业务侵入大
- C 错:本地消息表是最终一致性,不是强一致
- D 错:Saga 是最终一致性,不适合强一致的金融场景(应该用 2PC)
自测题 4(论文素材检验)
请用 200 字描述本地消息表方案解决"消息丢失"和"重复消费"问题的方法。
点击查看答案
消息丢失:消息写入本地消息表和业务操作在同一个数据库事务中,保证消息不会丢失。后台线程定期扫描消息表,将未发送的消息重新发送到消息队列。消息队列(如 Kafka)开启持久化,即使消费者宕机消息也不会丢失。
重复消费:每条消息携带唯一的消息 ID,消费者处理消息前先检查 Redis 中是否已处理过该消息 ID。如果已处理则直接跳过(幂等性保证),未处理则正常处理并记录消息 ID。
Step 6:费曼输出 + 信心校准
一句话版本
分布式系统的核心矛盾是 CAP(一致性 vs 可用性),微服务的核心挑战是分布式事务(4 种方案从强一致到最终一致),拆分的核心原则是按业务领域拆。
三分钟版本
(对着镜子或录音讲 3 分钟,不看书)
分布式系统的铁三角是 CAP 定理:一致性、可用性、分区容错性三者不可兼得。由于分区容错是分布式系统的必然属性,实际只能在 C 和 A 之间选择。金融交易选 CP(宁可不可用也不能给错数据),社交推荐选 AP(宁可短暂不一致也不能挂)。
微服务架构的核心优势是独立扩展、故障隔离、快速交付,但代价是运维复杂度和分布式事务。微服务拆分要按业务领域拆(不是按技术层拆),每个服务有独立数据库。
分布式事务有 4 种方案:2PC(强一致但阻塞)、TCC(灵活但侵入大)、本地消息表(最终一致,最常用)、Saga(适合长流程)。实际项目中本地消息表最常用,但需要处理消息丢失和重复消费。
信心自评
| 知识点 | 信心 1-5 | 能否给别人讲清楚? | 需要复习? | |--------|---------|------------------|-----------| | CAP 定理 + CP vs AP | /5 | □ 能 □ 不能 | □ 需要 | | 单体 vs 微服务 5优4劣 | /5 | □ 能 □ 不能 | □ 需要 | | 4 种分布式事务方案 | /5 | □ 能 □ 不能 | □ 需要 | | 本地消息表实现细节 | /5 | □ 能 □ 不能 | □ 需要 | | 微服务治理(注册/负载/熔断) | /5 | □ 能 □ 不能 | □ 需要 | | DDD 限界上下文 | /5 | □ 能 □ 不能 | □ 需要 |
📌 常见误区
- "微服务一定比单体好" → 错!小项目用微服务是过度设计
- "CAP 可以三选二" → 实际 P 是必然存在的,只能在 C 和 A 之间选
- "2PC 是最好的事务方案" → 错!2PC 性能差且阻塞,实际很少用
- "微服务可以共享数据库" → 错!每个服务应该有独立的数据存储
🔧 工程映射
- Nacos AP 模式 = 服务注册(可用性优先,设备掉线重连是常态)
- Nacos CP 模式 = 配置中心(一致性优先,配置必须一致)
- Kafka + 本地消息表 = AIoT 设备数据异步处理(解耦+最终一致)
- Sentinel 熔断降级 = 微服务容错(防止雪崩)
✅ 通关标准
- [ ] 信心自评所有知识点 ≥ 4/5
- [ ] 三分钟版本能脱稿讲完
- [ ] 自测题正确率 ≥ 75%
- [ ] 能口述单体 vs 微服务 5 个优点 + 4 个缺点
- [ ] 能口述 4 种分布式事务方案的优缺点
- [ ] 完成 AIoT 项目微服务拆分方案
- [ ] 真题正确率 ≥ 80%
- [ ] 论文素材:完成《论分布式事务及其解决方案》初稿