返回档案库

案例库 · 软件与 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 从互联网的路由表里抹掉了。
  • 恢复工具和访问权限 (包括实体门禁卡) 都依赖那张已经故障的网络,把工程师锁在了修复之外。
  • 没有一条带外路径能触及系统、快速撤销这次变更。
代价宕机 6 小时;广告收入损失逾 6000 万美元代价高昂

教训

恢复路径不能依赖那个刚刚坏掉的东西。当你的 DNS、认证和门禁卡全都跑在你刚刚搞垮的那张网上,你就把自己关在门外了。

后来呢

Facebook 的工程团队第二天发布了一篇详细说明,公司也道了歉。这次宕机——2008 年以来最严重的一次——据估计造成 6000 万美元以上的广告收入损失,市值蒸发数百亿,还一度把用户赶向竞争平台。它成为网络工程的教科书案例,讲单点故障之害、讲依赖被恢复系统的恢复系统之害,也讲一条没有防护的命令如何能搞垮一个三分之一人类在用的服务。

资料来源

发现哪里写错了?告诉我们。

Comments · 0

    登录 后就能评论。

    类似的案例

    这家公司栽倒的地方,别处有人漂亮地解开过。 第二意见 →