微服务的浪潮,正在退去
编程 微服务 架构设计 7

多年来,我们一直坚信"微服务是未来"的理念。

"把所有东西拆成独立的微小服务","让团队独立扩展","部署更快,迭代更猛"。

但最近出现了诡异的现象:许多曾迁移到微服务的团队,正在回归单体架构。

这不仅是小创业公司的选择——亚马逊、Shopify、Basecamp、Segment,甚至谷歌都在这么做。

没错。这些国外微服务的先驱者正在悄悄承认:

"我们当初做过头了。"

微服务到底哪里不好?

说实话,微服务听起来很美好。理论上它们承诺:

  • 独立部署

  • 弹性扩展的团队

  • 清晰的关注点分离

但现实中你往往得到的是:

  • 上百个无人理解的代码仓库

  • 过多网络通信导致的延迟问题

  • 开发者花在基础设施的时间比产品还多

  • "这见鬼的bug到底是从哪个服务冒出来的?"

如果你真正用微服务构建过系统,大概率亲眼见过这些场景。

举个简单例子

假设要构建电商系统。

采用微服务架构可能会拆成:

  • 认证服务

  • 商品服务

  • 购物车服务

  • 订单服务

  • 通知服务

看起来很酷对吧?

但是,紧接着你就会遇到如下问题……

  • 你需要用Kafka或RabbitMQ串联所有服务

  • 需要Redis实现会话共享

  • 完整部署一次需要30分钟CI/CD

  • 你开始编写大量服务间通信代码

更可怕的是:

现在要实现一个"简单"功能,需要改动5个服务、而不同的服务所属不同的开发小组,跨组评审需求、拉会、联调、测试,想想都头大。

微服务放大了复杂性

有件事我们当年没敢完全承认:

微服务不会减少复杂性——它只是转移了复杂性。

在单体架构中,复杂性体现在代码层。而微服务让复杂性弥漫到:

  • 网络IO延迟

  • API接口约定

  • 数据一致性

  • 部署流水线

  • 服务发现机制

  • 日志/追踪/监控体系

随便询问一个资深开发者都会得道相同的答案:维护50个微服务,比维护一个结构良好的大型单体应用要困难得多。

为什么单体架构正在回归

单体架构更简单。不是"容易",而是组件更少。

在单体架构中:

  • 所有代码都在同一处

  • 调试过程直截了当

  • 代码变更是原子性的

  • 没有跨服务API的噩梦

  • 本地开发不需要启动Kubernetes

如今借助现代化部署实践(Docker、k8s),单体架构同样能良好扩展。

国外案例:Shopify 和 Segment 的回归

Shopify:曾全面转向微服务,如今正在积极迁回模块化单体架构

Segment:类似经历,在遭遇扩展性、延迟和团队效率问题后,发布了博客文章《再见微服务

模块化单体架构:两全其美?

模块化单体架构正在成为众多企业的新选择。

不再是混乱的巨无霸,而是构建:

  • 单一可部署单元

  • 保持清晰的内部边界

  • 按微服务理念组织,但运行在单一进程中

你仍然可以获得业务分离的优势,同时避免网络跳转、复杂工具链和部署痛苦。

按领域划分模块:

  • /cart

  • /order

  • /notification

但整体仍是单个应用。

该放弃微服务吗?

未必,具体情况需要具体分析。

在以下场景微服务仍然适用:

  • 真正需要应对海量用户(百万级规模)

  • 拥有多个需要极速迭代的产品团队

  • 已建立完善的监控体系和部署流水线

但如果你符合以下情况:

  • 工程师少于50人

  • 专注于单一产品

  • 花在基础设施的时间超过功能开发

那么选择单体架构或许更能拯救你的团队。

最终建议

技术趋势总是一波三折。我们曾过度追捧微服务,现在正在理性回归。

不要盲目追随热潮。选择能让团队更高效、更从容、更专注产出的方案。

有时候,最好的架构不是最时髦的——而是能让你睡个安稳觉的那个。

微服务的浪潮,正在退去
https://liuxp.me/archives/wei-fu-wu-de-lang-chao-zheng-zai-tui-qu
作者
一只会思考的猪
发布于
更新于
许可