+− THE DAILY DIFFdev & AI news
SHIP IT

Google Cloud 因空白字段而崩溃。历时三小时。

一个包含几个空白字段的策略行触发了一个空指针,导致 Google Cloud 所有区域同时崩溃,随后 Cloudflare 也随之瘫痪。

一个包含几个空白字段的策略行触发了一个空指针,导致 Google Cloud 所有区域同时崩溃,随后 Cloudflare 也随之瘫痪。2025 年 6 月 12 日,世界标准时间 17:49:Service Control(批准每个 Google Cloud API 请求的二进制文件)读取了一个配额策略变更,其中包含“意外的空白字段”,触发了两周前发布的代码路径(没有空检查和功能标志),并进入了所有区域的崩溃循环——该行在几秒钟内全局复制。外部 API 在三小时内返回 503;us-central1 耗时 2 小时 40 分钟,因为重启任务同时涌入同一个 Spanner 表,没有随机退避。在 Google 宕机三分钟后,Cloudflare 的 Workers KV(其真相来源位于“第三方云提供商”上)损失了 90% 的请求,Access、WARP、Workers AI、Pages、Stream 和 Turnstile 也随之宕机 2 小时 28 分钟。Google 的状态页面延迟一小时发布了首次更新,因为它运行在 Google Cloud 上。

阅读书面版(英文) ↗

本视频涵盖的内容

  • 空白字段、空指针、所有区域
  • 时间线:5 月 29 日 → 17:45 → 崩溃循环 → 红按钮 → 17:52 Cloudflare
  • us-central1:羊群效应
  • 机制:请求路径中的检查、全局复制、一个供应商
  • git blame — 拆分

翻译的文字记录

译自英文原版旁白。可用音频和字幕由 YouTube 控制。

空白字段、空指针、所有区域

0:00 包含空白字段的策略行触发空指针,Google Cloud 崩溃于 所有区域同时 — 且 Cloudflare 随之瘫痪, 然后称 Google 为“第三方提供商”。 2025 年 6 月 12 日,世界标准时间 17:49。 Google 的报告:Service Control,批准每个 API 请求的二进制文件, 陷入崩溃循环,持续三小时。 Cloudflare 的报告,同一晚上:Workers KV,百分之九十的请求失败, 两小时二十八分钟。

0:23 事件经过,为何一个空白字段在几秒钟内扩散全球, 以及谁应承担责任。 这是 The Daily Diff,事后分析。 5 月 29 日。Service Control 获得新的配额检查,按区域发布,带有

时间线:5 月 29 日 → 17:45 → 崩溃循环 → 红按钮 → 17:52 Cloudflare

0:35 红色按钮 — 但新的代码路径在发布期间从未运行;没有任何东西触发 它。没有空检查。 没有功能标志。 17:45。带有空白字段的策略变更进入 Spanner 表。 配额是全局的,所以该行在几秒钟内复制到所有地方。 每个 Service Control 二进制文件读取它,遇到空指针, 崩溃,重启,再次读取。 每个 API 调用:503。

0:55 Google 速度很快:两分钟内分类,十分钟内找到根本原因。 红色按钮在四十分钟内关闭,小区域首先恢复。 状态页面在一小时后发布首次更新, 因为它运行在 Google Cloud 上。 17:52。Cloudflare 的 WARP 团队发现新设备无法注册。 Workers KV,Cloudflare 用于配置和身份验证的一半存储, 位于第三方云上。 Access 每次登录都失败 — 根据设计,它失败即关闭。

1:20 Workers AI 每次推理都失败。 19:11,Gergely Orosz:两个独立的云同时宕机, 前所未见。 19:32,Google 支持告诉用户没有已知中断 — 尝试清除 你的 Cookie。其他所有地方都在 19:48 之前恢复。

us-central1:羊群效应

1:34 us-central1 没有:重启任务涌入同一个 Spanner 表, 没有随机退避,所以 Google 手动节流它们。 两小时四十分钟。 一:策略检查位于请求路径内;当检查失败时,

机制:请求路径中的检查、全局复制、一个供应商

1:46 API 失败。 二:配额数据全局复制,没有暂存;一个坏行就是全局行。 三:Cloudflare 知道。 Workers KV 正在迁移到自己的 R2,只有一个提供商 — 事后分析称之为覆盖范围的空白。

git blame — 拆分

2:00 git blame。Google,百分之五十五:没有空检查,没有功能标志, 没有退避 — 他们的报告称,如果有一个标志,本可以在暂存阶段发现问题。 全局复制,百分之二十:一行,所有区域, 秒。Cloudflare,百分之二十:一半产品线依赖一个供应商的存储, 以及一份从未提及 Google 的事后分析报告。 状态页面,百分之五,因为它运行在它所报告的服务上。 影响范围:七十个 Google Cloud 产品,十个 Workspace 应用程序,

影响范围

2:23 所有区域。三小时。 在 Cloudflare:Access、WARP、Workers AI、Pages、Stream — 两小时半。 Hacker News,一千四百赞;热门评论:状态页面是绿色的。

裁决 + 星期一热线

2:33 裁决,事后分析:SHIP IT。 两份事后分析报告在三十小时内发布,都归咎于自身, Google 的修复措施是具体的:开放式失败,标志默认关闭, 指数退避。星期一热线:新代码在默认关闭的标志后面发布, 并在数据进入时进行空检查。 把你仍然不被允许谈论的事件发送给我, 在评论中,或者发送到 the daily diff dot dev。 这就是今天的 The Daily Diff。

2:53 我是 Axrisi 的 Niko。 负责任地合并。

来源

  1. Google Cloud Service Health, Incident Report (Jun 13, 2025) + Mini Incident Report (Jun 12)status.cloud.google.com
  2. Cloudflare, "Cloudflare service outage June 12, 2025" (Jun 12, 2025, 22:00 UTC)blog.cloudflare.com
  3. Cloudflare Status, "Broad Cloudflare service outages" (18:19–21:31 UTC)www.cloudflarestatus.com
  4. Gergely Orosz, 19:11 UTC, "Their infra is fully independent AFAIK"x.com
  5. @Google support, 19:32 UTC, "there aren't any known service disruptions"x.com
  6. Thomas Kurian (Google Cloud CEO), Jun 13 01:35 UTCx.com
  7. Hacker News, "GCP Outage" (1,468 points)news.ycombinator.com
  8. Hacker News, "Cloudflare was down" (341 points)news.ycombinator.com
  9. Hacker News, "Google Cloud Incident Report – 2025-06-13" (209 points)news.ycombinator.com

相关视频

postmortem · zh-CN · 2026年9月16日

Facebook 从互联网上删除了自己。六小时。

Facebook 从互联网上移除了自己的地址,当其工程师赶到现场恢复服务时,门禁读卡器也失灵了,因为它们也在 Facebook 上运行。2021 年 10 月 4 日,世界标准时间 15:40:一条例行的骨干网维护命令导致 Facebook 数据中心之间的所有链接中断;用于阻止该命令的审计工具存在一个错误;Facebook 的域名服务器,由于无法访问数据中心,根据设计撤回了它们自己的 BGP 路由

3:01 ↗
postmortem · zh-CN · 2026年9月22日

一次重启让Telstra回到了2006年。九百万部手机受到影响。

墨尔本的一名工程师在凌晨2:50重新启动了一个时序机箱,到早餐时间,澳大利亚最大的移动网络竟然认为现在是2006年11月。2026年7月8日:Telstra的NTP机箱中的一张GPS卡在电源维修期间重启,其固件从未进行过GPS周翻转更新,因此它选择了旧的纪元,回到了1024周之前。由于2025年10月的一个权宜之计,这张卡成为了网络中唯一的层级1(stratum-1)时间源——并且2020年切换到

3:15 ↗
postmortem · zh-CN · 2026年9月12日

一个正则表达式搞垮了 Cloudflare,持续 27 分钟。

2019 年 7 月 2 日,UTC 时间 13:42:Cloudflare Web 应用程序防火墙的一条新规则在大约两秒钟内在全球 180 多个城市生效。这是一条模拟模式下的 XSS 规则,因此它不会阻止任何内容,但它仍然在每个请求上运行,并且以 .*(?:.*=.*) 结尾。PCRE 回溯,每个处理 HTTP 请求的 CPU 核心都达到 100%,每个由 Cloudflare 代理的网站都在

3:00 ↗