写点什么

谷歌的多代码库开发

  • 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:282594
用户头像

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

关注

评论

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

AWS EC2、阿里云ECS、腾讯云CVM初步对比

穿过生命散发芬芳

腾讯云 阿里云 AWS

Topaz Photo AI 2.1.2 for Mac(图像处理AI软件)

展初云

Mac 图像处理 Topaz Photo AI

「AI技术图像编辑软件」Luminar Neo for Mac

彩云

Luminar Neo AI技术图像编辑软件

新网的机房写的是BGP链路,什么是BGP链路啊?

Geek_f19a80

服务器

一款带数字传输信号的OVP芯片

芯动大师

After Effects 2024 for Mac(视频特效制作工具) v24.0.3中文版

展初云

Mac AE After Effects 视频特效制作软件

Apeaksoft Data Recovery for Mac中文版 数据恢复工具

彩云

数据恢复 Apeaksoft Data Recovery

智慧工地管理平台源码

源码星辰

工地 智慧工地

亚马逊Amazon OpenSearch Serverless"利刃在手,‘向量’八方"

淼.

观测云助力跨境电商大幅提高加载性能

Yestodorrow

可观测性 跨境电商 性能提升 可观测性用观测云

亚马逊云科技AI创新应用下的托管在AWS上的数据可视化工具—— Amazon QuickSight

淼.

【云服务器选型指南:五大关键】

云服务器 安全性 云服务器ECS

使用 Filebeat+Easysearch+Console 打造日志管理平台

极限实验室

Filebeat console 日志管理 easysearch

Crescendo Masters for Mac「乐谱编写工具」

加油,小妞!

音乐制作 Crescendo Masters

不要以模块化为理由去实施微服务

neverwinter

架构 微服务 模块化

WordPress 基于亚马逊云的部署实践(一)- 架构设计

wangkx

AWS 亚马逊云 Amazon EC2 云服务器

2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵。 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5

福大大架构师每日一题

福大大架构师每日一题

Python连接es笔记二之查询方式汇总

Hunter熊

Python elasticsearch Elasticsearch-dsl

Media Encoder 2024 for mac(媒体转码器) v24.0.3中文版

展初云

Mac Media Encoder 媒体转码软件

PDF Expert for mac(pdf编辑工具) v3.7.1中文激活版

展初云

Mac Mac软件 pdf编辑工具

Go、容器以及Linux调度器

俞凡

golang

openAi基于java jtokkit实现分词

智慧源点

jtokkit

Photo Image Editor Pixelstyle 图像编辑器

加油,小妞!

图像编辑

IP代理安全吗?如何防止IP被限制访问?

Geek_bf375d

Premiere Pro 2024 for mac(视频编辑工具) v24.0.3中文版

展初云

Mac PR 视频编辑软件 Premiere Pro 2024

Mac电脑图像编辑器 Photo Image Editor Pixelstyle激活版

胖墩儿不胖y

图像编辑 Mac软件 编辑图像

认知,是成长最大的桎梏

老张

深度思考 个人成长 认知

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