摘要
2021-06-08,一次「合法的客户配置变更」触发了 Fastly CDN 中一个此前未被发现的软件 bug。受影响的 POP 节点 CPU 飙升、返回 503,全球大量依赖 Fastly 的网站(政府、媒体、电商等)短时间内不可达。
# 合规的配置也能点燃埋藏的 bug——配置即代码,必须有边界测试。
时间线
故障前bug 已潜伏于请求处理代码,未被任何测试触发
约 09:00 UTC某客户推送合法配置变更,命中隐藏边界条件
推送后数分钟受影响 POP 节点 CPU 飙升 / 进程崩溃,开始返回 503
告警后Fastly 工程定位到是配置触发,而非攻击
定位后推送修复配置 / 补丁,阻止坏输入继续传播
~1h全球服务恢复
根因
Fastly 的请求处理软件中存在一个未被发现的边界条件 bug,平时不会被触发;当一位客户推送了某个「合法但特定」的配置变更时,该输入组合命中了这一边界,导致部分 POP 节点上请求处理进程 CPU 飙升甚至崩溃,进而向用户返回 503。该 bug 在常规测试中未被触达,配置预检也未覆盖此输入组合。
- 请求处理软件存在未被测试触达的边界条件(特定配置 + header 组合)。
- 该客户配置本身是「合法」的,却触发了潜伏 bug——配置即代码,必须有边界测试。
- 配置预检 / 校验未覆盖此输入组合,缺护栏。
- 边缘节点缺错误隔离,单点 bug 经同构全球网络瞬间全局化。
放大因素
全球 CDN 同构,坏配置 / bug 瞬间铺满边缘;缺乏对该类配置的预检护栏,初期难以快速收敛。
缓解措施
- 修复触发 bug 的代码路径,增加边界测试。
- 对高风险配置变更增加预检与灰度。
- 增强边缘错误隔离,避免单点 bug 全局化。
经验教训
「合法配置」也可能触发隐藏 bug;配置即代码,必须有边界测试与护栏,不能假设用户配置永远安全。
检查清单
- 确认故障窗内是否有客户 / 全局配置变更
- 抓取异常 POP 的 CPU / 错误栈
- 构造触发配置的最小复现
- 验证配置预检与灰度
- 复盘边界测试覆盖