

在本月的前两周,亚马逊网络服务 (AWS) 遇到了一些阻碍,导致了两次宕机:12 月 7 日一次更大、更广泛的宕机,以及 12 月 15 日一次更小、更局部的宕机。这两次宕机都导致了包括 Google、Slack、Disney Plus、亚马逊、Venmo、Tinder、iRobot、Coinbase 和 The Washington Post 在内的各种网站和在线应用程序出现中断。这些服务都依赖 AWS 为它们提供云计算——事实上,在微软 Azure、Google、IBM 和阿里巴巴等其他大公司中,AWS 是领先的云计算提供商。
要理解为什么影响如此之大,以及公司可以采取哪些措施来防止未来发生类似中断,有必要退一步,看看什么是云计算,以及它有什么用处。
那么,什么是云计算和 AWS 呢?
每当您通过互联网连接到任何东西时,您的计算机基本上只是在与另一台计算机通信。服务器是一种可以处理请求并将数据发送到同一网络或其他计算机的计算机。
但是运行自己的服务器并不便宜。您必须购买硬件设备,将其安装在某个地方,并为其提供大量电力。在许多情况下,它还需要互联网连接。然后,为了确保数据能够以最少的延迟接收和发送,这些服务器需要物理上靠近其用户。
此外,您必须安装需要定期更新的软件。而且您必须构建故障转移机制,当主服务器发生故障时,这些机制会将操作切换到另一台服务器。
[相关:Facebook 对周一的大规模宕机事件给出了解释]
卡内基梅隆大学助理教授 Justine Sherry 说:“亚马逊这样的公司注意到的是,很多[计算基础设施]并不是特定于您正在运行的服务。”
例如,运行 Netflix 的代码与运行 Venmo 等服务的代码所做的事情不同。Netflix 代码正在为用户提供视频,而 Venmo 代码正在处理金融交易。但在底层,大部分计算工作实际上是相同的。
这就是云服务提供商发挥作用的地方。它们通常在全国各地拥有数百甚至数千台带宽良好的服务器。它们负责处理诸如安全性、数据中心运营的日常管理以及在需要时扩展服务等繁琐任务。
Sherry 解释说:“然后您就可以专注于您的[专业]代码了。只需编写使视频正常运行的部分,或使金融交易正常运行的部分。这更容易,而且更便宜,因为亚马逊正在为许多许多客户这样做。”“但也有缺点,那就是全世界都在依赖相同几大仓储式的计算机仓库。在美国有几十个这样的仓库。但是当其中一个出现故障时,就会造成灾难。”
12 月 7 日和 15 日 AWS 发生了什么问题
AWS 宕机的原因似乎与处理后台数据流的自动化系统中的错误有关。
AWS 在一份帖子中解释说,12 月 7 日的错误是由于“一项扩展 AWS 网络内部托管的某个 AWS 服务容量的自动化活动”出现问题,导致“大量连接活动涌入,压垮了内部网络和 AWS 主网络之间的网络设备,导致这些网络之间的通信延迟。”
[相关:深入了解“云”的数据中心]
这种自动扩展功能允许整个系统根据网络上的用户数量来调整使用的服务器数量。Sherry 解释说:“这样做的想法是,如果我在早上 7 点有 100 个用户,然后在中午,当每个人都在午休时间逛亚马逊时,现在我有 1000 个用户,我需要 10 倍的计算机来与所有这些客户互动。”“这些框架会自动查看需求量,并在需要时分配更多服务器来执行所需的操作。”
之后,AWS 在 12 月 15 日发布状态更新称,此次宕机是由于“流量工程”错误地将“预期之外的更多流量转移到 AWS 主干网的一部分,从而影响了到部分互联网目的地的连接。”
大型数据中心通过不同的互联网服务提供商拥有大量的互联网连接。它们可以选择在线流量的路由方式,无论是通过 AT&T 的一条电缆,还是通过 Sprint 的另一条电缆。
它们的自动“流量工程”会根据多种条件重新路由流量。“大多数提供商都会主要根据负载来重新路由流量。他们希望确保一切相对平衡,”Sherry 说。“听起来,这种自动适应在 15 日失败了,他们最终将过多的流量路由到了一条连接上。你可以把它想象成一个水管,里面装满了水,水从接缝处溢出。”那些数据最终会被丢弃并消失。
尽管过去几年发生了一些普遍的宕机事件,但 Sherry 认为 AWS “非常擅长管理其基础设施”。本质上,设计能够预测所有问题的完美算法是非常困难的,而 bug 是软件开发中令人讨厌但又常见的组成部分。“云计算情况的唯一独特之处在于其影响。”
[相关:亚马逊进军奇特的量子计算领域有了新的基地]
越来越多的独立公司正在转向 AWS 等第三方集中式服务来获取云计算基础设施、存储等。
Sherry 说:“如果我付钱给亚马逊为我运营一个数据中心、存储我的文件、为我的客户服务……他们会比我作为大学管理员或小公司管理员做得更好。”“但从社会角度来看,当所有这些小的个人行为者都决定外包给云时,我们最终会形成一个非常大的集中式依赖。”
回归基础?
在 AWS 宕机期间,Sherry 无法控制她的电视。通常,她用手机作为遥控器。但手机并不直接与电视通信。相反,手机和电视都与云中的服务器通信,而该服务器负责协调这两者之间的通信。云计算对于某些功能至关重要,例如下载自动软件更新。但对于滚动浏览天线或卫星提供的有线电视节目,她说:“这没有任何必要。”“我们在同一个房间里,在同一个无线网络上,我只想换频道。”在某些情况下,云计算可以提供方便的技术解决方案,但并非所有应用程序都需要它。
[相关:这就是微软将数据服务器放入海洋的原因]
她认为一个不必要地迂回的设计是自动猫粮分配器,它必须通过云进行通信。在云计算出现之前,自动猫粮分配器就已经存在了。它们基本上与闹钟配对。“但出于某种原因,有人决定不将闹钟部分内置到猫粮分配器中,而是将闹钟分配器放在云端,让猫粮分配器通过互联网向云端询问,是否是喂猫的时间了?”Sherry 说。“这没有任何必要放在云端。”
她认为,今后应用程序开发人员应该审查每一个打算用于云的功能,并询问它是否可以在没有云的情况下工作,或者至少有一个离线模式,在互联网、数据中心甚至电力中断期间不至于完全失效。
Sherry 说:“有些东西可能确实无法工作。如果无法访问银行服务器,您可能无法登录网上银行。”“但是,许多失败的东西实际上本不应该失败。”