案例库 · 软件与 IT · 技术决策 · 2017
AWS 一条敲错的命令搞垮了 S3——以及大半个互联网——整整四个小时
2017 年 2 月 28 日,一名 AWS 工程师在调试 S3 时敲错了一条命令,下线了过多的服务器。S3——以及建在它之上的大半个互联网——宕机了约 4 小时。
亚马逊 · AWS · 2017-02-28
怎么回事
2017 年 2 月 28 日上午,亚马逊云科技 (AWS) 的一名工程师正在调试一个问题:Amazon S3——公司极受欢迎的云存储服务——的计费系统响应缓慢。按照标准操作手册,工程师运行了一条命令,本意是把少量 S3 服务器下线以便检查。但这条命令的一个错误输入,下线的服务器远超预期,其中包括运行 S3 两个核心子系统的服务器:一个是追踪所有数据存放位置的索引,一个是分配存储的系统。
索引子系统一倒,US-EAST-1 区域 (北弗吉尼亚) 的 S3 就无法处理请求,错误向外蔓延。互联网上有海量东西建在 S3 之上——不只是存放图片和文件的网站,还有其他 AWS 服务,从计算仪表盘到存储卷,再到无服务器函数。S3 一摇晃,这些服务也跟着摇晃。大约四个小时里,一大批热门网站和应用——从 Slack、Trello 到无数其他——要么坏了要么变慢,这场宕机在全球上了热搜。
AWS 甚至难以告诉大家发生了什么:它自己的服务健康仪表盘依赖 S3,所以在服务宕机时发不出一条清晰的状态更新。工程师重启了子系统,S3 在当天上午晚些时候恢复上线。亚马逊发布了一篇坦诚的事故复盘并道歉,表示会加上防护措施,让一条命令无法把容量降到某个最低值以下,会把 S3 的各子系统隔离开,让一个错误无法把它们全部拖垮,还会把状态仪表盘从它所报告的服务上搬走。
为什么会这样
- 一条例行维护命令的一个错误输入,下线的服务器超出预期,其中包括 S3 的两个核心子系统。
- 没有一道护栏能阻止这条命令把关键子系统的容量降到安全最低值以下。
- S3 的各子系统隔离得不够,于是一个错误在整个区域的整套服务上级联扩散。
- 互联网——以及 AWS 自身——有太多东西依赖 S3,以至于这场故障远远波及到存储之外,连 AWS 自己的状态页也跟着倒了。
教训
互联网越多地依赖你的服务,一条没有防护的命令就越危险。给破坏性操作加护栏,隔离子系统,永远不要让一个输入拖垮整体。
后来呢
2017 年 2 月的 S3 宕机成为史上最出名的云故障之一,也是“一条没有防护的命令如何在互联系统中蔓延”的教科书案例。亚马逊透明的事故复盘——解释了那个笔误、级联和修复——本身常被当作事故后如何沟通的范本。这一事件让行业更加聚焦于为破坏性操作设护栏、隔离关键子系统,也聚焦于一个令人不安的事实:当一项服务支撑着大半个互联网,它的一个糟糕早晨,就是所有人的一个糟糕早晨。
资料来源
- AWS — Summary of the Amazon S3 Service Disruption in the Northern Virginia (US-EAST-1) Region, 28 Feb 2017
- Amazon S3 — Wikipedia
- AWS outage that broke the internet caused by mistyped command — Data Center Knowledge
发现哪里写错了?告诉我们。
类似的案例
这家公司栽倒的地方,别处有人漂亮地解开过。 第二意见 →

Comments · 0
登录 后就能评论。