AWS 这次事故的原因报告出来了:
aws.amazon.com/cn/message/101…

简单看了一下,让 AI 总结一下:

1 DNS 记录由 DNS Planner 定期生成一份完整的区域计划,列出应该指向哪些load balancer。

2 DNS Enactor 负责把计划写进 Route 53(Amazon 的 DNS 系统),每个可用区运行一个独立实例。所以有多个。

3 Enactor 开工前只核对一次:确保手里的计划是最新版本。

4 其中一个 Enactor 在更新 DNS 记录时,速度卡了,每改一个endpoint 都要试好几次才成功。

5 在它卡顿的过程中,Planner 生成了多个更新的计划,其他 Enactor 已经快速把最新计划写进了 Route 53。

6 慢的 Enactor 最初检查时认为自己的计划是最新,但由于延迟太久,实际上已经过时。它没有再次检查,直接用的旧计划。

7 快的 Enactor 写完后会清理旧计划,把所有比自己刚应用的版本更旧的计划全部删除。

8 结果:慢 Enactor 正在应用的旧计划被快的 Enactor 删除,导致区域端点的 DNS 记录被清空。

9 区域端点无法解析,连接全部失败,引发区域级服务中断。

感觉设计真的挺复杂的,但是几十万条 DNS 记录只能自动化实现,并发 + 延迟 就造成了竞态条件的问题。
https://x.com/vikingmute/status/1982069412535599458?s=35

Comments

Be the first to add a comment