summary
2021-12-07 07:30 PST,us-east-1 发生约 7 小时中断。AWS 在主网络(承载客户流量)之外维护一个内部网络,托管监控、内部 DNS、授权服务及部分 EC2 控制平面。一次主网络某服务的自动扩容活动,触发内部网络中大量客户端异常行为,使主网络与内部网络之间的连接活动激增,压垮两者间的网络设备,延迟与错误引发重试风暴,进一步加深拥塞,最终使 EC2/ELB/IAM/S3 元数据控制面在 us-east-1 不可达。
timeline
07:30 PST 内部监控舰队自动扩容,大量设备同时连接内部网络。07:40 PST 两网间容量超限,拥塞控制生效。07:50 PST 依赖内部监控数据的服务开始重试,重试放大拥塞。08:00 PST 客户侧 EC2 API 失败开始;Service Health Dashboard 仍显示绿色(其数据面依赖受影响服务)。09:28 PST 将内部 DNS 流量移出拥塞路径,DNS 错误恢复。09:30-13:30 PST 限速恢复,逐步隔离重流量源、禁用重网络流量服务、增补网络容量。13:34 PST 拥塞显著改善,14:22 PST 全部网络设备恢复。
root_cause
AWS 内部网络与主网络通过有限带宽的设备桥接。内部监控舰队的自动扩容让许多新设备同时连接生产网络上的后端服务,乘以舰队规模后超出桥接容量;拥塞控制减速后,依赖监控数据的后端服务更激进地重试,重试叠加在已饱和流量上,数分钟内桥接不可用,控制面失去协调能力。
amplifiers
① 控制/数据面耦合:主网络未受影响,但凡需连内部网络的控制平面几乎全损。② 重试风暴:客户端库重试配置缺陷(潜在 bug 阻止充分退避)放大拥塞。③ 监控失明:内部监控依赖受影响网络,运维靠日志盲排,延迟定位。④ 状态页自瘫:Service Health Dashboard 依赖受影响服务,初期无法正确 Failover。
mitigation
立即禁用触发事件的扩容活动;将内部 DNS 流量移出拥塞路径;限速恢复并隔离重流量源、增补网络容量。后续修复客户端退避、解耦监控与状态页、强化内部网络容量建模。
lessons
内部控制网络必须独立于生产网络且容量有裕度;客户端重试须真随机指数退避;监控与状态通报系统不得依赖其监控的对象。
checklist
① 内部网络带宽按扩容峰值建模并留裕度。② 客户端库强制随机指数退避并验证。③ 状态页多区域独立部署。④ 控制面依赖关系图定期演练。