Tech Racho エンジニアの「?」を「!」に。
  • インフラ

Google DNS(8.8.8.8)を使うと遅くなる場合

Google DNSはキャッシュヒット率が高く、ブラウジングが高速化されるという話ですが、遅くなるパターンもあるという話。
(知ってる人はゴメンなさいCDNとの相性が悪いという話です)

お世話になったことの無い人は居ないと思うAkamai等のCDNサービスを利用する場合、遠いサーバを紹介される可能性があります。
(ニコ生やネットラジオ,iTunesが好きな方は利用していると思います。)

DNSの仕組みは以下の通りで、フルサービスリゾルバがroot DNSサーバから再帰的に検索します。
目的のコンテンツサーバがCDNのDNSだった場合、フルサービスリゾルバから近いIPアドレスを紹介してくれる。
という訳です。
dns sequence

まずは自分で名前を引いて見ます

$ dig @127.0.0.1 mfile.akamai.com.

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> @127.0.0.1 mfile.akamai.com.
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40053
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mfile.akamai.com.              IN      A

;; ANSWER SECTION:
mfile.akamai.com.       188     IN      CNAME   a1298.g.akamai.net.
a1298.g.akamai.net.     20      IN      A       72.246.188.50
a1298.g.akamai.net.     20      IN      A       72.246.188.17

;; Query time: 16 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Feb 27 10:27:04 2014
;; MSG SIZE  rcvd: 98

ping してみるとこんな感じ
tracerouteすると13ホップでした

$  ping -c 5 72.246.188.50
PING 72.246.188.50 (72.246.188.50) 56(84) bytes of data.
64 bytes from 72.246.188.50: icmp_req=1 ttl=52 time=6.76 ms
64 bytes from 72.246.188.50: icmp_req=2 ttl=52 time=4.59 ms
64 bytes from 72.246.188.50: icmp_req=3 ttl=52 time=5.95 ms
64 bytes from 72.246.188.50: icmp_req=4 ttl=52 time=8.35 ms
64 bytes from 72.246.188.50: icmp_req=5 ttl=52 time=7.22 ms

--- 72.246.188.50 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 4.592/6.578/8.353/1.260 ms

Google DNSで引いてみます

$ dig @8.8.8.8 mfile.akamai.com.

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> @8.8.8.8 mfile.akamai.com.
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48600
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mfile.akamai.com.              IN      A

;; ANSWER SECTION:
mfile.akamai.com.       102     IN      CNAME   a1298.g.akamai.net.
a1298.g.akamai.net.     19      IN      A       58.26.185.35
a1298.g.akamai.net.     19      IN      A       58.26.185.41

;; Query time: 63 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Feb 27 10:17:18 2014
;; MSG SIZE  rcvd: 98

pingしてみるとこんな感じ,tracerouteは18ホップ
pingだけみると20倍くらい違う感じ

$ ping -c 5 58.26.185.35
PING 58.26.185.35 (58.26.185.35) 56(84) bytes of data.
64 bytes from 58.26.185.35: icmp_req=1 ttl=48 time=116 ms
64 bytes from 58.26.185.35: icmp_req=2 ttl=48 time=111 ms
64 bytes from 58.26.185.35: icmp_req=3 ttl=48 time=124 ms
64 bytes from 58.26.185.35: icmp_req=4 ttl=48 time=123 ms
64 bytes from 58.26.185.35: icmp_req=5 ttl=48 time=112 ms

--- 58.26.185.35 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 111.172/117.748/124.126/5.490 ms

ここまでの話、実はGoogle公式に書いてあります
この中にはGoogle DNSのIPを世界中に配備したりClientのIPをCDNのDNSサーバに通知する拡張を提案していたりしていますが、少なくともAkamaiはまだ対応していないようです。

使ってみると分かりますが、Googleが問い合わせに使うIPアドレスがコロコロ変わるために、紹介されるサーバが近かったり、遠かったり安定しない感じです。

CDNで遠いサーバを紹介されると体感できるくらいコンテンツのロードが遅くなります。
DNSサーバを決める場合単純に名前解決の速度だけで比較しないで利用するCDNとの相性も考えた方がいいかもしれません。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。