减少 CDN 导致的过多 DNS 查询

减少 CDN 导致的过多 DNS 查询

情况是这样的,我最近在 CDN 上设置了我的几个网站(具体来说是 MediaTemple 的 ProCDN,通过 Edgecast)。设置过程非常正常,但几天后我注意到了这一点:(每天 15K,平均 600K) DNS 查询使用情况图表

现在我的域名/cdn 设置如下:

首先,我的设置是否能够解释 DNS 查询的过度增加?(目前设置了 CDNS 的网站访问量很少(可能每天不到 10 个))。

其次,如果这是完全正常的,有什么办法可以避免这种情况吗?我通过 DNS Made easy 管理了 1000 万个查询,按照目前的速度,我将陷入困境……

我认为我可以通过静态 IP 托管每个域并将源设置为静态 IP 地址来避免一半的问题,但这远非理想,因为我有相当多的站点。还有其他选择吗?

答案1

DNS 请求过多的主要原因是 TTL 太低。您的 TTL 很低,但不是特别低。(我在生产系统中见过 TTL 为 60 和 1 的情况。)

digitaldawn.net.        1800    IN  A   109.73.163.166

www.digitaldawn.net.    3600    IN  A   208.94.146.71
www.digitaldawn.net.    3600    IN  A   208.94.146.70
www.digitaldawn.net.    3600    IN  A   208.94.146.80
www.digitaldawn.net.    3600    IN  A   208.94.146.81

cdn.digitaldawn.net.        1800    IN  CNAME   wpc.7b5c.edgecastcdn.net.
wpc.7b5c.edgecastcdn.net.   3600    IN  CNAME   gs1.wpc.edgecastcdn.net.
gs1.wpc.edgecastcdn.net.   14400    IN  A       93.184.221.133

除非您每天更改这些域指向的 IP 地址不止一次,否则最好将 TTL 更改为 86400(24 小时)之类的值。如果您有信心至少在 TTL 中提前设定了您可能需要更改 IP 地址的时间段,则可以将 TTL 值设得更高。

对于cdn.digitladawn.net子域,即使您将 TTL 设置为 86400,也只有上述输出中的这一行会被缓存 24 小时。如果响应wpc.7b5c.edgecastcdn.net发生变化,所有客户端应该在最多一小时后获取新值(暂时忽略那些忽略您的 TTL 的 DNS 服务器)。

我见过的 DNS 请求过多的另外两个原因是客户端过多(例如,数千台边缘 CDN 服务器都在访问您的权威名称服务器)或单个行为不当的客户端(可能是您自己服务器上的脚本)每秒执行数十次查找。例如,反向代理用作backend.digitaldawn.net其上游服务器,并针对其必须代理的每个 HTTP 请求对该域发出 DNS 请求。向该服务器添加 DNS 缓存或在生产环境中运行您自己的权威名称服务器可以解决此问题。

如果您可以获得名称服务器的更好的统计信息(例如执行查找的所有客户端的 IP 地址),那么您可能能够诊断此类问题。

相关内容