我们在AWS中遇到DNS未记录限制的那一天
鸟
2017年2月7日
工程
1 min read

关键要点
SparkPost 在某个 AWS EC2 实例类型上遇到了未记录的网络吞吐量限制,该实例类型为其主要 DNS 集群供电。
传统的实例大小(CPU、RAM、磁盘)并未揭示这个瓶颈,因为问题与聚合 DNS 网络流量有关,而不是资源匮乏。
高容量外发邮件的 DNS 使用量异常庞大:SparkPost 为了域路由、身份验证 (SPF/DKIM) 和 AWS API 交互生成了数百万次 DNS 查找。
DNS 故障并非由格式错误的 DNS 响应引起,而是实例级别的网络容量阈值被悄然超出,导致广泛的查找失败。
由于 AWS 没有明确记录这些软网络限制,诊断问题需要 SparkPost 的 SRE 团队与 AWS 工程师之间的深度合作。
团队通过将 DNS 服务迁移到具有更大网络带宽的更大型实例类型,并重新设计部分 DNS 架构以获得更好的隔离和故障切换,解决了这一问题。
没有客户数据或消息丢失,但事件突显出云原生架构在规模上可能遇到意想不到的限制——以及如何利用 AWS 弹性快速{
Q&A 精华
发生了什么?
SparkPost的DNS集群遇到了意外的AWS网络吞吐量上限,导致DNS查询间歇性失败,从而延迟了电子邮件的发送。
为什么 DNS 完全崩溃了?
DNS 对于发送电子邮件是极其依赖的。每次发送都需要多个查找(MX、TXT、SPF、DKIM),因此高发送量 = 大量的 DNS 流量。
这种流量模式超过了托管域名服务器的 EC2 实例类型的未公开限制。
电子邮件的DNS与Web应用程序有何不同?
Web apps 主要 拉取 内容(客户端请求数据)。
Email delivery services 推送 流量,触发更多的 DNS 查找——通常每月数十亿次。
Email 依赖 DNS 进行路由、安全验证和故障转移。
故障是如何表现的?
DNS 请求开始下降或超时
传递队列积压
系统部分的延迟增加
没有丢失任何东西——只是延迟。
为什么这很难诊断?
限制没有被记录
AWS 监控没有明确显示瓶颈
所有传统指标(CPU、RAM、磁盘)看起来都正常
这个问题只在特定的高流量 DNS 流量模式下才浮现。
SparkPost 是如何解决这个问题的?
升级到具有更高网络吞吐量上限的EC2实例类型
重新构建DNS集群,以更好地抵抗总流量激增
与AWS合作,以便更早地识别更好的信号/警报模式
客户数据或邮件丢失了吗?
不——只是传递速度放慢。 一旦DNS稳定,所有邮件恢复正常传递。
更广泛的教训是什么?
即使在云中,你也可能遇到看不见的扩展限制 — 但云原生设计为您提供快速恢复的灵活性。
弹性、与AWS的合作以及强大的SRE实践使快速恢复成为可能。



