Agent 写代码把 CI 压垮:Anthropic 测试影响分析服务的三次续命与重构
Anthropic 的 CI 在六个月内承受了 25 倍任务量增长:Claude 编写 80% 的代码,工程师人均季度产出是 2021–2025 均值的 8 倍,测试总量涨了 10 倍而人数几乎没变。瓶颈从写代码转到 PR 审核,再落到测试影响分析服务上。该服务由 listener 和 selector 两个确定性组件构成,因为需要单写入者维护每个测试的历史,v0 只能单进程运行,无法水平分片。作者记录了三轮续命:加核心数撑了 70 天,按包分片撑了 29 天,每日重启撑了不到一天;期间内存见底、只找到四个 bug、换内存分配器无效,重启还让 listener 越追越远。最终方案是把历史状态搬进内存数据存储:任意 listener worker 把结果追加进 journal 即可无状态退出,单独的 consumer 每几秒把 journal 汇总成 per-test 历史,selector 再查询。单人三周完成,积压事件归零。作者的建议是:假设两个季度内负载达 25 倍,把状态移出进程,别把关键服务跑成单实例。