写点什么

这 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:556172
用户头像
小智 让所有人认同的文字称不上表达

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

关注

评论

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

用先进算力,为智驾提速:华为云CloudVeo智能驾驶云服务正式发布

极客天地

新闻数据分析如何提升媒体公信力与用户黏性?

沃观Wovision

数据分析 数据 沃观Wovision 舆情监测系统

国产 AI 再放大招!智谱开源 GLM-4.5V,视觉推理能力“屠榜”全球

测试人

能效提升 × 碳减排双驱动:MyEMS 开源能源管理的双重价值实践

开源能源管理系统

开源 能源管理系统

品牌出海时,“文化差异”是海外舆情爆发的原因吗?

沃观Wovision

沃观Wovision 舆情监测系统 海外舆情监测

变更管理的关键,借助数字化优势重塑财务规划

智达方通

数字化转型 企业管理 全面预算管理 财务规划

开源能源管理系统 MyEMS:赋能能源高效管理的创新利器

开源能源管理系统

开源 能源管理系统

合合信息参编《数据产业图谱(2025)》,助力绘制中国数字经济发展新蓝图

合合技术团队

人工智能 大数据 算法

深度探讨基础软件驱动下的智驾进化之道 |《AI 进化论》第四期

OpenAnolis小助手

操作系统 智算 AI进化论

开源能源管理系统 MyEMS:技术深耕与实践赋能的深度解析

开源能源管理系统

开源 能源管理系统

详解CAD批量打印PDF的黑白模式设置,快速搞定批量输出

在路上

cad cad看图 CAD看图软件 CAD看图王

百度网盘基于Flink的实时计算实践

百度Geek说

阶跃星辰开源端到端语音模型 Step-Audio 2 mini:理解、推理与生成统一建模;苹果发布可在浏览器运行的视觉模型丨日报

声网

火山引擎多模态数据湖落地深势科技,提升科研数据处理效能

新消费日报

从库存到利润加速器 AI商品计划重塑零售战略

第七在线

海外达人营销常见误区与破解之道

Wolink

海外社媒营销 海外营销推广 达人营销

超级精灵再进化 smart发布EHD超级电混技术:每一程,比增程更成

极客天地

Coze教程 第2章:Coze开发环境搭建与配置

测试人

DeepSeek大模型Prompt工程深度实践(开发者空间Notebook版)

华为云开发者联盟

Prompt 华为开发者空间

腾讯Youtu-Agent正式开源,加速推动智能体从研究走向应用

极客天地

海外APP上线Apple App Store的流程

北京木奇移动技术有限公司

软件外包公司 APP开发公司 海外APP

从零开始学MCP | MCP 协议核心原理解析

测试人

“操作系统开源与 AI 进化”分论坛全议程来啦 | 2025 云栖大会

OpenAnolis小助手

AI 操作系统 云栖大会 龙蜥社区

睿思芯科正式加入龙蜥社区,携手共建 RISC-V 服务器生态新标杆

OpenAnolis小助手

操作系统 龙蜥生态

通过工具增强 LLM Agent 能力:veRL+ReTool 的完整实践指南

火山引擎开发者社区

字节跳动

CAD看图绘测一键全搞定,告别多软件切换!

在路上

cad

KCP协议应用详解:为速度而生的可靠传输协议

京东科技开发者

小程序热更新赋能App动态引擎无缝迭代

xuyinyin

捷途汽车1-8月累计销售402992辆,同比增长27.3%

科技热闻

解码大模型:技术篇《1.1-基础架构概念》

京东科技开发者

深度探讨基础软件驱动下的智驾进化之道 |《AI 进化论》第四期

阿里云基础软件

操作系统 智算 阿里云 PAI-TurboX AI进化论

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