案例库 · 软件与 IT · 技术决策 · 2021
Facebook 用一条糟糕的维护命令,把自己锁在互联网门外六个小时
2021 年 10 月 4 日,一条例行命令断开了 Facebook 所有的数据中心。它的 DNS 服务器随即撤回了路由,Facebook 就此消失了好几个小时。
Meta · 2021-10-04
怎么回事
2021 年 10 月 4 日 15:39(UTC),Facebook 和它上面的一切——Instagram、WhatsApp、Messenger、Oculus——在全球陷入黑暗。接下来的六到七个小时里,数十亿人就是访问不了它们。原因不是网络攻击。在一次例行维护中,一名工程师运行了一条本意是评估 Facebook 全球骨干网容量的命令。命令出了错,意外地把 Facebook 所有数据中心一次性从那根骨干网上断开了。
这个设计把一条糟糕的命令变成了一场灾难。Facebook 运行着自己的 DNS 服务器,这些服务器被配置成:一旦与数据中心失去联系,就撤回它们的 BGP 路由——也就是互联网的地址簿条目。所以骨干网一倒,DNS 服务器就尽职尽责地告诉互联网其余部分:Facebook 的地址已经不存在了。Facebook 实际上把自己从互联网上删掉了,而这次撤回级联得如此彻底,连 Facebook 自己的工具都很难够到它去修复。
这场封锁彻底得近乎滑稽。Facebook 的内部系统也倒了:员工发不了外部邮件,访问不了公司通讯录,甚至——一个上了头条的细节——用门禁卡打不开办公楼和会议室的门,因为门禁也依赖同一张网络。恢复需要一个团队物理进入圣克拉拉的数据中心,手动重置服务器。服务在 UTC 大约 21:50 到 22:50 之间逐渐恢复。Facebook 股价当天下跌近 5%,马克·扎克伯格的个人财富缩水逾 60 亿美元。
为什么会这样
- 一条没有充分防护的维护命令,把 Facebook 所有数据中心一次性从骨干网上断开。
- DNS 服务器被设计成一旦失去数据中心就撤回 BGP 路由——于是这场故障自动把 Facebook 从互联网的路由表里抹掉了。
- 恢复工具和访问权限 (包括实体门禁卡) 都依赖那张已经故障的网络,把工程师锁在了修复之外。
- 没有一条带外路径能触及系统、快速撤销这次变更。
教训
恢复路径不能依赖那个刚刚坏掉的东西。当你的 DNS、认证和门禁卡全都跑在你刚刚搞垮的那张网上,你就把自己关在门外了。
后来呢
Facebook 的工程团队第二天发布了一篇详细说明,公司也道了歉。这次宕机——2008 年以来最严重的一次——据估计造成 6000 万美元以上的广告收入损失,市值蒸发数百亿,还一度把用户赶向竞争平台。它成为网络工程的教科书案例,讲单点故障之害、讲依赖被恢复系统的恢复系统之害,也讲一条没有防护的命令如何能搞垮一个三分之一人类在用的服务。
资料来源
- 2021 Facebook outage — Wikipedia (4 October 2021, BGP withdrawal, six-hour global outage)
- The Verge — Facebook/Instagram/WhatsApp outage explained (archived)
发现哪里写错了?告诉我们。
类似的案例
这家公司栽倒的地方,别处有人漂亮地解开过。 第二意见 →

Comments · 0
登录 后就能评论。