← 返回软件技术总览 软件技术 · 知识点深化 · 微服务拆分:按业务域拆、避免分布式单体
软件技术 · 知识点深化 · 分布式系统

微服务拆分:按业务域拆、避免分布式单体

微服务不是拆得越细越好。拆太细变分布式单体——网络调用多、部署复杂、一个链路调十几个服务。这一页讲透拆分原则、怎么拆、拆完怎么办。

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

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

1看图建立直觉(10 分钟)
读②③:先在脑子里画出本课核心结构图。
2记完整体系(15 分钟)
读④:把对比表和公式看懂,不要急着背。
3跟例题走一遍(20 分钟)
精读⑤:看三个例题怎么用知识点解题。
4刷题纠错(剩余时间)
做⑦⑩,错题回⑥诊断。
本课小目标学完你要能:① 说微服务优缺点;② 按业务域拆分;③ 避免过度拆分;④ 处理拆分后数据一致性。

② 一图看懂:微服务拆分全景

微服务 拆分原则 按业务域/DDD 独立部署 小团队自治 数据隔离 每服务自己的库 反模式 分布式单体 应用:电商/金融平台 中大型系统 易错:拆太细调用链过长 一个请求调N个服务
读法:中心是本课主题,四条分支展开核心维度,下方是典型应用与高频易错点。

③ 本质直觉:微服务就是"小公司分工"

一个大公司(单体)什么都做:产品、研发、财务、HR 都在一起。人多了沟通慢、互相影响。微服务就是把公司拆成小部门,每个部门独立负责一块业务,自己管自己的数据库和部署。

好处:独立部署、技术栈自由、故障隔离、团队自治。

代价:网络调用变慢、分布式事务麻烦、排查链路复杂、运维成本高。

拆分原则:按业务域(DDD 限界上下文)拆,不是按技术层拆。一个服务对应一个业务能力,自己管数据。

订单独立库 库存独立库 用户独立库 每个服务自己的库,通过 API/RPC 通信
先单体后微服务业务没起来别急着拆。单体先跑通,业务复杂了再拆。亚马逊两个-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 题

基础1微服务按什么拆?
业务域。
基础2数据库怎么管?
每服务独立。
基础3微服务好处?
独立部署故障隔离。
基础4微服务代价?
分布式复杂度。
基础5分布式单体是什么?
服务拆太细调用链过长。
基础6什么时候先单体?
业务初期小团队。

▍中档 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 天合书口述为什么不能按技术层拆不看资料

← 返回软件技术总览