
Amazon云计算服务(Amazon Web Services,AWS)的美东-1区域(US-EAST-1, 北维吉尼亚)在太平洋夏令时间(PDT)10月19日23:49(10月20日14:49)出现故障,随后蔓延成大规模中断,总计影响142项服务,波及上千家客户,且在15小时之后才完全恢复。AWS周四(10/23)公布了肇事原因,指出是DynamoDB DNS软件自动化出错造成的连锁反应。
US-EAST-1不仅是AWS第一个创建的区域,也是全球规模最大也最核心的区域,它汇集了许多全球控制平台与管理后端,一旦故障,不仅会影响该区用户,也会殃及其他依赖该区端点的全球用户。至于Amazon DynamoDB则是AWS提供的全托管NoSQL数据库服务,专为高可用、低延迟与自动扩展而设计,为AWS内部与外部应用最依赖的数据层,支撑如Amazon.com、Alexa、Netflix等高流量系统,与Google Cloud Bigtable及Azure Cosmos DB并列为三大云计算NoSQL主力。
根据AWS的说明,DynamoDB的DNS管理分为两个模块,一是负责生成新DNS设置计划的DNS Planner,二是负责把计划套用到Amazon Route53的DNS Enactor,AWS在3个不同可用区(AZ)中独立运行3个DNS Enactor以提高可用性。
DynamoDB DNS的正常运行流程是在DNS Enactor获得最新计划后,在部署前会先确认该计划是否为最新的,再逐一更新不同的端点,倘若遇到其他Enactor正在更新同一端点,就会重试直到成功,在完成所有端点的更新后,便会执行清理程序,删除明显过期的计划。
这次的问题发生在Enactor A开始部署一个计划,但在更新多个DNS端点时遇到重大延迟,使得它进展缓慢,也不断重试;在这同时,DNS Planner依然持续运行,并已发行许多新版计划;独立运行的Enactor B开始部署其中一个最新计划,而且快速完成了所有端点的更新;完成更新的Enactor B启动了清理程序。然而,落后的Enactor A这时才正把过时的计划部署在Enactor B已经完成部署的US-EAST-1端点,紧接着Enactor B的清理程序删除了这个过时计划,使得该区域端点的IP地址全部被移除,变成空白的DNS无法被侦测或识别,而不能再部署任何计划。
DynamoDB DNS的问题虽然花了大约3小时就解决,所引起的连锁反应却持续了十几个小时。例如依赖DynamoDB的EC2实例状态管理工具DropletWorkflow Manager(DWFM),在该故障期间租约大量失效,当DNS恢复后,DWFM同时尝试重建数十万笔租约,造成了拥塞崩溃,也让新的EC2实例无法启动,网络设置延迟,进而影响网络负载均衡器NLB及无服务器运算服务AWS Lambda。
AWS这次的事故凸显出云计算架构中自动化系统的脆弱依赖性。原本为提升可靠性而设计的多重自动化与分区冗余机制,却在极端条件下彼此冲突;虽然DynamoDB的DNS问题仅持续3小时,但所牵动的EC2、NLB、Lambda等核心服务出现连锁故障,让整体恢复时间拉长至15小时。AWS已暂时停用全球的DynamoDB DNS Planner与DynamoDB DNS Enactor自动化模块,直至相关安全检查、竞态条件修正与控制机制完成。











