09 - 总结与避坑
走到这里,微服务的思维和架构你应该都建立起来了。这一章做个收尾:一张图回顾全貌、几条核心心法、一份避坑清单,最后指个方向。
一张图回顾全貌
微服务,从头到尾的逻辑线
[起点] 单体大了,五大痛点(改动牵连、一处崩全崩、扩容不精准、协作难、技术锁死)
│
▼ 解药:按业务拆开
[思想] 微服务 = 按业务拆成一组能独立部署、独立数据库、网络协作的小服务
│
▼ 拆开后带来两个核心难题
[难题1] 服务怎么通信? → 同步(打电话/要等) + 异步(发微信/不等)
[难题2] 数据怎么办? → 每服务一库 + 最终一致性(消息+补偿)
│
▼ 散着不行,要组织成系统
[架构] 网关(大门) + 服务发现(通讯录) + 负载均衡(分流) + 配置中心 + 追踪监控
│
▼ 怎么跑起来
[落地] Docker 打包每个服务 + K8s 统一编排(自愈/伸缩/滚动更新/发现/均衡)
│
▼
[验收] 能在脑子里顺下来"一次下单的旅程"(第08章)
几条核心心法
- 微服务的灵魂是”独立部署”。做不到独立部署,拆得再细也只是花架子。
- 拆的是业务,不是技术。按”用户/订单/支付”拆,不是按”接口层/逻辑层/数据层”拆。
- 微服务没消灭复杂度,只是搬了个家——从代码复杂度搬到了分布式复杂度。
- 要即时结果用同步,能等就用异步。这是服务通信最实用的判断。
- 数据各管各的,别共享库;跨服务一致性追求”最终一致”,不追求”时时一致”。
- 微服务是思想,Docker/K8s 是支撑。三者是一条完整的落地链路。
避坑清单
坑 1:过早微服务化(最常见)
团队就三五个人、业务还在天天变,就急着拆微服务。结果:一个人维护七八个服务,本地都跑不起来,效率不升反降。
正解:先用单体。等真被单体的痛点折磨到了,再拆。
坑 2:拆得太细
把每个小功能都拆成一个服务,搞出几十上百个微服务(“纳米服务”)。服务间调用绕成一团麻,排查问题想哭。
正解:一个服务对应一块”说得清的业务”就好,宁可粗一点,别一上来就切碎。
坑 3:拆了服务,却共享一个数据库
服务是拆了,数据库还是同一个大库,谁都能直连。等于换了个姿势的单体,又焊死了。
正解:每服务一库,要数据走接口(第 05 章)。
坑 4:忽视运维成本
只想着”拆了多灵活”,没算过账:监控、日志、部署、追踪,服务越多这些负担越重。没这些配套,微服务一出问题就是灾难。
正解:上微服务前,先备好容器编排、监控、链路追踪这套”地基”(第 06、07 章)。
坑 5:跨服务硬套单体的强一致
还想着”一个大事务锁住所有服务的数据”。分布式里做不到,硬做会把系统拖垮。
正解:接受最终一致性,用消息 + 补偿(第 05 章)。
下一步往哪走(点到为止)
这份教程建立的是认知和判断力。如果将来真要深入,可以往这些方向:
- DDD(领域驱动设计):解决”到底该按什么边界拆服务”的方法论
- Service Mesh(服务网格,如 Istio):把服务通信、限流、追踪等能力下沉到基础设施,业务代码更干净
- 分布式事务 / Saga 模式:把第 05 章的最终一致性做深
- 可观测性(Observability):日志、指标、链路追踪三件套的系统化实践
但记住教程开头那句话:先用单体,被真正的痛点逼到了,再上微服务也不迟。 会判断”该不该拆”,比会拆更重要。
全教程小结
- 微服务是一种应对规模变大的架构思想:按业务拆、独立部署、独立数据、网络协作。
- 它治好了单体的痛,也带来了分布式的新麻烦,不是银弹。
- 通信分同步/异步,数据每服务一库+最终一致,系统靠网关/发现/均衡/配置/监控撑起来,最终用 Docker+K8s 跑起来。
- 最重要的能力:判断自己的项目现阶段到底该不该用微服务。
上一章 ← 08 - 完整例子:一次”下单”的旅程 | 回到 README 目录
🎉 恭喜你读完了整份微服务入门教程!