Claude Code 学习站

代理编码让CI吃不消:Anthropic重构测试影响分析实录

Anthropic分享代理编码导致CI负载六个月增长25倍后,如何从打补丁走向无状态重构测试影响分析系统的经历与教训。

本页目录6
要点速览
  • Claude编写了80%的代码后,PR审查被加速,压力随即转移到CI,六个月内CI工作量增长25倍,测试数量增长10倍
  • 原有测试影响分析系统由单进程的Listener(记录测试结果)和Selector(据历史数据挑选要跑的测试)组成,无法水平扩展
  • 连续三次打补丁(加机器、按包分片、每日重启)效果依次从70天缩短到29天再到不到1天,治标不治本
  • 根本解法是把Listener改造成无状态worker、用可追加的日志(journal)存结果、由独立消费进程汇总,从而实现水平扩展
  • 重设计只用了一名工程师3周时间,远低于一年前动辄一个季度的量级,说明晚做不如早做
  • 作者建议团队在做架构规划时就假设两个季度内负载会达到25倍,并从一开始就让关键服务无状态、避免单点

本文是对 Anthropic 官方博客《Agentic coding is straining CI. Here's how we scaled test impact analysis at Anthropic》的中文要点摘要,完整内容以原文为准:https://claude.com/blog/agentic-coding-is-straining-ci-heres-how-we-scaled-test-impact-analysis-at-anthropic

背景:代码写得快了,CI 顶不住了

随着 Claude 深度参与日常开发,Anthropic 内部工程团队观察到一组明显的增长曲线:

  • 六个月内 CI(持续集成)工作量增长了 25 倍
  • 相比 2021–2025 年,工程师人均每季度代码提交量增长 8 倍
  • Claude 编写的代码占比达到 80%
  • 代码库中的测试数量增长 10 倍
  • 而工程师人数基本没变

文章的核心判断是:「写代码不再是瓶颈,一旦 PR 审查被加速,压力就会转移到 CI 上」。也就是说,agentic coding 把开发流程前端(写代码、review)提速后,后端的测试执行系统首先成为新瓶颈。

原有架构:Listener + Selector

Anthropic 用于减少无谓测试运行的「测试影响分析」系统,原本由两部分组成:

  • Listener:记录每次 CI 运行中各测试的执行结果
  • Selector:读取历史数据,决定某个 PR 应该跑哪些测试

问题在于,这套系统作为单一进程运行,状态保存在进程内存里,没有办法水平扩展——负载涨上来后,只能靠垂直堆资源硬扛。

三次打补丁,一次比一次短命

在真正重构之前,团队尝试了三轮渐进式修补,但效果递减:

补丁做法维持时间
Patch 1(10 月)换更大的机器,CPU 核心翻倍70 天
Patch 2(2 月)按代码包做分片,每个包一个 worker29 天
Patch 3(3 月)每日重启进程,应对内存溢出不到 1 天,且导致服务数据逐渐落后

可以看到,每次补丁能撑住的时间越来越短,说明单纯靠「加资源/分片/重启」这类应急手段,跟不上负载指数级增长的速度,反而让系统状态越来越脆弱。

重设计:从有状态单进程到无状态可扩展架构

最终团队转向了一套「数据库/内存存储」式的架构:

  • 把 Listener worker 改造成无状态,可以按需水平扩展多个实例
  • 引入一个可追加写入的日志(journal),worker 只管把测试结果写进去
  • 由独立的消费进程每隔几秒汇总一次日志,生成历史数据
  • Selector 基于汇总后的历史数据做快速查询,挑选要运行的测试

值得注意的一点是投入成本:这次重设计只用了一名工程师、3 周时间,而放在一年前,类似规模的系统改造可能需要一个季度。作者把这归因于及时动手——负载曲线早晚会追上打补丁的速度,越早重构,代价越小。

给团队的建议

文章给出的几条经验,面向正在经历「AI 加速开发」而基础设施吃紧的团队:

  1. 按指数增长做规划:不要按线性增长预估负载,建议假设架构在两个季度内会面临 25 倍量级的压力。
  2. 初期设计留足余量:关键服务从一开始就应考虑 10–20 倍以上的容量冗余,而不是等瓶颈出现再补。
  3. 状态外部化:把关键 worker 设计成无状态,状态统一放到日志/存储层,是获得水平扩展能力的前提。
  4. 避免单点:不要让承担核心职责的服务长期以单实例形态运行。
  5. 善用 Claude 做可观测性:文章提到可以让 Claude 充当系统的「眼睛和耳朵」,持续做增量式的监控和优化,而不是等到系统整体崩掉才动手重构。

小结

这篇文章本质上是一次工程复盘:agentic coding 把「写代码」这一环节的产出速度提升了近一个数量级,连带审查、CI、测试等下游环节都要重新评估容量假设。Anthropic 的经验是,面对指数级增长,打补丁式的扩容只能延缓问题,真正省成本的做法是尽早把关键系统改造成无状态、可水平扩展的架构。