CNAMES慢吗?

时间:2009-04-14 17:24:21

标签: apache dns amazon-s3 amazon-web-services

我正在使用CNAME与S3 / CloudFront一起提供一些静态文件,如js,css,images等。

我这样做是为了使存储桶的网址更漂亮,因为我认为更好地将所有目标定位到我的网站,如果在某些将来我希望移动这些文件,则更改应该是透明的。

今天阅读博客我看到有人认为CNAME对速度是邪恶的。

那么,该怎么想呢?

4 个答案:

答案 0 :(得分:15)

根据其他答案,使用CNAME只会导致非常小的额外DNS解析延迟,并且只有在结果不在递归DNS服务器的缓存中时才会显示。

请注意,DNS客户端不会定期明确询问CNAME记录。通常他们会询问他们实际想要的任何记录类型 - 对于一个AAAAA记录的网络浏览器。

上游服务器的工作是识别查询的域名中包含CNAME条目,然后查找并返回目标结果。在这种情况下,CNAME记录和所需结果都会在DNS响应的答案部分中返回(而不是在其他人回答的附加部分中)。

为了获得最佳性能,最好将CNAME的目标托管在与包含CNAME的域名相同的权威DNS服务器上,以便可以在没有进一步DNS请求的情况下完成CNAME解析。

答案 1 :(得分:13)

CNAMES使用DNS查找添加另一级别的间接,因此会产生一些惩罚。但是,一旦通过DNS查找IP,它应该保持缓存状态,并且该客户端不应再发生惩罚。

确保在DNS条目中正确设置到期时间,您不应该看到任何可见的延迟。

答案 2 :(得分:9)

在大多数情况下,使用CNAME的影响非常低。 DNS响应格式允许服务器在消息中放入一些额外的数据,在许多情况下,当您查找CNAME记录时,服务器将在附加数据部分中添加相应的A记录,因此不再需要查找。 / p>

答案 3 :(得分:5)

使用CNAMES需要注意的一件事是,如果CNAME的目标没有被缓存,则需要进行另一次查找,正如Ben S所说。

但是,如果CNAME的目标是另一个CNAME,那么它将需要YET ANOTHER查找,并且令人作呕。

我建议您不要将CNAME指向另一个CNAME。