写点什么

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

  • 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:004246

评论

发布
暂无评论

英特尔亮相MWC 2024,助力企业通过现代化以实现盈利

E科讯

如何做代币分析:以 TRX 币为例

Footprint Analytics

加密货币 Token 代币

遇见您的私人法律顾问:智能法律大模型,智能解答您的法律困惑

汀丶人工智能

人工智能 智能问答 法律大模型

吴恩达AI系列第一课:教你如何利用AI创建一个披萨店客服

CodeBuddy

Cloud Cloud Studio 人工智能、

都说了别用BeanUtils.copyProperties,这不翻车了吧

不在线第一只蜗牛

Java 数据库 后端 Java后端

人工智能引领软件测试新的巨大变革

霍格沃兹测试开发学社

SD-WAN与MPLS哪一个是最优选择?

Ogcloud

SD-WAN MPLS SD-WAN组网 SD-WAN服务商 SDWAN

优雅使用前端枚举Enum,符合国标的那种!

不在线第一只蜗牛

前端 开发 前端框架 Enum

文心一言 VS 讯飞星火 VS chatgpt (203)-- 算法导论15.3 2题

福大大架构师每日一题

福大大架构师每日一题

AI与人类联手,智能排序人类决策:RLHF标注工具打造协同标注新纪元,重塑AI训练体验

汀丶人工智能

大模型 智能标注 RLHF

火山引擎“数据飞轮”助力教育行业持续优化产品

极客天地

强大好用的shell:什么是shell?

小魏写代码

面试官:说一下红锁RedLock的实现原理?

王磊

Java 面试

为多渠道销售集成商品API接口的正式步骤指南

Noah

解锁财务信任,掌握企业业务合作中的倾听艺术

智达方通

业财融合 全面预算管理 财务管理 经营管理

SD-WAN技术简化企业网络架构的关键优势

Ogcloud

SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商 SDWAN

SATX合约代币矩阵公排系统开发详情

l8l259l3365

华为云携十大系统性创新亮相巴塞罗那 打造最适合AI的基础设施

华为云开发者联盟

云计算 AI 华为云 华为云开发者联盟

unsubscribe:Angular 项目中常见场景以及是否需要 unsubscribe

OpenTiny社区

前端 angular

金三银四,聊一聊测试跳槽/面试的必备技能

霍格沃兹测试开发学社

打破购物局限!了解闲鱼商品详情关键词搜索电商API接口,挖掘不一样的购物乐趣!

联讯数据

SD-WAN在银行的应用:降低维护成本、提升网络安全

Ogcloud

SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商 SDWAN

为什么说第三代指标平台的本质是做 “轻” 数仓?

Aloudata

ETL 指标平台

软件测试学习笔记丨Docker网络模式与Docker-compose介绍

测试人

软件测试 测试开发

deepin Meetup成都站来了!一起聊聊deepin-IDE 2.0,还有礼品可以拿!

nn-30

flutter Linux 操作系统 linux开发 deepin

智能护航:人工智能引领软件测试新革命

测吧(北京)科技有限公司

测试

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