这篇文章的核心观点很简单:微服务不是银弹,很多公司用它只是“转移复杂性”。
下面从来源、演化、成本三个角度展开。
微服务从哪来
大型互联网公司在特定阶段为了“控制复杂性”做了服务化拆分。
这在电商等高复杂业务上是合理的,但并不适用于所有团队。
管理复杂性的三件事
软件工程的主线一直是:
- 抽象
- 封装
- 复用
从函数、类、框架,到组件化与服务化,都是为了解决协作与演进问题。
从单体到服务化
单体变大后,往往会拆出独立系统(采购、库存、履约)。
服务化的好处:
- 团队边界清晰
- 依赖关系明确
- 业务责任可追溯
服务化的挑战
- 数据边界分裂,容易引入业务级不一致
- 版本前向兼容复杂
- 技术栈异构,重复实现成本高
这些问题可控,但需要投入工程治理。
微服务的过度拆分
当“服务”退化为“无业务语义的功能代码”,系统复杂度反而急剧上升:
- 职责归属不清
- 依赖网状增长
- 版本兼容成本爆炸
而维护成本往往比开发成本更高。
真实案例:缓存不一致
价格服务缓存 + 商品服务缓存,规则变更后需要多点失效,否则数据不一致。
本质问题:服务之间拥有状态,缓存层级叠加后,耦合度上升。
结论
微服务没有消除复杂性,只是把复杂性“切碎再分发”。如果没有强工程能力和清晰边界,复杂度会更大。
适用建议
- 小团队先单体,架构清晰再拆
- 拆分标准是业务边界,而不是技术偏好
- 服务数量越多,治理成本越高