为智能体规模的开发构建 Git 基础设施

GitHub Engineering Blog 2026-10-07T04:57:56+08:00

每天,数百万开发者都在 GitHub 上构建客户依赖的产品、为开源项目做贡献、推进个人项目。多年来,GitHub 的架构一直在稳步演进,以支撑这些工作,也满足依赖它的开发者和组织不断增长的需求。如今,智能体式软件开发(由 AI 智能体参与编码)正在推动下一轮架构转变。开发者和智能体并发地在仓库中工作,而这些仓库每天要接收数百万次提交——这类负载需要一套不一样的 Git 架构。我们正在重建 GitHub 的 Git 基础设施来支撑它们。本文将探讨塑造这项工作的需求,以及背后的设计原则。

当下流量最高的一批负载,体现了我们要支撑的规模。普通仓库与最繁忙仓库之间的差距,比大多数人想象的要大得多。下面是 2026 年 8 月 GitHub 仓库月度活跃度分布的大致情况:

仓库活跃度分布图

活跃度在分布曲线的最末端急剧攀升。8 月,GitHub 上最繁忙的单个仓库大约收到了 10 亿次请求。

除了这些最高流量的负载,GitHub 上 Git 活动的总量也在快速增长:2025 年 9 月到 2026 年 8 月,月事件量翻了一倍多,从 2182 亿次增至 4733 亿次。仅 9 月一个月,开发者和智能体就在 GitHub 上完成了 73.8 亿次提交,是一年前的 5 倍多。

曲线顶端的仓库,展示了智能体开发处在最前沿时是什么样子:大型工程团队运行着繁忙的 CI 流水线,身边还有规模不断扩大的智能体集群。要支撑这些团队,就得构建能承受持续、并发读写的 Git 基础设施,而这样的规模如今很少有仓库能达到。我们正深度投入 Git 基础设施建设,以满足智能体软件开发的需求,为团队打下能承载其最庞大工作负载的基础。

要为这种规模而构建,需要解决几个架构层面的挑战:

这就是为什么快速克隆只能解决部分问题。读取相对容易扩展:增加缓存、增加副本,并把相同字节提供给更多客户端。扩展读取至关重要,但这些工作负载需要的远不止这些。写入要难得多。每次推送都必须持久存储,并在下一个 agent 或 CI 作业能够基于它构建之前,以一致的方式变为可见。

当现有架构遇上新需求

现有架构多年来一直很好地服务着开发者。每个仓库都由 Spokes 存储,它会在多台文件服务器的本地磁盘上保留完整副本,默认是五台。这些本地磁盘速度快,让 Git 操作能以低延迟读取原生仓库数据;额外副本既提供冗余,也能把读取负载分散到不同文件服务器。当一次推送更新某个引用时,三阶段提交协议会通过多数派确认,确保 CI、Web UI 和 API 客户端看到一致的仓库状态。这套组合目前支撑着十亿个仓库。

不过,我们用来保证持久性的机制,也是用来实现扩展的机制。磁盘上的副本就是唯一可信来源,所以增加读取容量,就等于增加一个持久化副本。每个副本都要参与每一次写入,因此一次推送的速度取决于其所在集合中最慢的那个副本。最终结果就是:为了吸收读取负载而增加副本,反而让写入变慢。

对大多数仓库来说,这个取舍运作良好。但到了最高活跃度级别,它就成了一道天花板:增加只读副本会给写入增加开销,丢失一个副本会减少读取容量,而失去多数派则会让写入完全停止。为了满足智能体优先(agent-first)的需求,我们需要把持久性和扩展性拆开,同时不丢掉团队目前依赖的能力。

为最繁忙的场景而建,让所有人受益

我们在重建基础设施的同时,GitHub 仍在持续运行。没有让全世界的代码停下来的维护窗口,也不会要求大家在我们施工期间改变构建软件的方式。我们要应对的是 GitHub 上最苛刻的工作负载:一家在严格监管要求下交付软件的企业,一个要在构建操作系统的仓库里合入变更的团队,以及一个针对单一代码库运行数千个智能体的组织。

为这种规模做工程,会抬高所有人的底线。跨时区审阅志愿者贡献的维护者,和第一次打开拉取请求的学生,都能得到同样更快、更强韧的基础。

新架构还必须保留团队已经在用的各项管控措施。维护者需要分支保护和强制评审,确保未经评审的改动不会进入默认分支。安全团队需要审计日志和仓库可见性,以便排查可疑的访问事件。值班工程师需要可靠的自动化,以及足够的可观测性,来弄清一次部署为何失败。

平台要想在承载最繁重负载的同时继续服务好所有人,下面这几条是我们要遵循的原则:

这项工作将实实在在地提升吞吐量和规模,而团队今天依赖的工作流会照常运行,和现在一模一样——不需要迁移,不需要维护窗口,也不需要 GitHub 上的开发者和组织做任何改动。

这些提升,是在一份本就存在的信任基础上继续加码。让人掌控自己的代码。如果系统帮不上使用它的人和组织的忙,又不在他们的掌控之中,那就不值得去建。随着智能体承担越来越多的工作,代码的所有者依然能够评审、理解并批准这些代码。

实现思路

我们正在构建一套全新的 GitHub 架构,让它能更高效地扩展。思路的核心是把分布式系统的经典设计原则,应用到智能体软件开发的并发与规模场景中。目标是延续全球开源社区和企业已经用 Git 和 GitHub 建立起来的势头,同时保留并调整相关功能与控制机制,满足智能体时代的新需求。

尽量减少协调

一个频繁接收推送的仓库,必须能快速接受并发布更新。协调机制在保障正确性时是有价值的,但过度协调会限制写入吞吐量,让繁忙的仓库变成瓶颈。我们当前的架构在一些本不需要紧密耦合的地方耦合过紧,导致读写扩展时不得不做艰难的取舍。我们正在重新设计系统,只保留 Git 语义真正需要的协调,其余部分独立推进。

只对必须达成一致的部分做协调。

一次推送中真正需要达成一致的,只有引用更新本身。存储底层对象、校验对象连通性、密钥扫描这些工作量大得多,但大部分可以和其他写入并行进行。这样一来,推送的关键路径就缩短到只需要协调的那一小步,其余工作不再拖慢确认返回。

把维护工作移出服务路径。

压缩和垃圾回收是仓库最繁重的操作之一,目前它们和实时 Git 请求跑在同一批主机上。新架构里,由独立的工作进程直接对持久化存储执行维护。繁忙的仓库可以在后台持续优化,而不拖慢推送和拉取。

存储与计算解耦

现在,本地磁盘上的完整仓库副本既充当持久化存储,又充当响应 Git 请求的层。把两者分开,就能各自独立扩展。

扩展读能力,不必增加持久化副本。

在新架构中,读能力由轻量工作节点提供,它们通过缓存数据来响应请求。仓库的权威副本存放在底层的持久化存储中。这样一来,平台就能扛住 CI 任务分发、智能体集群和大规模克隆带来的读请求高峰,而不会给每次推送增加额外负担。

让每一层只做一件事。

权威仓库数据存放在 Azure Blob Storage,它本身就能在 Azure 规模下提供持久性和复制能力。计算层则专注于低延迟和高吞吐。

更快从故障中恢复。

存储和计算耦合时,一台主机故障会同时损失容量和持久性,恢复时还得重建完整的仓库副本。两者分离后,计算节点故障更像一次缓存未命中:替补节点可以立刻开始处理请求,并在流量到来时从持久化存储填充缓存。

按需匹配容量。

计算节点可以随流量变化增减,不必提前按峰值负载预留资源。仓库遇到活动高峰时——比如发布,或者一批新智能体上线——可以临时获得额外容量。高峰过去,这部分容量就会被释放。

这些原则结合起来,让我们能够支撑更高吞吐和更多并发任务,同时不牺牲用户需要的可靠性和管控能力。

接下来

我们正在构建一套架构,目标是提供尽可能高的吞吐量和可靠性。读和写可以独立扩展,系统也能在故障后平稳恢复。在内部基准测试中,它的写入吞吐量最高提升了 35 倍,读容量则能按需自动扩展。

查看原文