在谷歌规模下演进代码库

作者在谷歌从事开发者基础设施工作十余年,参与了构建系统、IDE、重构工具和代码检查器等领域的工作。世界最大代码库之一的演进是一项具有挑战性的任务,看似微小的更改可能会影响数千个文件和从未见过的团队。

在本文中,作者分享了在开发者工具和大规模迁移方面的经验。谷歌的代码库规模庞大且非常一致,只有少数编程语言被允许,语言团队控制规则,代码审查要求全局应用,大家使用相同的工具。这种一致性便于代码共享和复用,但也带来了挑战,如代码和工具的演进。

在代码库中,依赖管理是一大挑战,作者介绍了私有库和代码所有权的概念,通过设置库的可见性,允许团队快速迭代代码而不影响其他团队,同时也简化了代码更新和重构的过程。对于需要共享的库和工具,要平衡协作和控制。

在处理大规模更改时,作者强调了自动化的重要性,包括自动化代码更改(利用 Unix 工具和 shell 脚本等)、自动化拉取请求(通过 Rosie 工具将大规模更改分解为小的可管理部分)和自动化审批(利用全球审批者)。

在长期迁移中,要考虑时间因素,限制已弃用元素的可见性,使用警告(在 IDE 和代码审查界面显示)和预提交检查,同时也需要处理手动工作和常见痛点,如处理不稳定的测试、协调多个团队等。

作者还分享了一些迁移的轶事,如构建系统从 Python 到 Starlark 的迁移、修复构建系统中的 glob 函数以及在 Bazel 中更改文件可见性的经历,这些经历都说明了迁移过程中的挑战和教训。

最后,作者总结道,即使是微小的更改也可能产生意想不到的影响,警告和文档很重要,但真正的执行是必要的,开发者基础设施不仅要保持系统运行,还要让工程师快速而稳定地前进,同时也要注意一致性带来的挑战。

阅读 16
0 条评论