关注我们: 微信公众号

扫码关注我们

一次权限重置引发全球断流:Cloudflare 特征文件膨胀致服务崩溃

云头条 2025-11-19 6

1.png

原以为遭遇“超大规模 DDoS 攻击”,后来找到了真正的原因。

在 11 月 18 日上午,Cloudflare 对 ClickHouse 数据库进行了一项权限变更,导致数据库查询返回了额外的底层表信息,从而使 Bot Management 用于生成机器学习特征的配置文件突然出现大量重复项,文件体积意外翻倍。由于该特征文件每 5 分钟会自动分发到全球所有代理节点,而核心代理服务(FL/FL2)对特征数量设有上限,超限后会触发 panic,导致这些代理节点无法正常处理流量,进而向全球用户返回大量 5xx 错误。随着不同数据库节点逐步应用权限变更,特征文件一度在“正常”和“异常”之间反复切换,使 Cloudflare 的网络在恢复与崩溃之间来回波动,排查难度大增。最终,Cloudflare 确认根因后停止生成错误文件,回滚到正常版本,并重启核心代理,至当日 17:06 全网才完全恢复正常。

故障持续了 5 小时 38 分钟。

故障比喻:

想象一个五星级餐厅的主厨房,每 5 分钟厨房助理都会打印一份“菜品配料清单”(对应 Cloudflare 的“特征文件”)给所有炒菜台。通常清单薄薄的,主厨与助手配合默契,菜品能按时上桌。可是某天厨房后台悄然改动了“食材供应权限”(对应数据库权限变更),结果清单里同一项菜名竟然被列了两次、三次,清单体积一下子翻倍。厨师拿到这份“超厚清单”时,锅具、火候、配菜台全都崩溃:配料堆积、锅炉过载、服务员手忙脚乱。厨房系统(代理服务)直接卡住、停止运作,整个餐厅服务瘫痪。由于清单每 5 分钟重新打印,而且不同炒菜台有时拿到正常清单、有时拿到“超厚版”,于是厨房有时候还能运作、有时候突然崩塌。直到管理层发现问题、停止打印错误清单、恢复用备份清单、重启所有炉灶,厨房才彻底恢复正常。

这个比喻里:

1)“打印菜品清单”=特征文件每 5 分钟生成

2) “同一项菜名被重复列”=数据库权限变更导致重复列信息

3)“清单翻倍导致锅具、配菜台崩溃”=代理服务超限 panic 崩溃

4)“厨房服务瘫痪”=全球 5xx 错误、服务中断

5)“有时候正常、有时候崩”=各数据库节点逐步更新、错误文件间歇生成。

2.png

Cloudflare CEO Matthew Prince 承认,11 月 18 日大规模宕机的根本原因是更改了数据库权限,最初以为遭遇了“超大规模 DDoS攻击”,后来才找到了真正的问题。

Prince 在 18 日晚些时候发布的帖子中解释,这起事故是由“更改我们某个数据库系统的权限触发的,导致数据库向我们 Bot Management 系统使用的‘特征文件’输出了多条记录。”

这个文件用于描述恶意机器人程序活动,Cloudflare 分发该文件,以便运行其路由基础设施的软件意识到新出现的威胁。

数据库权限更改导致特征文件的大小翻倍,超出了 Cloudflare 为其软件设定的文件大小限制。

当代码检测到这个非法的庞大特征文件时,就崩溃了。

下面的图表显示了 Cloudflare 网络所返回的 5xx 错误 HTTP 状态码的数量。正常情况下,这个数字应该非常低,而且在故障开始之前确实如此。

3.png

随后系统恢复,但只维持了一段时间,因为故障发生时,Cloudflare 正在更新 ClickHouse 数据库集群的权限管理,该集群用于生成新版本的特征文件。权限更改旨在让用户可以访问底层数据和元数据,但 Cloudflare 用于检索数据的查询犯了错误,因此返回了额外信息,使特征文件的大小翻倍都不止。

故障发生时,该集群每五分钟生成特征文件的新版本。

Prince 写道:“只有在某个已更新的集群节点上运行查询时,才会产生坏数据。因此,每五分钟就有可能生成一份正确或错误的配置文件,迅速在整个网络中传播。”

因此,从周二 UTC 时间大约 11 点 20 分开始的几个小时内,Cloudflare 的服务出现了间歇性宕机。

4.png

Prince 写道:“这种反复波动让问题变得不明朗,因为整个系统时好时坏,有时分发到网络的是好配置,有时是坏配置。因此,最初我们以为这是攻击导致的。最终,每个 ClickHouse 节点生成错误的配置文件,一直呈现稳定的故障状态。”

这种“稳定的故障状态”出现在 13 点 00 分前几分钟。就在这时,真正的麻烦开始了,Cloudflare 的客户开始遇到持续性宕机。

Cloudflare 最终找到了问题源头,停止生成和分发坏的特征文件,然后将一份已知正常的文件手动放入到特征文件分发队列。随后公司强制重启了核心代理,让系统只读取正确的文件。

这些步骤都需要花时间,并且给依赖该代理的其他系统带来了连锁反应。

对此 Prince 表示了歉意。

他说:“像今天这样的故障是不可接受的。我们构建系统时力求高弹性,以便遇到故障后迅速恢复正常,以确保流量始终畅通。在经历过去的宕机事件后,我们构建弹性更高的新系统。”

云头条声明:如以上内容有误或侵犯到你公司、机构、单位或个人权益,请联系我们说明理由,我们会配合,无条件删除处理。

关键词:

网友留言2

未查询到任何数据!
◎欢迎您留言咨询,请在这里提交您想咨询的内容。