AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

单体到微服务是一个演化过程,别在一开始就过度设计

  • 2019-01-22
  • 本文字数:1905 字

    阅读完需:约 6 分钟

单体到微服务是一个演化过程,别在一开始就过度设计

大多数应用程序(可能是其中的 90%)采用了单体架构。为了避免过度工程化,我们应该从一个简单的架构开始,并根据需求进行演变。在 Reactive Summit 2018 大会上,Randy Shoup 在演讲中分享了他与小公司一起,逐步发展成为大型全球性互联网公司的经验,以及它们的架构是如何进行演变的,并从 IT 专业的角度为创办新公司或推出新产品提出了一些建议。


Shoup 曾在 eBay、谷歌和 Stitch Fix 工作,目前是WeWork的工程副总裁。他例举的第一个例子是 eBay,从 1995 年开始,作为一个为期三天的周末项目,不是作为业务的概念证明(PoC),而是为了弄清楚是否有可能在网上做一些有趣的事情。今天,他们正在对基础设施进行第 5 次完全重写,Shoup 将该公司的架构描述为多语言微服务集,并补充说 Twitter 和亚马逊都经历了类似的演变。


Shoup 认为,从某种形式的单体架构开始,最后得到一组微服务,这是大公司的常见演变模式。Shoup 还指出,这种模式包含了两个部分——没有人从一开始就采用微服务架构,而是达到一定规模后才走向微服务。


Shoup 所提到的公司都非常庞大,他指出,这些公司的架构并不完全适用于大多数其他公司。大多数应用程序采用单体架构就足够了,Shoup 建议,在构建新应用程序或系统时先从简单的架构开始,并根据需要改进架构。他说:


如果你到后面不后悔早期的技术决策,那么你之前可能过度工程化了。


Shoup 认为,大多数公司和产品的常见演化曲线包括构思和启动阶段,分布式系统可能还包含伸缩阶段,以及优化阶段:



在构思阶段,我们不应该考虑架构问题,而只是进行原型设计。为避免过度工程化,我们应该不断问自己:“我们要解决什么问题?”这个阶段的目标是尽可能快地探索解决方案,并以最低成本:


  • 找到商业模式;

  • 找到契合的产品市场;

  • 吸引我们的第一批客户。


他建议我们,如果有可能,尽量避免使用任何技术,但可以使用谷歌广告来验证是否有用户点击,或使用原型或 Excel 电子表格。


进入启动阶段,目标变成了满足近期的客户需求,并尽可能以低成本来实现目标。在这个阶段,团队通常由 4 到 6 个人组成。他们的工作时间很短,可能只需要 3 到 4 个月,因为在这个阶段往往很难预先知道要构建哪些功能。我们只需要少量足以让我们前进的架构。Shoup 强调,它个阶段不要考虑伸缩性问题,我们应该使用简单而熟悉的技术,这绝对是一个单体架构——单个应用程序和单个数据库。基础设施应该尽可能小,而且不需要自己构建。相反,他建议使用平台即服务(PaaS)或类似的技术。


在这个阶段使用单体架构的优势包括:


  • 简单;

  • 速度快,因为它只有进程内延迟;

  • 你将获得单个构建部署单元;

  • 节省资源。


除了缺乏可伸缩性和存在单点故障之外,单体架构的主要缺点是缺乏模块化能力。虽然可以进行模块化,但它需要额外的编程和团队纪律。Shoup 指出,在这个阶段,这些都不是问题。但他认为,当我们需要为扩展做准备时,单体架构的组件化或模块化就变得有必要了。这将为在未来修改或替换服务提供便利。


对于我们何时需要重构单体,Shoup 列出了一些指标:


  • 速度:由于耦合和缺乏隔离,导致交付速度减慢;

  • 伸缩:垂直伸缩不再有效,或者系统的不同部分需要独立伸缩;

  • 部署:系统不同部分的演化速度不一样,因此需要独立部署。


在进入扩展阶段时,我们的目标是保持业务的快速增长以及应用程序能够正常运行。在组织方面,我们现在通常会增加团队数量,并扩大工作时间范围。通常还需要引入可重复的过程。


在技​​术方面,扩展阶段通常意味着转向可扩展的技术。通常,我们开始从单体中分离出服务,并且尝试减少单个数据库的负载,例如为某些数据创建只读副本。通常也会将一些服务(如支付和计费等特殊服务)分离出来,并引入事件队列或消息总线。


Shoup 认为,这个时候通常也需要考虑我们是否应该将单体分解成小型的独立组件,也就是微服务。我们还必须考虑现在使用的单个存储器是否仍然合适。在纽约 2017 QCon 大会上,Shoup 展示了如何将单体应用程序增量迁移为微服务和几个独立的存储。


The Art of Scalability”一书描述了一种三维可伸缩性模型(AKF Scale Cube),其中三个轴分别代表了不同类型的缩放:


  • X:水平复制和克隆;

  • Y:功能分解和分割(微服务);

  • Z:水平数据分区(分片)。


最后一个是优化阶段,Shoup 强调,这个阶段是成功的标志。此时的目标是保留功能,使用更少的资源,可能会减少团队。工作时间范围更长,可能是 2 到 5 年。


Shoup 总结说,在这种情况下,进行重构其实是一件好事:


重新构建系统是成功的标志,而不是失败。


业务发展得很好,你也有资源去做重构。这并不是说你一定要进行重构,而是你已经到了需要进行重构的时候。


查看英文原文https://www.infoq.com/news/2019/01/rearchitecture-system-success


2019-01-22 14:498077
用户头像

发布了 731 篇内容, 共 462.8 次阅读, 收获喜欢 2005 次。

关注

评论 2 条评论

发布
用户头像
有些是为了练练手或绩效而引进微服务
2019-02-01 14:34
回复
用户头像
很多公司根本就不需要分布式,不需要微服务,对单体应用做良好的设计,在需要的时候水平伸缩足以应对了。
2019-01-23 09:40
回复
没有更多了
发现更多内容

苹果超好用的Markdown文本编辑器:Ulysses for Mac最新激活 支持M1

彩云

文本编辑器 Ulysses

英特尔CEO:以“系统级代工”满足“芯经济”时代客户需求

E科讯

服务器硬盘选机械还是固态

Geek_f19a80

服务商

用友与清华合力赋能,提升大型企业数智化领导力!

用友BIP

企业数智化

推荐一个适合小公司的自动化部署脚本

秃头小帅oi

程序员 自动化部署

promise时效架构升级方案的实施及落地 | 京东物流技术团队

京东科技开发者

架构 重构 Promise 架构升级 企业号11月PK榜

为React Ant-Design Table增加字段设置 | 京东云技术团队

京东科技开发者

前端 React Ant Design 企业号11月PK榜 前端组件

Sonoma Cache Cleaner for Mac 苹果系统优化工具

彩云

Sonoma Cache Cleaner 系统优化工具

Kubernetes 漫游:理解 ConfigMap

Phoenix

Kubernetes, 云原生, eBPF

走进中国近代工业摇篮,探索业财融合领先实践

用友BIP

业财融合

通过Python脚本支持OC代码重构实践(三):数据项使用模块接入数据通路的适配

百度Geek说

Python 自动化 重构 脚本 企业号11月PK榜

Java基础面试题【分布式】Kafka

派大星

Java 面试题

企业、政府单位及公共组织办会,一键高效合规直达酒店!

用友BIP

企业数智化

火山引擎ByteHouse:4000字总结,Serverless在OLAP领域应用的五点思考

字节跳动数据平台

数据库 大数据 云原生

2024上海国际智能驾驶技术展览会

AIOTE智博会

自动驾驶展 智能驾驶展

对话在行人|新漢智能:基于用友BIP共创智能解决方案,使能中企全球化

用友BIP

数智化领先实践 中企全球化

理解技术和业务的共同目标

老张

质量保障 业务目标 技术目标

【2023云栖】刘一鸣:Data+AI时代大数据平台建设的思考与发布

阿里云大数据AI技术

大数据

浅谈仓储UI自动化之路 | 京东物流技术团队

京东科技开发者

测试 自动化测试 UI自动化测试 企业号11月PK榜

WorkPlus移动数字化平台,助力企业全面掌控业务和生态

BeeWorks

Amazon EC2 新手初探:初始设置之创建安全组

王强

Amazon EC2 亚马逊云服务

WorkPlus移动数字化平台高定制化服务,贴身满足企业的个性化需求

BeeWorks

同程面试:说一下多态的实现原理?

王磊

Java 面试 java面试

Dapp技术开发介绍

区块链技术

Android下Linux创建进程的姿势(下)

江湖修行

android Linux Kenel 移动端 #面试 #前端

开源埋点分析系统:洞察用户行为的新视角

ClkLog

开源 埋点 用户行为分析 用户分析 埋点框架

第五期 |《实时洞察 智能运营一用友企业绩效管理白皮书》解读

用友BIP

企业绩效

云渲染的“公”“私”技术!

Finovy Cloud

渲染 云渲染 元宇宙 云渲染农场 动画制作

【软件推荐】行云管家让你轻松实现数据安全运维!

行云管家

数据安全 数据泄露 数据安全运维

Amazon EC2 新手初探:初始设置之密钥对

王强

亚马逊云服务 Amaozn EC2

单体到微服务是一个演化过程,别在一开始就过度设计_架构_Jan Stenberg_InfoQ精选文章