
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自动化模块,直至相关安全检查、竞态条件修复与控制机制完成。