随着 OpenAI 的开发速度加快,公司的 monorepo 面临着巨大的扩展挑战。Codex 和其他 AI 工具的集成使工程师能够并行执行更多工作,导致来自研究任务和 CI 环境的并发推送、合并和获取请求激增。这些需求最终导致现有的源码控制系统陷入困境,由于获取缓慢和合并失败,可靠性偶尔会降至 90% 以下。为了解决这个问题,OpenAI 工程师构建了 Pando,这是一个全新的 Git 仓库后端,旨在处理“代理规模”的工作——在这种模式下,人类工程师和 AI 代理同时与代码库进行交互。

Pando 的设计目标是对用户透明;它在驱动 monorepo 的同时,不需要工程师更改现有的 Git 工作流或工具。该系统通过重新思考传统 Git 服务中的两个核心限制来实现水平扩展。首先,它独立协调分支的更新。在许多标准系统中,所有对仓库的写入都被强加单一顺序,这意味着向一个分支的推送可能会等待与无关分支的推送。Pando 通过允许无关分支并行更新来消除这一瓶颈。其次,Pando 通过在不同客户端之间复用 'packfiles'(Git 用于多个对象的压缩格式)来优化读取吞吐量。服务器不再为每次获取生成唯一的 packfile,而是向多个客户端提供相同的字节,显著降低了 CPU 和磁盘 I/O。

显示 Git 对象如何通过复制先前 blob 的指令存储在 packfiles 中的图表。
一张图表说明了 Pando 如何通过将新对象表示为从 packfile 中复制现有数据的指令来优化存储。openai.com

文章解释了 Pando 如何通过复用 packfiles(Git 用于多个对象的压缩格式)来优化读取吞吐量。

显示主干分支和主题分支随着连续的 packfiles 分叉和前进的图表。
一张技术图表显示了 Pando 如何处理分支分叉和 packfile 依赖以保持可扩展性。openai.com

文章描述了 Pando 如何独立协调分支更新以消除传统 Git 服务中的瓶颈。

为了实现这一规模,Pando 采用了“因果一致性”模型,这涉及关于全库状态的特定权衡。由于 Pando 独立协调分支,它不提供整个仓库中所有引用在单一一致时间点的快照。例如,如果客户端在两个不同分支被更新时执行全量克隆,客户端可能会看到一个分支处于版本 A,另一个分支处于版本 B,即使它们在技术上是“同时”更新的。然而,Pando 保持了单个引用的可串行化,确保单个分支的更新保持一致。在生产环境中,这种架构将中位推送延迟降低了近 5 倍,目前每天处理近 1 PB 的 Git 数据。虽然该系统提供了高吞吐量,但目前利用该系统的具体 AI 代理数量仍未披露。