QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

微服务架构宜缓行

  • 2015-06-15
  • 本文字数:989 字

    阅读完需:约 3 分钟

前不久,ThoughtWorks 首席科学家 Martin Fowler 发表了一篇博文,探讨 MonolithFirst 策略。他写道:

除非你的系统太复杂,作为单体应用会很难管理,否则不要考虑微服务。绝大多数软件系统都应该构建为单体应用。要注重在单体应用中实现良好的模块化,但不要试图将其拆分成单独的服务。

Tyler Treat 是来自 Workiva 的一名软件开发人员,同时也是咨询公司 Clarion Media 的创建者。近日,他发表了一篇博文《非面向服务的架构》(DOA)。文中,他对Fowler 的观点表示了赞同,同时他指出,团队迫不及待地采用微服务架构,一个原因是像Fowler 所说的那样,他们不了解微服务的固有开销,另外一个原因是他们只看到了像Netflix 公司这样的成功案例,却没有意识到那些公司并不是从微服务开始的,也就是说,是“微服务妒羡(microservice envy)”导致团队作出了那样的选择。

微服务确实有许多优点:“反脆弱性(anti-fragility)”、容错、独立部署与扩展、架构抽象、技术隔离。但并不是说采用了微服务就自然地具备了这些特性。比如,要具备反脆弱性,需要充分考虑分布式系统的不确定性,清楚异步、网络划分、节点故障、平衡可用性与数据一致性等问题。同样地,要具备可维护性和可扩展性,首先要有恰当的基础设施和组织结构。理论上讲,微服务可以提高开发速度,但在创建组织依赖时,“微服务佣金(MicroservicePremium)”可能会降低开发速度。所以,采用微服务架构需要具备一些先决条件,包括恰当的持续发布管道、能胜任的DevOps 和Ops 团队、审慎的服务边界等等。此外,周密的测试和集成模式也很重要。

而提到“单体(monolith)”,人们就会想到不可扩展、不可维护、缺乏弹性。但实际上,只要规模合理,单体系统也可以具有模块化、可维护、容错等特性。

因此,Treat 认为,自下而上的方法是一种更好的微服务实施策略。像Fowler 所说的那样,从单体或一个粗粒度服务的小集合开始,在有了足够的服务维护和部署经验后,再逐步分离出更细粒度的服务。

总之,微服务需要很高的组织和系统成熟度。否则,匆忙采用只能创建出一个“非面向服务的架构(disservice-oriented architecture)”。


感谢郭蕾对本文的审校。

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

2015-06-15 21:302533
用户头像

发布了 1008 篇内容, 共 396.6 次阅读, 收获喜欢 345 次。

关注

评论

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

【Flutter 专题】60 图解基本 Dialog 对话框小结

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

netty系列之:自建客户端和HTTP服务器交互

程序那些事

Java Netty 程序那些事

RTD 比率式温度测量传感器设计思路

不脱发的程序猿

学习 嵌入式 电路设计 硬件开发 ADI

Linux之last命令

入门小站

Linux

Vue进阶(八十七):输入框事件 blur 与 change 的差异

No Silver Bullet

Vue 9月日更

不用手机,如何让猫给你打视频电话丨日常小技

声网

物联网 目标检测 目标跟踪

读书笔记 -《数据密集型应用系统设计》- 数据编码

KayTin

07. 图灵测试与第一次AI浪潮

Databri_AI

人工智能

数字化时代商业银行客户触达策略研究 从数据到服务 由场景到生态

CECBC

你知道 ES6~ES12等叫法是怎么来的吗?

编程三昧

JavaScript ecmascript 8月日更

模块1-作业

笑看风雨情

网络攻防学习笔记 Day122

穿过生命散发芬芳

网络安全 8月日更

GitHub获120w+star的JDK源码剖析手册,竟出自Alibaba高管之手?

Java 架构 面试 程序人生 Alibaba

Lua 入门到精通( 02 Lua 基本语法)《做一个脚本高手》

陈皮的JavaLib

lua Linux 运维 8月日更

POM 文件中 licenses 许可证的定义

HoneyMoose

智汇华云 | ArSDN之分布式路由及浮动IP简介

华云数据

AlphaFold2“登陆”北鲲云平台,云计算助力科研大放异彩

北鲲云

细思极恐!Alibaba新产SpringBoot深度历险(嵩山版)开源

Java 编程 架构 面试 架构师

快手平台严管售卖“仿黄金类饰品”,直播带货在收割消费者

石头IT视角

中证协组织专题座谈会,加快推进区块链技术在证券行业应用

CECBC

在线JSON转MySQL建表语句工具

入门小站

工具

C#多线程开发-线程同步02

Andy阿辉

C# 多线程 多线程并发 8月日更

Zookeeper集群搭建

Mike

我遇到的那些工长

escray

生活记录 8月日更

区块链技术发展趋势与银行业探索实践

CECBC

SharingSphere 源码解析 -- 真实SQL生成探索

数据库 源码

VSCode配置JAVA开发环境

IT蜗壳-Tango

Java 9月日更

百分点感知智能实验室:语音识别技术发展阶段探究

百分点科技技术团队

语音识别 百分点科技 感知智能

跨越AI天堑时:行动代号“盘古大模型”

脑极体

深入了解 RocketMQ 之ACL

邱学喆

签名 白名单 资源权限校验

有迹可循之CheckList

编号94530

Code Review 架构设计 checklist

微服务架构宜缓行_SOA_谢丽_InfoQ精选文章