热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Amazon云计算平台AWS崩溃的技术分析

2013年2月2日,@陈怀临在新浪微博上发了一张图片,描述几天前Amazon云计算平台AWS崩溃的原因。他在微博里说,“试图手工沙盘推演AmazonEBS的崩溃。。。不一定

bubuko.com,布布扣

 

2013 年 2 月 2 日,@陈怀临 在新浪微博上发了一张图片,描述几天前 Amazon 云计算平台 AWS
崩溃的原因。他在微博里说,“试图手工沙盘推演Amazon EBS的崩溃。。。不一定对。同学们见笑。”

于是我在他的原帖下面回复,虽然竭力想简洁明快,两三条微博说完。但是写着写着,竟然写了十余条。网友回复,说这样读起来累,不如集合起来,搞个长微博。

好吧,长微博来了。。


如果 @陈怀临 的分析是正确的,那么此次事故的原因,和 2011 年 4 月 20 日那次的事故原因,基本上是一致的。但是 2011
年事故以后,Amazon 号称彻底修复了系统,杜绝了类似事故的发生。如果 @陈怀临 的分析是正确的,Amazon
其实并没有彻底把上次的故障解决,所以旧病复发。

对此,俺持保留态度,静观后续的事故分析。

2011 年 4 月 20 日事故,大致原因是这样的。Amazon AWS 云平台把数据传输分为两类通道,Data Channel 和 Signal
Channel。Data Channel 传输内容数据,所以 AWS 给它分配了更多的网络带宽。而 Signal Channel
用来传输控制信号,控制信号来往频繁,但是每则控制信号的字节很少。

另外,每次写数据的时候,AWS 都要存备份,备份地址是由 AWS 调度系统自动指派的。用户向主力节点写入内容数据后,AWS 通过内部发
Signal,寻找最合适的备份节点。所谓 “最合适” 是由 AWS 调度系统,根据管理员预先制定的规则,自动计算出来的。

如果第一次备份没有成功,那么主力节点就认为初选的备份节点挂了,于是它要求 AWS 调度系统,再找第二个备份节点。于是,AWS 调度系统再次群发
Signal,选择次优的备份节点。
问题出在主力节点凭什么,就认定备份节点挂了?AWS 的设计是,备份节点每隔几秒要向 AWS
调度发个心跳,汇报它的工作状态。

按理说,AWS 这两条设计,Data vs Signal Channels
分开,以及备份的替补方案,听起来都很合理。但是,问题出在,假如突发网络拥堵怎么办?

假如网络拥堵了,主力节点向初选的备份节点传输的内容数据,可能不能按时到达。不能按时到达,主力节点就要求调度,立刻寻找次优备份节点。

如果大量主力节点都要求调度寻找次优备份节点,调度就会大量群发控制信号,这就造成了 Signal Channel
的拥堵。这样,就造成了备份节点的心跳,也传不出去。

调度系统收不到备份节点的心跳,根据原先的 AWS 设定,调度系统就要在替补设备中,挑选设备,充当新的备份节点。

刚才说的情况很可怕,但是发生内部网络拥堵的概率,“应该” 微不足道。都是 Amazon 自家人,谁会没事找自家同事的麻烦呢?但是 2011 年 4 月
20 日,这样的小概率事件,还是发生了。当时,AWS 美东地区数据中心要搞维护,据说需要更换一批设备。

更换设备时,必然导致要把内容数据,从原来的节点中,备份到其它节点中去。同时要备份海量内容数据,但是系统操作员,并不了解 AWS
的设计细节。所以,操作员们,没有更改 Data Channel 和 Signal Channel 的设置,就开始做维护了。于是,雪崩开始了。

当主力节点向新选的备份节点,传输内容数据时,大量的主力节点同时做这个操作,于是造成了网络拥堵,确切地说,是 Data Channel
拥堵了。这样一来,大量主力节点就没有在规定时间内,收到来自备份节点传来的控制信号,说内容数据已经按时到达。这是第一轮冲击波。

于是,主力节点向调度系统发送请求,要求另选备份节点。大量的主力节点,同时发出这样的请求,而调度系统随即群发了这些请求。由于 Signal Channel
的带宽较窄,心跳信号被群发的信号堵塞了,这是第二轮冲击波。

AWS
调度系统收不到各个节点的心跳了,它们都挂了吗?调度系统主动发出查询信号,仍然没有回音。不得已,调度系统决定启用替补节点。很快,所有替补节点全部告罄。AWS
急了眼,恨不得用直升机把工程师们,从家里拽到数据中心现场。但是谁也回天无力,终于,AWS 全线崩溃了。

事后,Amazon 的工程师们,写了详实的事故分析报告,没有闪烁其词,没有回避责任。根据协议,对客户该赔的钱,Amazon
也没含糊。所以,业界也没大肆炒作。对于 Amazon
来说,这是一次灾难,但是对于云计算技术人员来说,这是难得的学习机会。这就像地震,对于老百姓来说,这是灾难。但是地质人员来说,地震,是分析地质结构的绝佳机会。

首席画的这四张图,描述的情况,与 2011 年 4 月 20 日的事故很相似。想深入了解的同学,不妨读读 AWS 的历次事故的分析报告,

1. 2011 年 4 月 21 日事故报告: http://aws.amazon.com/cn/message/65648/
2. 2012 年
6 月 29 日事故报告: https://aws.amazon.com/cn/message/67457/
3. 2012 年 10 月 22
日事故报告: https://aws.amazon.com/cn/message/680342/
4. 2012 年 12 月 24 日事故报告:
http://aws.amazon.com/cn/message/680587/


推荐阅读
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
author-avatar
纯果多肽-小芳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有