使用 CNAME 时性能损失

使用 CNAME 时性能损失

我们正在使用服务器的当前 CNAME 记录,即

 foo.example.com => CNAME => server1.example.com 
 server1.example.com => CNAME => ec2-34-142-138-31.compute-1.amazonaws.com 
 ec2-34-142-138-31.compute-1.amazonaws.com => A => 34.142.138.31
  1. 这种配置常见吗?
  2. 使用 2 个 CNAME 记录时性能损失是否严重?
  3. 为了尽量减少 CNAME 查找的影响,我是否应该为第一个 CNAME 设置较大的 TTL,而为第二个 CNAME 设置较短的 CNAME?

IE

 foo.example.com => CNAME (TTL=86400) => server1.example.com 
 server1.example.com => CNAME (TTL=300) => ec2-34-142-138-31.compute-1.amazonaws.com 

答案1

  1. 是的。例如雅虎就使用它。这是dig www.yahoo.fr我在法国的机器上的输出:

    ; <<>> DiG 9.9.5-4-Debian <<>> www.yahoo.fr
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1935
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 2, ADDITIONAL: 3
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.yahoo.fr.                  IN      A
    
    ;; ANSWER SECTION:
    www.yahoo.fr.           300     IN      CNAME   rc.yahoo.com.
    rc.yahoo.com.           300     IN      CNAME   src.g03.yahoodns.net.
    src.g03.yahoodns.net.   300     IN      CNAME   any-src.a03.yahoodns.net.
    any-src.a03.yahoodns.net. 300   IN      A       77.238.184.150
    any-src.a03.yahoodns.net. 300   IN      A       188.125.73.108
    
    ;; AUTHORITY SECTION:
    a03.yahoodns.net.       172800  IN      NS      yf1.yahoo.com.
    a03.yahoodns.net.       172800  IN      NS      yf2.yahoo.com.
    
    ;; ADDITIONAL SECTION:
    yf1.yahoo.com.          86391   IN      A       68.142.254.15
    yf2.yahoo.com.          86391   IN      A       68.180.130.15
    
    ;; Query time: 342 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Tue Jul 29 09:57:01 CEST 2014
    ;; MSG SIZE  rcvd: 227
    

您可以通过同一个 DNS 数据包中返回的多个 CNAME 记录看到双重重定向。

  1. 不是。DNS 使用缓存机制和递归解析器,因此许多用户甚至没有注意到隐含的 DNS 解析器的数量,因为它很快,而且通常请求不一定会触发整个解析过程

  2. 不一定。请参阅常见的 Yahoo 示例的值。这是另一个(法语)示例:服装商人:

    $ dig www.laredoute.fr
    ; <<>> DiG 9.9.5-4-Debian <<>> www.laredoute.fr
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28156
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.laredoute.fr.              IN      A
    
    ;; ANSWER SECTION:
    www.laredoute.fr.       1800    IN      CNAME   www.laredoute.fr.glb.pprgroup.net.
    www.laredoute.fr.glb.pprgroup.net. 30 IN A      217.109.67.129
    
    ;; AUTHORITY SECTION:
    pprgroup.net.           172800  IN      NS      gtm1.pprgroup.net.
    pprgroup.net.           172800  IN      NS      gtm2.pprgroup.net.
    
    ;; ADDITIONAL SECTION:
    gtm1.pprgroup.net.      172800  IN      A       194.206.254.11
    gtm2.pprgroup.net.      172800  IN      A       217.109.67.126
    
    ;; Query time: 679 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Tue Jul 29 10:03:57 CEST 2014
    ;; MSG SIZE  rcvd: 178
    

用法是在 CNAME 记录上放置一个正常的 TTL 值,并在 A 记录上调整 TTL 值(取决于 IP 地址稳定性、想要的基于 DNS 的负载平衡等)。

答案2

DNS 查询通常不会产生太大影响(可能为 20-30 毫秒,具体取决于响应时间)。如果您发现记录变化不频繁,则设置更高的 TTL 将有助于缓存。

相关内容