在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

谷歌的多代码库开发

  • 2015-05-26
  • 本文字数:1045 字

    阅读完需:约 3 分钟

通常,由于存在外部依赖,复杂的软件项目会跨多个代码库。谷歌 WebRTC 项目的工程师 Patrik Höglund解释说,这本身就是一项挑战。他还描述了谷歌在开发像 Chrome 那样使用了若干第三方库的软件时采用的方法。

管理多代码库的复杂性源于跟踪外部依赖变化的必要性,尤其当它们的代码库快速变化的时候。在这种情况下,不能只是简单地跳过外部依赖更新,因为这会错过重要的补丁和新特性。另一方面,如果不经常更新外部库,那么就会面临这样的风险,累积的变化破坏了应用程序,需要很大的代价才能跟上所有的变化。

在谷歌,引入新的依赖版本称为“滚动(rolling)”。滚动是一个过程,需要修改 Chrome 的代码来适应任何新的 API,而这反过来会破坏 Chrome 的测试套件。当然,这种破坏直到运行整个测试套件时才能知道,那太晚了。为了避免破坏 Chrome 测试套件,开发人员使用专用的“机器人(bots)”(持续构建 / 测试机器)来检测滚动依赖可能引发的任何问题。

这样的机器人称为“FYI 机器人”。它们不会使用特定依赖的固定版本,即 WebRTC,而是使用 WebRTC HEAD 来代替。运行机器人可以得出下面任意一种结果:

  • 机器人运行成功(绿色):这意味着新的滚动很可能可以顺利进行。
  • 机器人编译失败:这意味着必须修改 Chrome 的代码来适应一些新的 API。
  • 机器人测试失败(红色):这意味着存在一些语义变化或者新发现的 Bug 需要处理。

为了使这个过程运转的更顺畅,谷歌开发人员新增了一种策略,用于减少 FYI 机器人构件遭破坏的机会。机器人遭破坏会产生意想不到的结果,直到 Chrome 的代码修改完成,可以适应新的 API 了,那些机器人才会返回有意义的信息,而这要持续几天的时间。为了解决这个问题,开发人员开始遵循“ API 基本指令(API Prime Directive)”原则,确保在改进组件时不破坏现有的客户端。一种实现方式是,不删除任何现有的 API,而只是简单地增加所需的新 API。比如,我们有一个方法签名:

复制代码
class WebRtcAmplifier {
...
int SetOutputVolume(float volume);
}

让我们考虑代码需要变成下面这样情况:

复制代码
class WebRtcAmplifier {
...
int SetOutputVolume(float volume, bool allow_eleven1);
}

为了不破坏任何客户端,我们使用下面的 API:

复制代码
class WebRtcAmplifier {
...
int SetOutputVolume(float volume);
int SetOutputVolume(float volume, bool allow_eleven);
}

借助这种策略,谷歌开发人员可以确保他们的机器人总是绿色的,如果它们在任何时候变成红色的,那么他们就知道更新应该回滚。

查看英文原文: Multi-repository Development at Google

2015-05-26 09:282642
用户头像

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

关注

评论

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

软件测试 | 测试开发 | 测试人生 | 疫情之下涨薪70%从手工转到测试开发,是种什么样的体验?

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

测试

软件测试 | 测试开发 | 使用 Zabbix + Grafana 搭建服务器监控系统

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

测试

可适配多企业需求,华为云等保合规安全解决方案选择灵活!

科技之光

2022 云栖大会 | 开源人说预约:听百味技术人生,品激荡开源江湖

阿里云大数据AI技术

阿里云 开源

80Gbps 双向带宽,120Gbps 疾速传输,英特尔携新一代 Thunderbolt 引领行业快步向前

科技之家

何为云管平台?有什么作用?哪家好?

行云管家

云计算 云主机 云管理 云成本

Docker | 容器数据卷详解

甜点cc

Docker 前端 10月月更

新来个技术总监,仅花2小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!

程序知音

Java 架构 多线程 多线程与高并发 后端技术

8K AV1视频解码大战:Intel神奇、NVIDIA差点、AMD无语

科技之家

诺亚财富 X Hologres : 统一OLAP分析引擎,全面打造金融数字化分析平台

阿里云大数据AI技术

大数据 数据分析 企业号十月 PK 榜

Spring Boot 应用使用 application.yml 和 application.properties 的区别

汪子熙

Java mvc spring 后端开发 10月月更

ES6 Promise、Generator与async简单介绍与应用

木偶

前端 ES6 异步 10月月更

技术强、资源多,华为云等保合规解决方案助力企业快速过等保!

科技之光

2022 云栖大会 | 一体化大数据智能峰会预约开启

阿里云大数据AI技术

大数据 阿里云 开源

JavaScript知识点总结

木偶

前端 js 10月月更

股票价格跨度

掘金安东尼

算法 10月月更

JS知识点梳理之作用域、作用域链、柯里化、闭包

hellocoder2029

JavaScript

万物皆可DAO?一文带你全方位解读DAO类型

One Block Community

区块链 开发者 治理 DAO web3、

云堡垒机相关概念汇总说明-行云管家

行云管家

云计算 网络安全 数据安全 堡垒机

JS词法环境和执行上下文

hellocoder2029

JavaScript

大数据开发学习周期是多久

小谷哥

你的下一个电脑桌面,为何是云桌面?

科技之光

基于网络安全的Docker逃逸

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

“程”风破浪的开发者|OpenHarmony设备开发-开发板介绍

坚果

OpenHarmony 10月月更 “程”风破浪的开发者

MySQL十种锁,一篇文章带你全解析

一灯架构

Java 10月月更

一文详解MySQL事务底层原理,全是干货,推荐收藏

一灯架构

Java 10月月更

Wallys/IPQ4018/IPQ4028 2x2 2.4Ghz 2x2 5Ghz Industrial-grade //wifi5 Support 11ABGN/AC

wallys-wifi6

IPQ4018 IPQ4028

如何通过C#/VB.NET重命名Excel表格并设置选项卡颜色

在下毛毛雨

C# .net Excel 重命名工作表

js对象和原型、原型链的关系

hellocoder2029

JavaScript

细说JavaScript闭包

hellocoder2029

JavaScript

谷歌的多代码库开发_DevOps & 平台工程_Sergio De Simone_InfoQ精选文章