写点什么

微服务架构宜缓行

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

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

关注

评论

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

Linux常用命令-文件操作

正向成长

linux命令

AQS介绍和原理分析(下)

追风少年

并发编程 AQS

Ubuntu 如何强制时间同步

HoneyMoose

iOS 15隐私升级及注意事项

阿里巴巴大淘宝技术

ios WWDC21

云原生负载均衡和网关应用实践

火山引擎开发者社区

云原生 后端

2022秋春招/提前批面经分享总结(字节、腾讯、阿里)

学无止境的阿奔

腾讯 面试 阿里 字节 校招

大专的我,闭关苦学56天,含泪拿下阿里offer,五轮面试,六个小时灵魂拷问

Java架构师迁哥

利用 IComparable<T> 以及 IComparer<T> 定义顺序关系

喵叔

7月日更

将 FeignClient 的请求记录成 cURL 格式

哈德韦

微服务 前后端分离 log4j curl Spring boot Feign

从特斯拉召回事件,窥探OTA汽车进化真面目

脑极体

在线HTML转JS/JSON工具

入门小站

工具

分层架构:一个经典却得不到优的难题

码猿外

架构 微服务

Python协程 & 异步编程(asyncio) 入门介绍

行者AI

#python

CVPR2021竞赛结果出炉,阿里淘系多媒体算法包揽3项国际冠军

阿里巴巴大淘宝技术

CVPR

一文看懂 Context

Rayjun

Go 语言

架构实战营模块七作业

竹林七贤

网络攻防学习笔记 Day63

穿过生命散发芬芳

网络攻防 7月日更

架构实战营模块7作业

Vic

架构实战营

二分查找常见套路与分析

gevin

算法 二分查找

【LeetCode每日一题 Day 4】4. 寻找两个正序数组的中位数

编程熊

程序员 算法 LeetCode 面经 笔试

全表遍历并处理数据有点慢?放开!我来!

林一

jpa Stram @QueryHints

花2个月备战字节,3轮面试拿下总包60W Offer!

Java架构师迁哥

为什么AI需要大大大大大模型?

脑极体

Linux之which命令

入门小站

Linux

08 | 指针系列(二):记住,指针变量也是变量(2)

Nydia

【Flutter 专题】97 仿网易新闻标签选择器

阿策小和尚

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

external-attacher源码分析(1)-main方法与启动参数分析

良凯尔

Kubernetes 源码分析 Ceph CSI Kubernetes Plugin

网络攻防学习笔记 Day62

穿过生命散发芬芳

网络攻防 7月日更

为什么AI需要大大大大大模型?

白洞计划

架构实战营模块一作业

Clarke

架构实战营

新能源车的发展趋势

石云升

学习 新能源汽车 7月日更

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