写点什么

谷歌的多代码库开发

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

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

关注

评论

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

AI口语练习APP的运营

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

软件外包公司 AI口语练习 AI英语学习

Dify基于TiDB的数据架构重构实践

TiDB 社区干货传送门

Fabric8 Kubernetes 教程——job、service、ingress、statefulSet、daemonSet

FunTester

伟大的德比:皇家贝蒂斯与塞维利亚对阵史

新消费日报

夏令时的坑:你的数据库真的能正确处理时间跳变吗?

TDengine

数据库 tdengine 时序数据库

成功案例丨Altair Inspire Cast 助力节省 80%时间 :从模具设计到完美铸件

Altair RapidMiner

制造业 altair 汽车零部件 仿真设计 Inspire

告别数据难题:淘宝商品评论API带来高效解决方案

tbapi

淘宝API 淘宝商品评论采集 淘宝商品评论API 天猫商品评论API

MySQL遇到AI:字节跳动开源 MySQL 虚拟索引 VIDEX

字节跳动开源

虚拟索引技术 解耦架构 可扩展接口 生产验证 多形态部署

做定时任务,一定要用这个神库!!

Immerse

JavaScript node.js 定时

2025长三角国际物联网展

AIOTE智博会

物联网展览会 物联网展会 物联网博览会 物联网展

TiDB 可观测性解读(二)丨算子执行信息性能诊断案例分享

PingCAP

数据库 算子 TiDB

英特尔先进封装:助力AI芯片高效集成的技术力量

E科讯

团队任务分工不明确?用领歌这个功能试试!

axe

项目管理工具

PB 级大数据新势力!Apache SeaTunnel 亮相 Cloudberry 杭州 Meetup(附报名)

Apache SeaTunnel

Java 开发中的 AI 黑科技:如何用 AI 工具自动生成 Spring Boot 项目脚手架?

飞算JavaAI开发助手

java spingboot #程序员

国产化不是选择题,而是必答题

TiDB 社区干货传送门

无需公网IP聚水潭ERP远程调用仓库监控,贝锐花生壳只需简单3步

贝锐

内网穿透 ERP

订单支付系统难搞?AI 生成 Java 支付状态机代码 (含超时关单 + 回调校验)

飞算JavaAI开发助手

YashanDB出席胶东CIO十周年峰会 自研数据管理方案驱动智造升级

极客天地

普通电脑接入去中心化云算力,玩转3A游戏大作将触手可及

PowerVerse

区块链+ 算力 去中心化云算力

技术详解|DNS隧道及无监督异常检测

日志易

DNS隧道 日志易

多语言民宿/酒店预订管理系统/小程序网站开发建设

网站,小程序,APP开发定制

【开始报名啦】4 月 12 日 TiDB 社区活动在南京!传统技术栈替换和 AI 浪潮正当时,面向未来的国产数据库怎么选择?转发海报参与新款双肩包抽奖!

TiDB 社区干货传送门

秒级响应!淘宝商品列表 API 一键拉取全品类商品数据

tbapi

淘宝API 关键词搜索淘宝接口 淘宝商品列表接口 淘宝商品列表API

电商平台如何用"比价API"省下百万运营成本?实战经验揭秘

代码忍者

API接口平台

技术管理者,首先应该学会预期管理

老张

团队管理 职场成长

Web3可能是为AI Agents(代理)构建的

PowerVerse

AGI #Web3 AI Agents

Netty源码—编解码原理(一)

不在线第一只蜗牛

netty

告别手写 SQL!AI 工具如何自动生成 Java 数据库 ORM 代码?

飞算JavaAI开发助手

MaxCompute MaxFrame正式推出AI Function功能,一键调用大模型处理海量数据!

阿里云大数据AI技术

大数据 MaxCompute Qwen DeepSeek AI Function

腾讯云顾问×DeepSeek:全链路生图、ChatBI等功能全新发布

科技热闻

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