CNAMES慢吗?

Gab*_*osa 16 apache dns amazon-s3 amazon-web-services

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

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

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

那么,该怎么想呢?

Aln*_*tak 15

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

请注意,DNS客户端不会定期明确询问CNAME记录.通常,他们会要求他们实际想要的任何记录类型 - 对于一个A或多个AAAA记录的Web浏览器.

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

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


Ben*_*n S 13

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

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

  • 另一方面,DNS称"到期"是完全不同的事情.我相信Ben S的意思是"TTL",而非"到期". (2认同)
  • 我正在建立一个类似的结构。你把 TTL 设置为什么? (2认同)

Mic*_*ski 9

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

  • 使用dig命令查找www.toyota.com,我得到一个包含四个条目的答案部分:两个CNAME和两个A记录.你是否告诉我这四个条目并不是全部都在同一个响应数据包中? (4认同)

Moo*_*ose 5

使用CNAMES要注意的一件事是,如果CNAME的目标没有被缓存,那么它将需要另一次查找,正如Ben S所说.

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

我建议不要将你的CNAME指向另一个CNAME.