AI写代码的速度,已经快到Git服务器扛不住了。
11月2日,OpenAI发布长文《Scaling Git at OpenAI》,宣布自研Git后端Pando全面接管公司monorepo。结果相当惊人:中位push延迟下降近80%,每天传输近1PB的Git数据,高峰时一小时吐出超过57TB的pack文件——其中99%以上直接命中本地磁盘缓存。
这套系统用Rust写成,10周上线。核心架构由一名工程师设计,具体实现交给成队的Codex Agent。它从2026年4月起就承载着OpenAI全部生产流量,工程师全程无感,git push、git fetch照旧。
Git是怎么被Agent冲爆的
问题的源头是Codex。AI Agent让并行开发变成常态:一个工程师手里同时挂着好几个改动,每次push都会触发一串CI任务去fetch同一个commit。
数据说话。相比2024年第一季度,OpenAI monorepo落到master上的commit数量在2026年第三季度暴涨1378%,第四季度的预估涨幅是2442%。每个commit背后是数不清的fetch、clone和CI拉取。
到2025年底,系统开始报警:fetch和push越来越慢,merge频繁失败,可靠性一度跌破90%。
OpenAI的诊断结论很有意思:瓶颈不在Git本身,而在”我们伺候Git的方式”。Git诞生于二十多年前内核社区通过邮件交换补丁的年代,它的设计假设是几百个开发者协作,而非几万个Agent同时开工。
Pando砍掉了两个”天经地义”
传统Git服务器守着两条铁律,Pando把它们全部推翻。
第一条是仓库级一致性。传统做法是所有分支的ref更新全局排队,你推一个不相关的特性分支,也得等别人推完。Pando改用因果一致性(causal consistency):每个分支独立串行,只有推同一个ref才会真正冲突。代价是读者同时看多个分支时,可能看到不同时间点的状态。OpenAI认为这笔交易划算。
第二条是每个客户端单独打包。传统服务器每来一个fetch就现场打包一份packfile,计算开销巨大。Pando把每次push产生的pack当作不可变blob存储,引用版本放进可扩展的元数据仓库。一次push只需O(1)次元数据读写,一次fetch需要O(log Δ)次读取,Δ是引用版本差。
分支广告也做了手术。几百万个分支的完整ref列表能超过100MiB,Pando只广播trunk分支作为特性分支push的基准。任何拥有trunk历史的读者都能从1个已存储的pack直接拉取该分支——monorepo里的中位pack体积因此压到20KiB以下。
读取侧走的是Git协议里的老特性packfile-uri:服务器返回下载链接,内联pack为空。一个叫Express的分发服务负责区域缓存,用一致性哈希调度,命中率超过99%。
垃圾回收也被换掉了。每次push产生一个”L0″pack,后台任务把它们按几何级数归并成更大的cover,思路类似LSM树的compaction,目前用到L4层。cover本身构成跳表结构,pack选择在对数时间完成。
和GitHub、Anthropic的路线之争
Pando不是孤例,三家AI公司都在重造版本控制。
GitHub的Spokes走三阶段提交加仲裁(quorum)的路子,保持Git客户端兼容。Anthropic的Scion更激进,干脆自创scn客户端,服务端直接提交commit,引用靠compare-and-swap更新。Pando的差异化在于按分支因果一致性——写入冲突面最小,同时客户端零改动。
要注意,Pando并未开源。重复push非trunk分支时会重发历史,p99的pack体积在3MiB以内,这个尾巴还在。OpenAI承诺的是把客户端改进回馈到上游Git项目,它维护的fork里已有部分补丁。
开发者能抄什么作业
多数团队没有1PB的日流量,但Pando的账本里有三条通用经验。
一,AI Agent的写入量级早就超出了直觉。一个10人团队接上几个Coding Agent,分支数和CI fetch量可能翻一个数量级,Git服务器的压力测试要按Agent数量做,不能按人头做。
二,弱一致性换吞吐值得认真评估。分支级隔离在代码场景几乎无痛,读端偶尔看到分支间的时差,代价远小于全局锁排队。这套思路可以平移到构建缓存、 artifact仓库等一切”多写多读”的基础设施。
三,不可变存储加缓存是复用之王。把每次写入变成不可变对象、用版本差描述增量、把热点数据推到边缘——Pando在普通云虚拟机上打满了10Gbps带宽,只用了少量CPU核心。快,靠的是架构,不是堆机器。
Git二十多年没换过内核哲学,第一个让它松动的,是每天提交数千个commit的AI Agent。你的CI配置,准备好迎接Agent时代的push风暴了吗?
苏公网安备32010502011527号
发表回复