第十届中国开源年会,12月6-7日,北京, 查看详情

Cloudflare 11·18 全网故障:隐性假设如何摧毁现代互联网基础设施

分析 Cloudflare 2025 年 11 月 18 日全网故障,探讨隐性假设、自动化配置链路与现代基础设施的系统性风险。

现代互联网基础设施的最大风险,往往不是代码本身,而是那些未被显式定义的隐性假设和自动化配置链路。Cloudflare 的这次故障,是所有 Infra/AI 工程师都必须正视的警钟。

昨天(11 月 18 日),Cloudflare 发生了自 2019 年以来影响面最大的全网级故障。由于本站托管在 Cloudflare 上,也未能幸免。这也是本站上线 8 年来,极少数因故障而无法访问的情况(上一次是 GitHub Pages 故障,发生在微软收购 GitHub 的那年)。

图 1: jimmysong.io 因 Cloudflare 故障导致宕机持续长达 27 分钟
图 1: jimmysong.io 因 Cloudflare 故障导致宕机持续长达 27 分钟

本次问题并非攻击或传统意义上的软件 bug,而是一条看似“安全”的权限更新,引爆了现代基础设施体系中最脆弱的一环:隐性假设(Implicit Assumption)与自动化配置链路(Automated Configuration Pipeline)。Cloudflare 官方已发布博客 Cloudflare outage on November 18, 2025 说明事故原因。

下面是本次故障的链式反应过程:

  • 一次权限调整,引发元数据变化;
  • 元数据变化导致 feature file 行数翻倍;
  • 行数翻倍触发代理模块内存上限;
  • 内存上限导致核心代理 panic;
  • 代理 panic 引发下游系统集体崩溃。

这种链式反应,是当今互联网规模下最典型、也最危险的系统性失败方式。

事故根源:隐性假设不是契约

首先介绍本次事故的核心隐患。Bot Management 的 feature file 每五分钟自动生成,依赖一个默认前提:

system.columns 查询结果只包含 default 数据库。

这一假设未被写入文档,也未在配置中验证,仅存在于工程师的心智模型中。

当 ClickHouse 权限更新后,r0 的底层表也暴露出来,查询结果瞬间翻倍。文件大小突破了 FL2 的 200 feature 内存预设,最终引发 panic。

隐性假设一旦被破坏,系统就缺乏缓冲空间,极易导致级联故障。

配置链路的风险高于代码链路

本次事故并非代码修改导致,而是数据面变更:

  • SQL 查询行为改变;
  • 自动生成的 feature file;
  • 全网自动广播。

现代基础设施的典型现象是:数据、schema、metadata 远比代码更容易破坏系统稳定性。

Cloudflare 的 feature file 属于“供应链输入”,而非普通配置。任何进入自动化广播路径的内容,其地位等同于系统级指令。

语言安全无法消除边界层复杂性

有前 Cloudflare 工程师对此做出精准概括:

Rust 能避免一类错误,但边界层、数据契约(Data Contract)、配置管道的复杂性并不会因此消失。

FL2 的 panic 源自一行 unwrap()。这不是语言问题,而是系统契约缺失:

  • feature 数量增长无上边界验证;
  • 文件 schema 缺少版本约束;
  • feature 生成逻辑依赖隐性行为;
  • 核心代理错误模式为 panic 而非降级。

现代分布式系统(Distributed System)的大部分事故来自“坏输入”,而非“坏内存”。

核心代理需要可控失败路径

FL/FL2 是 Cloudflare 的核心代理,所有请求都必须经过。此类组件的失败路径不能以 panic 结束,应具备如下能力:

  • 忽略异常特征;
  • 截断超限字段;
  • 回退到旧版本;
  • fail-open 或 fail-close;
  • 跳过 Bot 模块继续处理流量。

只要代理“活着”,全网就不会完全瘫痪。

数据变更比代码变更更不可控

本次事故的本质在于:

  • 权限的细微变更;
  • ClickHouse 默认行为改变;
  • 查询结果扩散到分布式系统;
  • 自动化发布放大错误;
  • 边缘代理因输入失控崩溃。

未来 AI Infra(AI Infrastructure)将更加复杂:模型、tokenizer、adapter、RAG index、KV snapshot 都需高频更新。

未来的 AI 基础设施中,数据面的风险将远高于代码面。

恢复过程展现工程组织成熟度

Cloudflare 在事故期间采取了多项措施:

  • 阻断错误 feature file 的继续生成;
  • 强行分发上一版本文件;
  • 回滚 Bot 模块配置;
  • 让 Workers KV、Access 在核心代理外运行;
  • 分阶段恢复流量。

在全球数百个 PoP 同时恢复,体现了极高的工程成熟度。

这次事故对 Infra/AI/云原生工程师的启示

Cloudflare 事件呈现了未来大型系统常见的四类风险:

  • 隐性假设失效;
  • 配置供应链污染;
  • 自动化发布放大错误;
  • 核心代理缺少降级路径。

对 AI Infra 从业者而言更具现实意义:

  • 模型权重更新无 schema 核验;
  • adapter 合并可能被污染;
  • RAG index 增量构建不稳定;
  • inference graph 配置可能被坏数据破坏;
  • 自动 rollout 的模型可能全网扩散错误。

AI 工程正在重演 Cloudflare 的基础设施困境,只是规模更快、风险更大。

前 Cloudflare 员工观点总结

他的观点准确指出了分布式系统中最难解决的部分:

  • 问题不是代码,而是契约缺失;
  • 不是语言,而是输入边界未定义;
  • 不是模块,而是配置供应链缺少验证;
  • 不是 bug,而是缺乏 fail-safe 机制。

这次事故证明:现代基础设施真正脆弱之处在于“行为边界”,而非“内存边界”。

总结

Cloudflare 11·18 故障并非偶然,而是现代互联网基础设施演化到大规模、高度自动化阶段的必然产物。

本次事件带来的核心启示:

  • 系统假设必须显式化;
  • 配置链路必须验证;
  • 自动化发布需有“死门”机制;
  • 核心代理需设计可控失败路径;
  • 数据面的契约必须严于代码面契约。

在 AI-native Infra 时代,这些要求只会更加严格。

参考文献

文章导航

评论区