Why I'm No Longer Talking to Architects About Microservices

Ian Miell Ian Miell March 11, 2025 10 minutes Read

上周再次发生了。我在一个架构评审会议上,一位架构师同事兴致勃勃地开始了另一场关于 microservices 的辩论。几分钟之内,大家眼神呆滞,陷入了一场荒谬的讨论,讨论的内容本应是实现目标的手段,却演变成了目标本身。那一刻,我意识到:我受够了。我终于发誓不再和架构师谈论 microservices 了。为什么?因为这些对话通常毫无结果。

我将我的挫败感归结为三个问题:

  1. 没有人对 "microservice" 的含义达成一致。
  2. 关于 microservices 的对话是抽象的,与真正的业务目标几乎没有联系
  3. 在不改变组织结构的情况下采用 microservices 是毫无意义的。

Problem One: No One Knows What a Microservice Is

这是最明显的问题。对于什么是 microservice,没有正式的定义,所以当人们谈论它们时,最终往往各说各话。

以下是一些现有的定义:

虽然其中一些定义彼此之间有很大的重叠,但重点的差异,加上我们讨论它们的松散方式,最终导致了 "盲人摸象" 的情况:每个人都在正确地描述略有不同的东西,所以没有人是 "错的",但我们肯定没有达成一致。

(在谈到 Amazon Video 所谓的 microservices 到 monolith 的迁移时,我 在这里 讨论了关于什么是 microservice 的这种困惑。)

在经历了足够多的此类辩论后,我发现完全禁止使用 "microservices" 这个词更简单。如果一个术语引起如此多的混乱,也许它已经失去了它的作用。

我们可以讨论具体的挑战,或特定的权衡,而不是争论如何称呼我们的架构:如何更快地部署新功能,如何减少耦合,如何扩展系统的某些部分。换句话说,microservices(无论你决定它们是什么)本身不是目的,而是实现其他目标的副产品

Problem One (b): The Lack of Discipline in Software Terminology

这不仅仅是一个 microservices 问题:这是我们行业中一个更广泛的问题。我们抛出听起来令人印象深刻的大词,但对不同的人来说,它们意味着截然不同的东西。考虑一下这些术语,以及它们的历史:

每个术语都以明确的意图开始,但随着时间的推移,它们被拉伸和扭曲,以意味着说话者想要倡导或批评的任何东西。有了如此草率的定义,我们的对话绕圈子也就不足为奇了?

(顺便说一句,我想赞扬 GitOps。这个术语的使用相对稳定,这主要归功于一个清晰的原始定义(现在,可悲的是,它已经从互联网上消失了,与该术语的创建者 Weaveworks 一起),这个定义不容易被用于商业目的而歪曲。)

Problem Two: Microservices Conversations Are Abstract and Unrelated from Business Goals

与第一个问题密切相关的是,关于 microservices 的讨论通常与任何有形的业务目标脱节。如果你问 "我们实际上要解决什么业务问题?" 你经常会得到模糊的回应,例如:

如果你仔细听,关于 microservices 的许多对话实际上不是关于架构,而是关于想要为一家不同的公司工作,在那里技术是最前沿的,问题在理论上很有趣,而不是遗留问题缠身并受到现实世界权衡的约束。

可悲的现实是,许多开始进行 microservices 迁移的团队最好还是坚持使用结构良好的 monolith,直到他们的扩展需求真正需要不同的方法。Building Microservices 的作者 Sam Newman 经常警告说,除非有令人信服的理由,否则大多数组织不应从 microservices 开始。

再说一遍,最好停止谈论 microservices。开始谈论缩短周期时间、提高可靠性和解决具体的业务瓶颈。如果将系统分解为更小的服务是实现这些结果的最佳方式,那很好,但架构师之间关于 microservices 的钻牛角尖的讨论并不是实现目标的方式。

Problem Three: Microservices Without Organizational Change Is Pointless

工程师在脱离业务背景的情况下讨论 microservices 的另一个关键后果是,他们通常会忽略使 microservices 工作所需的组织变革。

Microservices 不是在真空中工作的。它们要求团队以支持它们的方式进行组织。这意味着:

如果你的组织不愿意做出这些改变,microservices 只会使事情变得更糟。增加技术复杂性,同时保留所有旧的组织效率低下。简而言之,技术应该遵循业务需求,而不是相反。

大多数讨论 microservices 的人要么不欣赏这一点,要么不欣赏这有多么困难。当你的业务规模超过微不足道的规模时,改变你的组织结构比改变你的软件架构_困难得多_。这就是为什么小型创业公司可以 "pivot",并如此迅速地改变他们的软件架构:只要每个人都同意架构更改,他们的组织结构就可以更改。

The Next Time Someone Mentions Microservices…

我很清楚这里的讽刺意味:我已经谈到了我不再谈论 microservices 了。有了这些,我就闭嘴,再也不提这件事了。