写点什么

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

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

关注

评论

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

陆奇:“黑客精神”过时了吗?答案是永远不会

图灵教育

nginx 程序员 服务器 计算机

【LeetCode】单词长度的最大乘积Java题解

Albert

LeetCode 5月月更

Serverless JOB | 传统任务新变革

Serverless Devs

Serverless SAE

名师开团,倾力指导!CCF GitLink 编程夏令营来袭,亚马逊云科技开源专家携丰厚奖金,与你相约!

亚马逊云科技 (Amazon Web Services)

亚马逊云

基于ArkUI开发框架,图片马赛克处理的实现

HarmonyOS开发者

HarmonyOS

极客星球 | 数据治理三步走,助力企业节省百万+资金投入

MobTech袤博科技

数据治理 大数据架构 降本增效

低代码构建物联网平台,让物联网项目更简单

AIRIOT

物联网 低代码开发

2022云原生安全发展24个洞见

青藤云安全

网络安全 容器安全 镜像安全

全自动、可视化开发,成为敏捷转型落地关键词

SoFlu软件机器人

软件开发模型有哪些?

源字节1号

软件开发

七天玩转 PolarDB-X 开源训练营 完成任务更有AirPods大奖等你拿!

阿里云数据库开源

数据库 阿里云 开源 分布式 PolarDB-X

EasyRecovery15手机版数据恢复软件

茶色酒

EasyRecovery EasyRecovery15

GitHub 3.1K,业界首个流式语音合成系统开源!

百度开发者中心

深入浅出Nginx实战与架构原理

C++后台开发

nginx 架构师 后端开发 Linux服务器开发 C++后台开发

能够发现零日漏洞模糊测试威力几何?

极狐GitLab

security DevSecOps

半导体erp系统和传统erp系统的区别

低代码小观

芯片 ERP 企业管理软件 半导体行业 ERP系统

EasyRecovery2022苹果电脑数据恢复软件

茶色酒

EasyRecovery EasyRecovery15

国内首个纯数字藏品元宇宙世界“ADAMeta”星城宇宙开启公测

最新动态

集成底座项目实施规程

agileai

主数据管理 集成底座 企业服务总线 项目实施 统一身份

新思科技探究保护供应链安全需要考虑的六个因素

InfoQ_434670063458

软件 新思科技 软件供应链

AI+工业互联网:百度AI专利讲述“中国智造”

百度开发者中心

架构实战营 第 6 期 模块七课后作业

火钳刘明

#架构实战营 「架构实战营」

JavaScript闭包

源字节1号

软件开发 前端开发 后端开发

昆仑芯科技加入龙蜥社区 ,赋能智慧开源,共筑AI芯生态

OpenAnolis小助手

芯片 龙蜥社区 CLA 昆仑芯科技

Apache APISIX v2.14.1 探索性版本发布,进军更多领域

API7.ai 技术团队

服务注册与发现 API网关 Apache APISIX APISIX 网关

观测云&新数科技,共同赋能企业数字化系统

观测云

手把手教你打造一套最牛的知识管理系统

小炮

在进行行情 tick 数据存储时,哪种数据结构查找起来更快?

TDengine

数据库 tdengine 时序数据库

视频直播技术干货:一文读懂主流视频直播系统的推拉流架构、传输协议等

JackJiang

实时音视频 直播技术 即时通讯IM

万亿级别数据量的秒级实时分析,小红书OLAP引擎的进化和自研之路

小红书技术REDtech

大数据 实时数仓 OLAP Clickhouse

OpenHarmony 3.1 Release版本关键特性解析——ArkUI框架又有哪些新增能力?

OpenHarmony开发者

Open Harmony

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