cat case/PM-2026-0209.md

GitHub 大面积降级:用户设置缓存配置变更触发缓存重写风暴

P0 · github.com / API / Actions / Git(HTTPS) / Copilot / Issues / PR / Webhooks / Dependabot / Pages / Codespaces 间歇性错误,SSH Git 不受影响

摘要

2026-02-09,GitHub 经历两段相关的可用性降级,影响 github.com、API、Actions、Git(HTTPS)操作、Copilot 等;第一段 16:12–17:39 UTC,第二段 18:53–20:09 UTC,累计约 2 小时 43 分。根因是用户设置缓存机制的一次配置变更,导致大量缓存重写同时发生。

时间线

  • 16:12 UTC :: 第一段开始,页面加载错误、HTTPS Git 推拉失败、Actions 失败、Copilot 报错
  • 17:39 UTC :: 第一段恢复(禁用异步缓存重写 + 重启 Git 代理)
  • 18:53 UTC :: 第二段开始(另一缓存更新源产生大量同步写,复制延迟再触发连接耗尽)
  • 20:09 UTC :: 全面恢复

根因

用户设置缓存机制的一次配置变更(将缓存刷新间隔从 12 小时改为 2 小时),使本分散在 12 小时内的缓存重写被压缩进 2 小时,形成密集的「缓存重写风暴」;异步重写压垮负责协调后台任务的共享基础设施组件,级联导致代理 HTTPS Git 操作的 Git 代理连接耗尽,无法接受新请求。

放大因素

初次缓解后,另一处未被覆盖的缓存更新源产生大量同步写,造成复制延迟,以相似模式再次级联并再次耗尽 Git 代理连接,引发第二段中断。

缓解措施

禁用异步缓存重写并跨多数据中心重启 Git 代理;禁用该缓存重写源并再次重启;优化缓存机制以避免写放大并加入批量更新时的自节流;为缓存系统变更增加回滚响应与发布校验;修复 Git HTTPS 代理连接耗尽的根因,使其可自动恢复。

经验教训

一个缓存 TTL 的数字改动即可引发平台级风暴;带写放大的缓存/批量机制必须有自节流与发布校验,且任何缓解需覆盖全部更新源,否则会二段复发。

检查清单

  • 缓存/批量机制加入写放大防护与自节流
  • 缓存系统变更强制回滚响应与发布校验
  • 缓解措施须覆盖全部更新源
  • Git 代理层实现连接耗尽的自动恢复