软件技术 · 知识点深化 · 分布式系统
微服务拆分:按业务域拆、避免分布式单体
微服务不是拆得越细越好。拆太细变分布式单体——网络调用多、部署复杂、一个链路调十几个服务。这一页讲透拆分原则、怎么拆、拆完怎么办。
① 怎么学(4 步走,约 65 分钟)
先建立直觉再抠细节,按这四步走最稳:
1看图建立直觉(10 分钟)
读②③:先在脑子里画出本课核心结构图。
2记完整体系(15 分钟)
读④:把对比表和公式看懂,不要急着背。
3跟例题走一遍(20 分钟)
精读⑤:看三个例题怎么用知识点解题。
4刷题纠错(剩余时间)
做⑦⑩,错题回⑥诊断。
本课小目标学完你要能:① 说微服务优缺点;② 按业务域拆分;③ 避免过度拆分;④ 处理拆分后数据一致性。
② 一图看懂:微服务拆分全景
读法:中心是本课主题,四条分支展开核心维度,下方是典型应用与高频易错点。
③ 本质直觉:微服务就是"小公司分工"
一个大公司(单体)什么都做:产品、研发、财务、HR 都在一起。人多了沟通慢、互相影响。微服务就是把公司拆成小部门,每个部门独立负责一块业务,自己管自己的数据库和部署。
好处:独立部署、技术栈自由、故障隔离、团队自治。
代价:网络调用变慢、分布式事务麻烦、排查链路复杂、运维成本高。
拆分原则:按业务域(DDD 限界上下文)拆,不是按技术层拆。一个服务对应一个业务能力,自己管数据。
先单体后微服务业务没起来别急着拆。单体先跑通,业务复杂了再拆。亚马逊两个-pizza团队原则。
④ 完整知识体系
单体 vs 微服务
| 维度 | 单体 | 微服务 |
| 部署 | 整体打包 | 独立部署 |
| 数据库 | 共享一个库 | 每服务独立库 |
| 故障 | 一挂全挂 | 隔离 |
| 复杂度 | 初期简单 | 分布式复杂度 |
| 适用 | 小团队初期 | 大团队复杂业务 |
拆分边界DDD 限界上下文,一个业务能力一个服务
反模式一个请求调 N 个微服务 = 分布式单体
拆分步骤
1. 先画业务域关系;2. 选一个边界清晰的模块拆;3. 数据库独立;4. 用 API 网关统一入口;5. 链路追踪兜底。
⑤ 应用场景与例题
例1 电商系统怎么拆?
订单、库存、用户、商品、支付分别成服务。每个独立库。订单通过 RPC 调库存扣减。
例2 一个请求要调 6 个服务
是不是拆太细了?
是。6 次网络调用延迟累加,任何一个挂了链路失败。考虑合并相邻服务。
例3 拆分后跨服务事务怎么办?
用本地消息表/最终一致,别用分布式强事务。
做题心法按业务能力拆,不按技术层拆;拆完接受最终一致。
⑥ 高频错误诊断(4 条)
错误1:按技术层拆(controller/service/dao 各一个服务)那不是微服务是分布式单体。
错误2:所有服务共享一个数据库数据耦合,失去独立部署意义。
错误3:上来就微服务小团队小业务单体更快。
错误4:一个请求链路调太多服务延迟高,应聚合或合并服务。
⑦ 考点真题演练(5 题)
考点分布
| 考法 | 出题形式 | 应对 |
| 原则 | 问按什么拆 | 业务域 |
| 数据 | 问数据库怎么管 | 每服务独立库 |
| 反模式 | 问分布式单体 | 调用链过长 |
| 时机 | 问什么时候拆 | 业务复杂后 |
真题basic1. 微服务应该按什么拆分?
真题mid2. 微服务数据库应该?
真题mid3. 一个请求要调 6 个微服务,说明?
真题hard4. 微服务拆分后跨服务数据一致性?
真题hard5. 什么时候应该先做单体?
⑧ 必背知识点卡
好处:独立部署、故障隔离、团队自治
代价:网络、分布式事务、运维复杂
拆分:按业务域 DDD 不按技术层
数据:每服务独立库
反模式:分布式单体,调用链过长
时机:先单体跑通,复杂了再拆
一致:最终一致,消息表事件驱动
⑨ 动手输出:评估要不要微服务
场景:CTO 说我们要上微服务。
① 看业务:当前多少人?多业务域吗?
② 看痛点:单体部署慢、互相影响吗?
③ 别盲目:10 人团队微服务运维成本更高。
④ 渐进:先拆最独立的模块(如通知)。
⑤ 配套:链路追踪、配置中心、网关要跟上。
口述思路微服务是解决组织和业务复杂度的手段,不是目的。
⑩ 分层练习(基础 + 中档 + 拔高)
▍基础 6 题
基础5分布式单体是什么?
服务拆太细调用链过长。
▍中档 5 题
中档1为什么不能共享数据库?
数据耦合,无法独立演进。
中档2两个-pizza团队原则?
团队小到两个披萨喂饱,自治。
中档3拆分后怎么保证接口兼容?
API 网关+版本化。
中档4为什么按技术层拆是反模式?
一个业务改动要动多个服务。
中档5怎么从单体拆出第一个服务?
选边界最清晰的模块。
▍拔高 5 题
拔高1服务间怎么通信?
同步 RPC 或异步消息。
拔高2链路追踪解决什么?
跨服务排查问题,TraceId。
拔高3为什么微服务要 API 网关?
统一入口、鉴权、限流。
拔高4数据一致性怎么做?
本地消息表+事件驱动最终一致。
拔高5怎么避免循环依赖?
业务上重新梳理边界,引入事件。
⑪ 记忆口诀 + 7 天复习计划
三句口诀① 按业务域拆,不按技术层。② 每服务独立库,最终一致。③ 别上来就拆,复杂了再拆。
| 天 | 任务 | 自检 |
| 第 1 天 | 读②③,画业务域拆分图 | 边界说清 |
| 第 2 天 | 背单体微服务对比 + 基础 6 题 | 取舍记住 |
| 第 3 天 | 做中档 5 题,评估一个系统怎么拆 | 边界合理 |
| 第 4 天 | 做拔高 5 题,设计链路追踪 | 步骤对 |
| 第 5 天 | 做⑦真题 5 题 | 限时每题 2 分钟 |
| 第 6-7 天 | 合书口述为什么不能按技术层拆 | 不看资料 |
← 返回软件技术总览