写点什么

Shopify 是如何迁移到模块化单体架构的?

  • 2019-08-09
  • 本文字数:1323 字

    阅读完需:约 4 分钟

Shopify 是如何迁移到模块化单体架构的?

Shopify 高级工程师 Kirsten Westeinde 在 Shopify Unite 2019 大会上讨论了Shopify向模块化单体架构的演变。这包括使用设计收益线(design payoff line)来决定何时进行此更改,如何实现更改,以及为什么将微服务排除在目标架构之外。


一个关键的结论是,单体不一定是一个糟糕的架构,它具有许多优点,比如单个测试和部署管道。在项目开始时,当必须快速交付新特性时,这一点特别有用。只有在跨越了“设计收益线”时,也就是糟糕的设计阻碍特性开发的那一点,才应该开始改进架构。就 Shopify 而言,改进其架构并不意味着转向微服务,而是转向模块化单体架构。这结合了单体(例如单个测试和部署管道)和微服务(例如代码模块化和解耦)的优点。


Westeinde 认为,单体架构是一个很好的项目起点,他说:“其实,我建议新产品和新公司开始时使用单体架构。”她列举了其中的一些优点:


  • 一个项目包含所有代码;

  • 只有一个代码库,测试和部署都很简单;

  • 所有数据都可用,无需跨服务传递;

  • 一组基础设施。


由于这些优点,Shopify 一开始只是一个小型的 Ruby on Rails 单体,随着时间的推移,逐渐发展成为一个非常大的代码库。当这种情况发生时,它意味着 Shopify 开始变得不可维护,并且因此很难交付新特性。例如,更改一段代码会对看似无关的代码造成意想不到的副作用,并且构建和测试应用程序花费的时间太长。


Westeinde 援引 Martin Fowler 的设计耐力假说(design stamina hypothesis)解释说,是时候重构他们的架构了——一旦功能开发被糟糕的设计所阻碍,设计收益线就会被跨越,这意味着投入资源来修复它是有意义的。


最初,Shopify 将微服务视为一种可选的、更易于维护的架构。然而,由于分布式系统的复杂性,它被排除在外,取而代之的是更易于维护的单体架构:


我们意识到,我们喜欢单体所有的东西,代码都在一个地方,而且向一个地方部署。我们遇到的所有问题都是由代码中不同功能之间缺乏界限所直接导致的。


Westeinde 解释说,他们意识到他们的设计目标是提升系统的模块化,比如使用微服务,同时保持一个单一的可部署单元,像一个单体。为了实现这一点,Shopify 采用了模块化的单体模式。这使得代码之间有了边界,但要使代码都在同一个位置并且部署到同一个位置。迁移路径如下:


  • 代码重组:最初,代码的组织方式类似于典型的 Rails 应用程序,顶层部件以技术组件命名,如控制器。这被更改为基于业务功能进行组织,如“账单”和“订单”,从而更容易定位代码。

  • 隔离依赖关系:每个业务组件彼此隔离,然后通过公共 API 供外部使用。他们内部开发了一个名为 Wedge 的工具,它跟踪每个组件的隔离情况。它构建一个调用图,然后计算出哪些调用(比如跨组件的调用)违反了规则。

  • 强制边界:一旦每个组件都实现了 100%的隔离,它们之间就有了强制的边界。其思想是,当代码试图访问它没有显式依赖的组件的代码时,就会出现运行时错误。以这种方式声明依赖关系也将使它们在依赖关系图中可视化。


最后,Westeinde 解释说,这个例子很好地说明了架构如何根据业务需求发展:


良好的软件架构是一项不断演化的任务,而应用程序的恰当解决方案完全取决于你的操作规模。


完整的演讲可以在网上观看,也有相应的博客文章


原文链接:


How Shopify Migrated to a Modular Monolith


2019-08-09 08:002678
用户头像

发布了 849 篇内容, 共 591.1 次阅读, 收获喜欢 1605 次。

关注

评论

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

MyEMS开源能源管理系统核心代码解读025

开源能源管理系统

开源 代码解读 能源管理系统

通过最严时序标准,再登产业图谱榜首,TDengine 在可信数据库大会荣获双荣誉

TDengine

tdengine 时序数据库 tsdb

留资率翻倍、承接率达85%,天润融通让AI去接待客户,效果更好了

天润融通

捷途汽车全球总部新落子,彰显品牌势能 聚力跨越3.0时代

科技热闻

CST软件2023版新功能介绍1:EMI接收机仿真

思茂信息

cst cst操作 cst电磁仿真 CST软件 CST Studio Suite

麻醉科主任为何不再深夜被叫醒?

斯科信息

斯科信息 RFID技术 RFID智能药柜

区块链Web3系统开发的技术框架

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

可调量子神经网络在离子阱与超导硬件上的基准测试

qife122

机器学习 量子计算

基于跨话语重评分的包容性语音识别技术

qife122

语音识别 图神经网络

强化学习在广告推荐中的技术应用

qife122

推荐系统 强化学习

看阿里云操作系统控制台如何一招擒拿网络丢包

阿里云基础软件

操作系统

等保服务定义以及流程详解-行云管家

行云管家

网络安全 等保 等保测评

得物向量数据库落地实践

得物技术

数据库

速看!最新学历厂名单曝光!

王磊

Sentieon 项目文章 | 偏远社区原住民澳大利亚人的血型基因组图谱

INSVAST

基因数据分析 Sentieon 变异检测 基因变异检测 生信分析服务

小白也能做OS运维:阿里云操作系统控制台助你轻松解决三大运维难题

阿里云基础软件

操作系统 系统运维 智能运维 运维痛点

7 月热搜精选

KaiwuDB

JetBrains TRAE 插件上线 cue 能力,立即体验

北京中暄互动广告传媒有限公司

TRAE + Milvus MCP,现在用自然语言就能搞定向量数据库部署了!

北京中暄互动广告传媒有限公司

火山引擎 EIC 解析:构建以 KVCache 为中心的推理新基建

北京中暄互动广告传媒有限公司

《BOE解忧实验室》第四季重磅回归:以创新科技点亮中国地标

爱极客侠

区块链Web3系统的开发方案

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

MyEMS开源能源管理系统核心代码解读024

开源能源管理系统

开源 开源能源管理系统

哈尔滨工业大学教授苗东菁:AI Agent 与多模数据库

数新网络官方账号

HarmonyOS SDK使能美团高效开发,打造优质创新应用体验

HarmonyOS SDK

HarmonyOS NEXT HarmonyOS SDK应用服务

“大模型”技术专栏 | 和鲸 AI Infra 架构总监朱天琦:大模型微调与蒸馏技术的全景分析与实践指南(上)

ModelWhale

大模型 AI教育 和鲸

ARR 2.8 亿美元,AI 财务助手 Cleo 新增主动 AI 和语音交互;面向实时响应场景,混元开源四款小模型丨日报

声网

熔断器+重试机制,微服务容错的终极武器?一线设计实战全解析!

我爱娃哈哈😍

【信创小知识】信创产品是国产的吗?还是进口的?

行云管家

信创 信创国产化 信创化

重塑AI算力底座!阿里云服务器操作系统V4正式发布

阿里云基础软件

AI 操作系统 Alibaba Cloud Linux 阿里云服务器操作系统V4

外卖大战背后,天润融通AI客服系统让回应不再“裸奔”

天润融通

Shopify 是如何迁移到模块化单体架构的?_架构_Andrew Morgan_InfoQ精选文章