【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

微服务架构宜缓行

  • 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:302376
用户头像

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

关注

评论

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

Linux之iostat命令

入门小站

Netflix是如何做决策的? | 7. 学习的文化

俞凡

数据分析 netflix 大厂实践 2月月更

微信朋友圈的高性能复杂度分析

tom

【第 24 期】前端食堂技术周刊

童欧巴

前端 前端开发 行业资讯 周刊 资讯

微信朋友圈高性能复杂度分析

「架构实战营」

朋友圈高性能复杂度分析

风中奇缘

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

《人月神话》第十七章阅读笔记:再论“没有银弹”

panda

人月神话 阅读笔记 没有银弹

微信朋友圈高性能复杂度分析

孙强

#架构实战营

聊聊领导力与带团队的那些事

大卡尔

团队管理 领导力 质量保障 2月月更

欢迎客户支持自动化领域的新兴领导者 Percept.AI 加入 Atlassian 大家庭!

Atlassian

敏捷 Atlassian Jira JiraServiceManagement 客户服务

开杠面试官-微信朋友圈高性能架构

晨亮

「架构实战营」

微信朋友圈的高性能复杂度

smile

架构实战营

微信朋友圈高性能架构分析

IT屠狗辈

架构 高性能 微信朋友圈 架构实战营

微信朋友圈高性能复杂度分析

Geek_f3e842

架构实战营

微信朋友圈高性能复杂度方案设计

Fingal

架构实战营

跨平台移动APP开发进阶(二):HTML5+、mui开发移动app教程

No Silver Bullet

跨平台 2月月更 mui

《人月神话》第十六章阅读笔记:没有银弹

panda

人月神话 阅读笔记 没有银弹

作业七-王者荣耀商城异地多活架构设计

曾竞超

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

模块二作业

Mr小公熊

真正的Kafka多线程消费

dinstone

kafka 多线程 并发消费

模块二作业

Geek_ec866b

架构实战营

在线YAML转CSV工具

入门小站

工具

学生管理系统详细架构设计

刘洋

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

跨平台移动APP开发进阶(三):hbuilder+mui mobile app 开发心酸路

No Silver Bullet

跨平台 2月月更 mui

程序员,如何避免无效会议?

蜜糖的代码注释

2月月更

每天都扫的二维码,你知道它的技术原理吗?

慕枫技术笔记

后端 2月月更

架构实战营:模块二作业

刘璐

[JAVA冷知识]JAVA居然可以多继承吗?让我们用内部类去实现吧!

山河已无恙

Java 2月月更

重学架构之微信朋友圈高性能架构分析

陈华英

架构训练营 架构实战营

微信朋友圈的高性能复杂度分析

张逃逃

剑指Offer——你真的看懂无领导小组面试了吗?

No Silver Bullet

面试 offer 2月月更 无领导面试

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