写点什么

微服务的额外代价

  • 2015-06-04
  • 本文字数:1554 字

    阅读完需:约 5 分钟

过去一年里,我们已经听到很多关于微服务的讨论。无论你觉得它们是一种新的架构方式,还是认为它们仅仅是对SOA 理念进行了重新包装,毋庸置疑的是微服务的理念正在席卷整个程序员社区。 Martin Fowler 的一篇文章经常被作为微服务的原始素材所引用,文章详细阐述了像 Netflix 这样的组织使用微服务的经验和成果。最近,Martin 在这个话题上又有新的言论,特别谈到了开发人员什么时候应当考虑使用微服务。

微服务 [噱头化] 带来的的后果之一是,我们看到开发团队太渴望拥抱微服务,却没有意识到他们要为此付出的代价。这增加了一个项目的成本和风险——经常会使项目陷入到严重的麻烦当中。

Martin 承认,微服务的术语最近可能有炒作之势,但它作为一种有用的架构风格已经存在很长时间了。有趣的是,Martin 并没有将这种风格视作 SOA 的一个变种,尽管他作为先驱见证了微服务最早的一些发展。不管微服务的名字叫什么, Martin 还是对程序员想要知道的答案做出了解释:究竟微服务架构对你的系统来讲是不是一个好的选择?

系统自身的复杂性是你决定是否使用微服务的一个决策点。微服务的方法适用于处理复杂系统,但微服务自身也会引入一组新的复杂性问题。当你使用微服务时,你必须有自动部署、监控、异常处理、最终一致性保证,以及其它分布式系统引入的各种复杂因素。

Martin 在他的文章中包含了一个图表,试图展示微服务应用与典型单体应用相比,它是如何改变系统复杂性的。他的建议是:

除非你面对的是一个过于复杂以至于难于管理的单体应用,否则绝对不要考虑使用微服务。大多数的软件系统应该构建为独立的单块程序。确保注重单体应用自身的模块化,而不要试图把它们分离成单独的服务。

有多种驱动程序员使用微服务的复杂难题,包括多应用并存、支持多个业务功能独立发展和扩展。然而,在 Martin 的观点中,采用微服务的决定性因素应当是单块应用已经过于庞杂以至于难以修改和部署。然而,正如我们去年的报道,Simon Brown 做了一个有趣的观察。

如果您正在构建一个单体系统,而它正在变成了一个大杂烩,也许你应该考虑是否足够对软件架构足够关注。你真的理解了软件中核心的结构性抽象吗?它们的接口和责任明确吗?如果不是,你为什么认为迁移到微服务架构可以有所帮助?当然,微服务将迫使你的系统物理分离从而无法走捷径,但是通过单块应用组件之间的分离也能达成同样的效果。

Martin 对于微服务和单体应用的看法更加客观。

很多归结于单体应用的问题其实并不是那种架构风格所自有的。我听说过人们说,你之所以需要使用微服务,是因为在单块应用中无法做到持续交付 - 然而已经有很多公司成功的完成了曲奇分割式部署( cookie-cutter deployment ) 的方式:Facebook 和 Etsy 是两个很著名的例子。

他还认为,将系统规模的增长视作你被迫使用微服务,从而使部件(组件)更容易替换的理由并不成立。认为单体应用不会有定义良好的模块边界的理由也并不充分。然而,Martin 通过实践认为,由于这些边界通常太容易被逾越,所以单体应用很容易被冠以大杂烩( Big Ball of Mud )的称号。总之,Martin 还是希望人们在决定向微服务架构跨越之前,深思熟虑一番,认真考虑架构和系统实现中的所有因素:

当代码规模等复杂性问题不断涌入项目时,我看到很多团队会发现微服务是个不错的选择。你要始终牢记微服务会带来了高昂的额外开销,显著减缓你的开发效率,除非你面对的复杂性难题确实需要微服务来解决。所以如果你能够保证系统足够简单,从而避免使用微服务:那怎么简单就怎么做吧。

查看英文原文 Microservices Premium


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-06-04 10:214662

评论

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

下一代产品的“双向奔赴”  鸿蒙版百度网盘发布多项领先AI能力

极客天地

【Redis技术进阶之路】「原理分析系列开篇」探索事件驱动枚型与数据特久化原理实现(数据持久化的实现AOF)

码界西柚

数据库 redis redis持久化 aof Redis底层原理

Netty源码—Reactor线程模型一

不在线第一只蜗牛

Java 算法 前端

数字化转型投入大、见效慢?中小企业该如何应对?

天津汇柏科技有限公司

数字化转型

Karmada v1.13 版本发布!新增应用优先级调度能力

华为云开发者联盟

容器 云原生 集群 Karmada

【宣法·3.15特辑】电子签怎么跟套路贷混为一谈了?

易成研发中心

电子签名

龙蜥社区第六届理事大会成功举行,共话技术创新与生态合作

OpenAnolis小助手

开源 龙蜥社区 OpenAnolis 龙蜥社区理事大会

用HAI+AI助手,不懂代码也能自己做页游

穿过生命散发芬芳

HAI应用服务器 腾讯云 AI 代码助手

多智能体强化学习的算力调度创新,让每一份算力都创造广告价值 | 京东零售技术实践

京东零售技术

电子签借贷真实吗?315报道引发的行业地震!电子签到底冤不冤?

易成研发中心

TiCDC 新架构 v9.0.0 使用实践

TiDB 社区干货传送门

TiCDC新架构

解析稳定率达99.99%!合合信息“大模型加速器2.0”助力AI打破“幻觉”

合合技术团队

人工智能 #算法 #大数据 图表解析

【2月13日 - 3月14日】TiCDC 新架构试用通道正式开启,全新升级,抢先体验,多重参与奖励等你拿!

TiDB 社区干货传送门

重识 APO:DeepSeek 掀起可观性领域变革 | 龙蜥生态

OpenAnolis小助手

AI 系统运维 apo 龙蜥生态 DeepSeek

Karmada v1.13 版本发布!新增应用优先级调度能力

华为云原生团队

云计算 容器 云原生

龙蜥 2024 年度“最佳合作伙伴”揭晓!申威、AMD 等多家新晋贡献厂商实力登榜

OpenAnolis小助手

操作系统 龙蜥社区 OpenAnolis 龙蜥社区年度优秀贡献者

“官方网站+公开课程”双赋能,鸿蒙游戏开发者服务焕新升级

最新动态

高性能网络SIG双月动态:加速 SMC eBPF 透明替换特性上游化进程,并与上游深度研讨新特性

OpenAnolis小助手

操作系统 龙蜥社区 smc 龙蜥SIG月报

用 tcpdump 分析 Java 客户端的 prepare 行为

TiDB 社区干货传送门

性能调优 故障排查/诊断

荣耀时刻!第二届开放原子大赛-OS Copilot 学习赛获奖名单新鲜出炉

OpenAnolis小助手

开源 操作系统 龙蜥社区 龙蜥赛事

TiDB × AI :DeepSeek 时代你需要什么样的数据基座

PingCAP

AI TiDB DeepSeek

分布式事务的模式

陈一之

架构 分布式 分布式事务 事务

在京东做技术是种什么体验?| 13位零售人告诉你答案

京东零售技术

《汽车电机MES系统实战指南:打造柔性化智能产线的4大核心模块与3项关键技术突破》​

万界星空科技

mes 制造业工厂 电机MES 汽车电机 汽车电机mes

CST软件如何用天线远场计算Group delay延时

思茂信息

cst CST软件 CST Studio Suite

保姆级离线 TiDB V8+ 解释

TiDB 社区干货传送门

8.x 实践

《Operating System Concepts》阅读笔记:p449-p459

codists

操作系统

高性能存储SIG月度动态:erofs快照器合入containerd社区,ANCK支持virtio-blk直通

OpenAnolis小助手

操作系统 高性能存储 龙蜥社区 龙蜥社区SIG EROFS

SysOM 可观测体系建设(一):万字长文解读低开销、高精度性能剖析工具livetrace

OpenAnolis小助手

AI 可观测性 SysOM 龙蜥系统运维联盟 livetrace

面试官:谈谈你对Reactor模型的理解?

王磊

重塑家庭观影标准,海信激光电视探索X1斩获艾普兰奖

新消费日报

微服务的额外代价_SOA_Mark Little_InfoQ精选文章