情况是这样的,我最近在 CDN 上设置了我的几个网站(具体来说是 MediaTemple 的 ProCDN,通过 Edgecast)。设置过程非常正常,但几天后我注意到了这一点:(每天 15K,平均 600K)
现在我的域名/cdn 设置如下:
- 我有自定义域名服务器digitaldawn.net
- 所有补充域名都指向这些名称服务器
- 所有附加域名均已设置 cname 以cdn.域名.com
- 这些 cname 指向 Edgecast Origins,即。http://wpc.XXXX.edgecastcdn.net/XXXXXX
- Edgecast 源本身从http://www.domain.com:80。IE。http://cdn.domain.com/an-image.jpg将是内容分发版本http://www.domain.com/an-image.jpg
首先,我的设置是否能够解释 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 地址),那么您可能能够诊断此类问题。