2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

这 5 种场景不适合采用微服务

  • 2019-12-27
  • 本文字数:1759 字

    阅读完需:约 6 分钟

这5种场景不适合采用微服务

微服务是软件架构的银弹吗?或许不是。这个世界上很少有东西是百分百正确的,微服务也不例外。


在这篇文章里,我们将讨论在设计或重构应用程序时,哪些场景可以使用微服务,哪些场景要避免使用微服务。


首先,我们要了解什么是微服务以及微服务有哪些优势。

微服务是什么?为什么要使用微服务?

顾名思义,微服务就是一个具体的软件服务,通常是基于应用程序上下文定义的一个规模合理的最小化服务。例如,“将文档发送给系统打印机驱动程序”可以算是一个微服务,但“打印字母 n”或许就算不上是。一个应用程序可以由多个微服务组成,这些服务的部署和管理(部署在 pod 或集群中)是独立的,它们组合在一起实现了应用程序的功能。


这意味着我们可以在不重新设计或更新整个应用程序的情况下更新单个微服务,也意味着单个微服务(或多个微服务)发生故障并不会导致整个应用程序瘫痪,一个受到攻击的微服务也不会导致整个应用程序变脆弱。对于复杂的大型应用程序来说,微服务架构比单体架构(传统的非微服务架构)具备更高的可管理性。

1. 应对复杂

既然微服务这么好,为什么不都使用微服务架构呢?事实证明,适用于大型系统的架构不一定适用于规模较小的系统,在设计新系统时所使用的设计方式并不一定适合用来维护或更新已有的系统。


对于微服务架构来说,复杂性可能是一个关键考虑因素。Martin Fowler曾经说过:“……除非你的系统复杂到难以管理,否则不要考虑采用微服务……”换句话说,相比其他因素,复杂性是采用微服务架构最关键的考虑因素。如果复杂性不是你首要解决的问题,那么微服务可能不适合你。


微服务架构需要额外的开销,比如服务设计、服务通信、服务管理和系统资源的使用。采用微服务架构是有代价的,如果一个应用程序无法充分利用微服务的优势,那么为了采用微服务架构而付出的代价就有点太高了。

2. 小团队,大工作

试想有一个中等规模、中等复杂度的应用程序,这个应用程序由一个相对较小的团队负责开发和维护。如果它是一个单体系统,服务之间的通信可以很直接,可以对一些特定的任务进行优化。对于熟悉的代码的小团队来说,维护任务就相对容易。可能有时候开发会有点麻烦,但大多数时候是可控的。


如果让这个小团队开发和维护同样的应用程序,但改成了微服务架构,那么他们的工作量就会显著增加。微服务之间的通信变得很普遍,即使是做一个很小的改动也需要更多的时间,甚至还可能需要修改微服务编排和管理系统。这可能会给运维和开发造成压力。

3. 小到无法拆分

并不是所有的应用程序都大到足以被拆分成微服务。一组由中等规模服务组成的应用程序可能已经按照要求拆分完毕,即使这些服务仍然包含了子服务。


有些模块(比如库存模块和应付账款模块)真的有必要拆分成微服务吗?或者它们其实运行得还不错?可能它们现在的规模已经是恰到好处了,把它们进一步拆分成微服务不仅不会降低复杂性,反而会让系统变得更复杂。

4. 与遗留系统共舞

大部分软件开发人员几乎每天都要面对遗留代码。如果你正在维护一个遗留系统,那么无论它的原始设计多么随意,无论它现在变得多么糟糕,在把它重构成微服务之前,都要认真仔细地思考一下。它正处在生命周期的什么阶段?它是一个任务关键型系统吗(比如包含了一个不可替代的遗留数据库)?你需要几年时间来替换整个系统吗?更新或者替换过程需要一个长期详尽的计划吗?


微服务架构在更新或替换遗留系统方面扮演着重要的角色,但整个过程可能很长,一个没有策略指引的迁移很可能会造成灾难性的后果。

5. 紧密集成

有些应用程序要求各个组件和服务之间紧密集成,比如那些需要快速处理实时数据的应用程序。在服务之间添加新层会导致处理速度变慢。如果系统需要快速处理数据流中的数据(例如来自自动驾驶汽车的传感器数据),那么延迟可能是灾难性的。


嵌入式应用程序通常在响应时间和可用资源方面具有很严格的限制,所以它们的后端通常不太适合采用微服务架构。在设计嵌入式应用程序时,从一开始就要考虑如何让维护变得更简单以及如何让资源使用最优化。微服务通常在资源比较充裕的系统中容易发挥作用,可以帮助降低系统的复杂性。

要不要采用微服务?

你的应用程序适用采用微服务架构吗?如果它非常大,非常复杂,为了更好地管理它,可以考虑采用微服务架构。但如果它运行得很好,那就不要盲目追赶这个潮流。

英文原文

5 Reasons Not to Use Microservices


2019-12-27 15:556191
用户头像
小智 让所有人认同的文字称不上表达

发布了 408 篇内容, 共 408.0 次阅读, 收获喜欢 1986 次。

关注

评论

发布
暂无评论
发现更多内容

大数据-105 Spark GraphX 入门详解:分布式图计算框架全面解析 架构、算法与应用场景

武子康

Java 大数据 flink spark 分布式

spirv 常量的管理

Miracle

Apache Doris 3.1 正式发布:半结构化分析全面升级,湖仓一体能力再跃新高

SelectDB

数据库 数据分析 实时数仓 湖仓一体 半结构化

告别“硬件绑定”困局:青云云易捷如何让异构服务器“物尽其用”

智驱前线

如何通过Python SDK 向 Collection 中插入 Doc

DashVector

人工智能 数据库 大数据 AI

基于HarmonyOS SDK开放能力的微博社交体验构建实践

HarmonyOS SDK

HarmonyOS NEXT HarmonyOS SDK应用服务

spirv 块的管理

Miracle

技术分享 | 基于Dify的多终端亚马逊云科技智能化运维助手

伊克罗德信息科技

基于数据平台构建供应链协同体系,实现业务全链路可视化与智能决策

袋鼠云数栈

数据治理 企业数字化 袋鼠云 数栈 数字治理

AI语义预检内容助力企业

跑一跑

您的前端开发智能工作流待升级,查收最新 Figma2Code!

Comate编码助手

AI辅助编程 AI 编程 文心快码 Comate AI IDE

企业级数据采集解决方案:Dify + MCP Server + LLM打造零代码YouTube创作者主页分析智能体

不叫猫先生

LLM dify MCP Server

5 个 IIS 日志记录最佳实践

运维有小邓

日志分析 日志管理 日志审计

关于追觅造车,你需要知道的

慢点科技SlowTech

低代码:企业数字化转型的「快捷键」正在重塑生产力

伤感汤姆布利柏

面试官:为什么没有虚拟线程池?

王磊

深度解析 | CISA发布2025版SBOM最基本要素:软件供应链安全进入新阶段

安势信息

SBOM 软件物料清单(SBOM) CISA

OceanBase 向量数据库使用指南

老纪的技术唠嗑局

AI oceanbase 向量化

科技领航,Robo.ai在中东展现AI赋能DePIN的"中国方案",价值创造者终获认可

科技大数据

斥巨资引入的AI,为何在业务一线“水土不服”?

MatrixOrigin

人工智能 数据挖掘 AI 数据分析 数据

版权数据集上新 | 覆盖大模型、多模态大模型、语音识别、语音合成及计算机视觉等多领域

数据堂

计算机视觉 语音识别 语音合成 大模型 多模态大模型

怎么自由调整字体的字重?UI设计可变字体来帮你!

职场工具箱

效率工具 设计 办公软件 字体 ui设计

喜报|矩阵起源荣获2025深圳市“种子独角兽企业”称号

MatrixOrigin

人工智能 AI 种子独角兽

可灵团队提出MIDAS:压缩比64倍、延迟低于500ms,多模态互动数字人框架实现交互生成新突破!

快手技术

使用时长提升 4 倍,融云 AI Agent 助力中东语聊应用激活新用户

融云 RongCloud

融云荣登信通院「2025 上半年度高质量数字化转型全景图&技术解决方案集」

融云 RongCloud

产品经理如何借力项目管理软件,驾驭复杂项目并准时上线?

Tecjt_锦图科技

项目管理

企业级数据采集解决方案:Dify + MCP Server + LLM打造零代码YouTube创作者主页分析智能体

不叫猫先生

数据分析 LLM dify MCP Server

登顶第一!追觅自集尘吸尘器凭什么改写行业规则?

慢点科技SlowTech

这5种场景不适合采用微服务_架构_Michael Churchman_InfoQ精选文章