微服务拆分时机与陷阱:10人以下别拆,业务不稳别拆,强一致性别拆
本内容发表于:2026-04-02 12:04:03
浏览量
1031

微服务拆分的时机与陷阱:什么时候该拆,什么时候别拆

11.jpg

去年,一个创业公司的技术负责人请我吃饭,满脸写着焦虑:“我们准备把单体应用拆成微服务,老板觉得这样才‘先进’,但我总感觉哪里不对。”

我问他:“你们现在多少人?”

“后端六个。”

“线上有多少用户?”

“两万。”

“多久发一次版?”

“两周一次,还算稳定。”

我放下筷子说:“你们现在拆微服务,大概率是给自己挖坑。”

他愣住了:“为什么?不是都说微服务是趋势吗?”

这是很多人对微服务的误解:以为拆了就是先进,不拆就是落后。但现实往往相反——拆错了,比不拆更痛苦。

01 微服务不是银弹,是手术刀

先讲清楚一件事:微服务本身不是目的,解决单体应用的问题才是目的。

单体应用有什么问题?部署慢、牵一发而动全身、团队协作困难、某个模块出问题整个系统都挂。如果你的单体没这些问题,拆它干嘛?

微服务是手术刀,不是锤子。锤子看什么都像钉子,手术刀只在需要的时候才动。

反常识观点:大部分团队,根本没到需要拆微服务的阶段。 10个人以下的团队,拆完以后,光运维就能把所有人累垮。

02 什么时候该拆?

三个信号,满足两个以上再考虑动手。

信号一:团队规模大了,代码冲突频繁

当你发现每次发版,git合并都要花半天时间,改一行代码能和三个人冲突,说明团队已经大到在一个代码库里施展不开了。这个时候拆,是为了解放团队。

信号二:部署频率被单体拖累

想发一个模块的更新,但因为其他模块也在改,得等所有人测完才能发。本来一天能发三次,现在一周发一次。这个时候拆,是为了让每个团队独立交付。

信号三:模块边界已经清晰

你闭着眼睛都能说出“订单模块”和“用户模块”之间怎么交互,依赖关系清清楚楚。这个时候拆,是水到渠成。

如果这三个信号一个都没有,拆了大概率是自找麻烦。

03 什么时候别拆?

比“什么时候该拆”更重要的,是“什么时候千万别拆”。

场景一:团队少于10人

微服务最大的成本不是代码,是运维。每个服务要搭监控、搭日志、搭CI/CD、搭服务发现。10个人的团队,拆成5个微服务,运维工作量翻三倍,哪还有精力写业务?

场景二:业务还在快速试错期

如果你连产品方向都没确定,今天做这个明天改那个,拆出来的边界明天就变了。别拆,让单体替你扛着,等业务稳定了再说。

场景三:数据一致性要求极高

微服务最头疼的是分布式事务。如果业务需要强一致性(比如金融、账务),拆完以后要处理跨服务的最终一致性,复杂度直线上升。除非万不得已,别碰。

场景四:团队没做过微服务

新手上路,第一个项目就上微服务,大概率是给自己挖坑。最好先用单体跑通,再慢慢拆。拆错了可以合回去,但拆的时候手忙脚乱,业务可等不起。

04 拆分的代价,你算过吗?

很多人只看到微服务的好处,没算过要付出的代价。

代价一:网络延迟

原来一个函数调用,现在变成跨网络RPC。原来几十毫秒能搞定,现在可能几百毫秒。如果依赖链长了,延迟成倍增加。

代价二:分布式事务

原来数据库事务能搞定一切,现在得用Saga、TCC、最终一致性。代码量翻倍,调试难度翻倍,数据对不上账的时候恨不得把代码全删了。

代价三:运维复杂度

以前监控一个应用,现在监控十几个。日志散落在各处,查个问题要翻好几个服务。以前发一次版搞定,现在要协调多个服务按顺序发。

代价四:调试地狱

本地跑一个单体,断点一打就能调试。现在要本地起十几个服务,内存不够,环境配不全。线上出问题,得在调用链里追半天。

有家电商公司,拆了两年微服务,最后运维负责人跟我说:“以前单体的时候,我们三个人管系统;现在十几个人管几十个服务,问题没少,人多了三倍。”

05 边界怎么划?划错了比不拆还惨

如果你决定要拆,最核心的问题是:怎么划边界?

原则很简单:按业务能力划,不按技术层次划。

  • 订单、用户、商品、库存,这是业务边界。

  • 前端、后端、数据库,这是技术层次。按技术层次拆,等于没拆。

边界划错最典型的症状:一个需求改完,要同时改三四个服务。这说明你把本来该在一起的功能拆散了。这时候,不是微服务,是“微单体”。

一个真实案例:某公司把“订单”和“物流”拆成两个服务,结果每次发版,两个服务都得一起改、一起发。拆了等于没拆,反而多了网络调用和事务问题。后来又把两个服务合回去了。

拆分的目的是让变化隔离,不是让变化扩散。 如果拆完以后,改一个需求要动更多代码,说明划错了。

06 一个真实案例:拆了两年,还不如不拆

一个SaaS公司,两年前开始拆微服务。老板觉得“微服务是趋势”,技术负责人也想着“为以后规模扩张做准备”。

拆了两年,结果:

  • 服务从1个变成18个

  • 运维从2个人变成6个人

  • 每次发版要协调5个服务,经常发到半夜

  • 线上出问题,查日志要翻好几个系统,平均修复时间从20分钟变成2小时

  • 老板问“什么时候能拆完”,没人敢回答

后来他们做了个决定:把几个经常一起变更的服务合并回去。合并完,服务数量减到8个,运维压力降了一半,发版效率反而提高了。

技术负责人后来跟我说:“拆微服务最怕的,不是拆得慢,是拆完了才发现,其实没必要拆。”

写在最后

微服务是个好东西,但它不是免费的午餐。拆之前,先问自己几个问题:

  • 你们团队多大?10人以下,别拆。

  • 业务稳定吗?还在试错期,别拆。

  • 数据一致性要求高吗?很高,别拆。

  • 有人做过微服务吗?没有,别拆。

微服务不是目标,解决业务问题才是。如果你的单体跑得好好的,别为了“先进”去拆它。拆错了,比不拆更痛苦。

那家拆了两年又合回去的公司,现在活得挺好。技术负责人说了一句话我记了很久:

“以前觉得不拆就是落后,现在觉得,合适才是先进。”

你的系统,现在合适吗?