AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

亚马逊如何在软件开发中使用护栏

  • 2025-08-05
    北京
  • 本文字数:1982 字

    阅读完需:约 7 分钟

大小:955.38K时长:05:26
亚马逊如何在软件开发中使用护栏

Carlos Arguelles 在旧金山QCon大会上谈到了亚马逊在工程生产力方面的拐点,他解释说,将测试左移有助于及早发现问题。他建议使用诸如代码审查和覆盖率检查之类的护栏。你的代码库策略,是单体仓库还是多体仓库(monorepo 或 multirepo),将影响需要设置的护栏。

 

当一家公司是新成立的,它必须快速行动,所以设置的护栏非常少。Arguelles 说,它通常也足够小,以至于你认识所有接触代码库的人。随着你的客户群不断增长,越来越多的人依赖你的产品,采纳最佳实践并确保每个人都遵守变得越来越重要,他补充说。这些护栏不是免费的:它们增加了摩擦,降低了你在某些地方快速行动的能力,所以这里通常有一个权衡。

 

随着公司的发展,对定制开发工具进行投资可能是必要的,正如 Arguelles 在《工程生产力的拐点》一文中所解释的那样:

 

最初,标准工具就足够了,但是随着公司在工程师、成熟度和复杂性方面的扩展,行业工具可能不再满足需求。拐点,如危机、高速增长或进入新市场,通常会触发这些投资,为提高生产力和卓越运营提供机会。

 

亚马逊的软件开发生命周期始于一个内部开发人员循环,工程师在自己的工作空间中对代码片段进行迭代。默认情况下,工程师在每次创建构建时运行单元测试,收集代码覆盖率并执行各种检查,Arguelles 说。当他们提交代码审查时,代码审查工具会对该代码运行一些额外的测试。

 

当这些验证通过,并且工程师从他们的审查者那里得到认可后,代码就会被推送到代码库,CI/CD 将代码通过各种测试阶段并对更改进行越来越全面的测试,包括负载和性能测试,最后才会推送到生产环境。Arguelles 解释说:

 

我们期望大多数代码更改在提交后几小时内就能进入生产环境,因为所有的护栏应该是自动化的。一旦它们进入生产环境,金丝雀会进一步验证这些更改。

 

Arguelles 提到,越早发现问题越好。随着你的代码库的增长,将测试左移,以便在内部开发循环(提交前)而不是外部开发循环(提交后)发现问题变得越来越重要:

 

这是因为如果提交并合并了一段糟糕的代码,它现在会阻塞你周围的 N 个开发人员,直到它回滚或修复,并且随着系统的增长,N 也会增长。

 

这是因为如果提交并合并了一段糟糕的代码,它现在会阻塞你周围的 N 个开发者,直到它被回滚或修复,随着你的系统的增长,N 也会增长。

 

Arguelles 说,将测试左移并不简单,因为为了有效地、可靠地对未发布代码运行端到端集成测试,你需要投资于临时的、隔离的测试环境。

 

亚马逊做出的一个关键决定是,他们在一个多仓库世界中运营,这意味着每个团队都有自己的微仓库。这与其他公司选择整个公司的单体仓库(如谷歌)形成鲜明的对比。

 

谷歌使用单体仓库(monorepo),大约有 100,000 名工程师使用一个没有分支的单一存储库。每个人都必须致力于存储库的健康,因为糟糕的代码提交的影响范围是巨大的;你真的可以阻止成千上万的人,Arguelles 说。提交前的端到端测试不仅仅是“锦上添花”,而是对业务至关重要。

 

另一方面,Arguelles 提到,亚马逊选择走多仓库的路线,每个团队基本上都有自己的仓库。这作为一种自然的爆炸半径减少机制:糟糕的提交可能会破坏单个微仓库,但有更多的护栏来防止它蔓延到其他团队的微仓库。

 

Arguelles 提到,在大型系统中存在着不可避免的复杂性。你选择的开发方式决定了你需要在软件开发生命周期的哪个阶段来处理这种复杂性。这两家公司都无法避免这个问题,但他们要么在提交前,要么在提交后解决这个问题,他总结道。

 

InfoQ 采访了Carlos Arguelles,讨论了护栏以及微仓库与单体仓库的问题。

 

InfoQ:亚马逊的护栏是什么样的?

 

Carlos Arguelles:例如,当亚马逊在 2009 年还是一家较小的公司时,你可以快速 ssh 到生产主机上调查问题,查看日志等。任何手动交互本质上都是一件危险的事情——想象你输入了错误的命令或不小心多按了一个“0”,导致主机崩溃或数据丢失。所以我们设置了护栏,如果你想在生产主机上运行命令,它需要经过代码审查,并且有一个可审计的操作记录。

 

另一个例子是,你不能在没有经过代码审查并获得另一个人的认可的情况下直接将代码提交到仓库。或者我们现在根据代码覆盖率下降来设置门禁,以确保所有进入生产环境的代码都满足最低测试覆盖率标准。这样的工具提供了可扩展的方式来编码和执行最佳实践。

 

InfoQ:与单体仓库相比,使用微仓库工作有哪些影响?

 

Arguelles:亚马逊和谷歌是我工作过的两个地方,由于两家公司几十年前做出的基本决策而存在显著的不同:谷歌使用单体仓库,而亚马逊使用微仓库。

 

这个决策影响了需要建立的护栏。对于亚马逊来说,端到端的预提交测试是“锦上添花”,但它不是业务的关键。

 

然而,亚马逊决定使用微仓库并不是没有代价的。在单体仓库中,每个服务自然集成,而在多仓库的世界中,你需要协调变化如何安全地从一个仓库级联到另一个仓库。

 

原文链接:

https://www.infoq.com/news/2025/07/guardrails-software-development/

2025-08-05 15:001

评论

发布
暂无评论

浅谈CAF云应用框架

inBuilder低代码平台

框架 构架 云应用

一座重庆工厂,智能与制造的“两江之约”

脑极体

AI

AutoMQ x Iceberg SG Meetup: Table Topic 新特性统一流与分析首次公开

AutoMQ

云计算 kafka iceberg 活动预告 AutoMQ

2024全球人形机器人领域深度调研和行业前瞻报告

机器人头条

特斯拉 大模型 人形机器人 具身智能

奇奇怪怪的编程语言:Malbolge

不在线第一只蜗牛

编程语言

Python随机抽取Excel数据并在处理后整合为一个文件

不在线第一只蜗牛

Python Excel

园区数字化管理系统(源码+文档+部署+讲解)

深圳亥时科技

企业的海外网络访问需求怎么解决?

Ogcloud

SD-WAN SD-WAN组网 SD-WAN国际专线 海外网络访问 海外网络连接

签约快讯|天润融通签约问界

天润融通

多功能代码编辑器BBEdit for Mac 激活版

小玖_苹果Mac软件

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(8)

HarmonyOS SDK

harmoyos

客户服务新突破,天润融通助力电动车企业实现数智化转型

天润融通

(Vue3结合ThreeJS开发3D)在线三维CAD中加载和保存STEP模型

WEB CAD SDK

如何以MLOps保障时效表达稳定性|得物技术

得物技术

算法 供应链

威睿三电全面开花,助力极氪问鼎销冠

科技热闻

天润融通:为国内外行业巨头提供定制化IT Service解决方案

天润融通

垃圾清理应用卸载工具CleanMyMac X for Mac

小玖_苹果Mac软件

CDN加速:优化网站服务器访问速度

Ogcloud

CDN 网络加速 CDN加速 网络加速服务 CDN网络加速

亚马逊如何在软件开发中使用护栏_后端_Ben Linders_InfoQ精选文章