50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

微服务架构宜缓行

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

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

关注

评论

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

互联网大厂1000道Java面试题及答案整理

Geek_Yin

Java 程序员 Java面试题 Java面试八股文

《算法导论(第4版)》阅读笔记:p173-p174

codists

算法

【HarmonyOS 5】Laya游戏如何鸿蒙构建发布详解

GeorgeGcs

H5 HarmonyOS 小游戏 Laya 构建鸿蒙

Web端实时通信技术SSE在携程机票业务中的实践应用

JackJiang

网络编程 即时通讯 IM

Shiro简介及SpringBoot集成Shiro(狂神说视频简易版)

刘大猫

人工智能 算法 数据分析 权限控制 shiro

详解鸿蒙开发如何上传三方库到ohpm仓库

幽蓝计划

DeepSeek‑R1-0528 重磅升级:蚂蚁百宝箱免费、无限量调用

猫头虎

人工智能 DeepSeek DeepSeek v3 DeepSeek R1 模型

【HarmonyOS 5】鸿蒙中的UIAbility详解(三)

GeorgeGcs

【HarmonyOS 5】鸿蒙中的UIAbility详解(二)

GeorgeGcs

【HarmonyOS 5】鸿蒙中的UIAbility详解(一)

GeorgeGcs

高效拆分用户故事

俞凡

敏捷开发

征程 6EM 常见 QConfig 配置解读与示例

地平线开发者

自动驾驶 算法工具链 地平线征程6

鲲鹏Arm+麒麟V10,国产化信创 K8s 离线部署保姆级教程

北京好雨科技有限公司

k8s rainbond 容器平台 企业号 5 月 PK 榜 信创国产化

明基专业编程显示屏618优惠,程序员入手就趁现在!

陈老老老板

5 分钟搞定 Go 自定义结构体标签

俞凡

golang

1688店铺订单接口指南攻略

tbapi

1688订单物流接口 1688店铺订单接口 1688店铺订单详情接口

今年夏天,最不该错过的一场 AI 聚会

声网

全新小艺上车鸿蒙智行尊界S800,启领智慧出行新范式

极客天地

基于YOLOv8的汽车车牌位置实时检测项目【完整源码数据集+PyQt5界面+完整训练流程+开箱即用!】

申公豹

yolov8

[大厂实践] LLM加速大规模测试迁移

俞凡

人工智能 测试

Redis 数据恢复的月光宝盒,闪回到任意指定时间

Baidu AICLOUD

数据库 redis

2025年中高级JAVA工程师面试题汇总

Geek_Yin

Java 编程 Java面试题 Java面试八股文

鸿蒙仓颉语言开发实战教程:实现商品分类页

幽蓝计划

鸿蒙仓颉语言开发教程:自定义弹窗

幽蓝计划

1688商品评论API接口攻略

tbapi

1688商品评论接口 1688评论API 1688评论数据采集

战略实践:7 步改变未来

俞凡

战略

Java学习书籍推荐!

程序员高级码农

Java 程序员 计算机

是时候跟虚拟机说再见了?

北京好雨科技有限公司

k8s rainbond 容器平台 企业号 5 月 PK 榜 信创国产化

从试验田到深水区,AI落地的福州答卷

脑极体

AI

华为浏览器上线高考频道,打造一站式智慧助考服务

最新动态

SpringBoot项目的html页面使用axios进行get post请求

刘大猫

人工智能 算法 post GET axios

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