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との相性も考えた方がいいかもしれません。

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

yamasita

東京電機大学工学部→3年間某SIerにて銀行システムの開発→bpsに入社

yamasitaの書いた記事

インフラ
現場で使うansible

2014年12月25日

インフラ
検証環境の作り方

2014年08月14日

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ