为什么说不考虑实际场景 ,盲目上微服务反而是负担
“所有都上微服务”之所以常常适得其反,是因为微服务本质上是一种用“运维复杂度”换“团队自治和独立扩展性”的交易。如果公司规模不够、业务边界没理清、基础设施跟不上,这笔交易就是亏本的。
什么时候该选微服务,什么时候该选单体?
判断标准其实很朴素:看你的瓶颈到底在哪里。
选单体(或模块化单体):当你的瓶颈是“代码复杂、质量差”,但团队就十几个人,天天坐在一起,发布节奏统一。这时候拆微服务只会把代码的混乱变成网络的混乱,调用链变长,排查问题更痛苦。单体架构开发简单、调试直观,只要内部做好模块边界(比如用包结构或模块化框架约束),完全能撑很久。
选微服务:当你的瓶颈是“人”和“发布”。团队扩大到几十上百人,改一个小功能要等整个大包编译、测试、发版,不同小组互相踩脚;或者不同模块的负载差异极大(比如搜索模块要 50 台机器,用户管理只要 2 台)。这时候微服务才“回本”,因为独立部署和独立扩展带来的收益,超过了维护几十个服务的代价。
微服务的真实代价(为什么强行上会“适得其反”)
很多公司只看到了“独立部署”的好处,没看到背后的账单:
从“函数调用”变成“网络调用”:单体里模块之间是内存里的方法调用,微秒级,不可能“半成功”。拆成微服务后,变成跨网络调用,要处理超时、重试、熔断。一个简单请求可能穿过五六个服务,延迟从 10 毫秒变成 100 毫秒。
事务一致性变成噩梦:单体里一个数据库事务就能保证“要么都成,要么都败”。拆开后,订单扣了库存没扣,你得写复杂的补偿逻辑(Saga 模式),数据可能长时间不一致,排查起来极其痛苦。
运维成本指数级上升:10 个服务有 10 套部署流水线、10 套监控、10 套日志。有真实案例显示,服务从 10 个涨到 80 个后,基础设施成本涨了 400%,故障排查时间从 15 分钟变成 3 小时。
“分布式单体”的陷阱:这是最典型的“适得其反”——你按微服务拆了,但服务之间仍然共享数据库、或者必须一起发版。结果你付出了微服务的全部代价,却没得到任何好处,反而比原来的单体更难维护。
一个务实的路径
不要一上来就做“大爆炸式微服务改造”。业界比较认可的路径是:先模块化单体,再按需拆分。
先在代码层面把边界划清楚(比如订单模块不能直接查用户库),但仍然部署为一个单元。当某个模块频繁单独变更、或者负载特征明显不同时,再把它作为第一个微服务拆出去。拆完先让单体调用它,验证稳定后再继续。这样每一步拆分都有明确的业务理由,而不是为了“微服务”而微服务。
浙公网安备 33010602011771号