cat case/PM-2025-0002.md

Google Cloud 2025-06-12 Service Control 空指针崩溃致全球 75+ 服务 503

P0 · Service Control 二进制空指针进入崩溃循环,全球 75+ GCP/Workspace 服务外部 API 大量 503,含 Gmail/BigQuery/Vertex AI

summary

2025-06-12 太平洋时间 10:49 起,Google Cloud、Google Workspace 及 Google Security Operations 的外部 API 请求大量返回 503,全球数十项服务受影响,持续约 7.5 小时。根因是 Service Control(负责 API 授权与配额策略的区域服务)二进制中的一个空指针异常,由一次缺乏错误处理与功能标志保护的配额策略代码路径被含有空白字段的全局复制策略数据触发。

timeline

05-29 部署含新配额检查特性的代码(无错误处理、无功能标志)。06-12 10:49 PDT 策略变更插入含空白字段的记录到区域 Spanner,全局复制后在秒级触发脆弱代码路径。SRE 2 分钟内介入,10 分钟内定位并用红色按钮禁用问题服务路径。小区域 2 小时内恢复;us-central1 因重启任务对 Spanner 产生惊群效应,恢复延长至 2h40m。大部分服务 13:45 PDT 恢复,Dataflow/Vertex AI 等残留至 18:18 PDT。

root_cause

Service Control 的新配额检查代码路径缺乏错误处理与功能标志保护;一次策略变更将含空白字段的数据写入区域 Spanner,该数据全局复制,触发未受保护的空指针异常,使 Service Control 二进制在所有区域同时进入崩溃循环,拒绝外部 API 请求。

amplifiers

① 全局复制:配额策略数据秒级复制到所有区域,单点坏数据瞬间全球触发。② 无功能标志:变更未按项目分区域灰度,测试环境无法捕获。③ 惊群效应:us-central1 重启 Service Control 任务时缺乏随机指数退避,压垮底层 Spanner。④ 自愈基础设施受损:Cloud Service Health 自身受影响,延迟了初始通报。

mitigation

部署红色按钮(red-button)禁用问题服务路径;对小区域快速恢复;对 us-central1 节流任务创建并路由到多区域数据库以减轻 Spanner 压力。后续冻结 Service Control 栈变更、模块化使其故障开放(fail open)、强制功能标志保护、审计所有消费全局复制数据的系统。

lessons

全局复制的元数据必须做写入校验与渐进发布;关键二进制变更强制功能标志;核心控制服务应 fail-open 而非 fail-closed;系统需具备随机指数退避以避免重启惊群。

checklist

① 所有全局复制数据的写入增加 schema/空值校验。② 关键二进制变更强制功能标志+分级发布。③ Service Control 改为 fail-open 架构。④ 重启/扩容路径加入随机指数退避。⑤ 状态通报系统独立于受影响的控制面。