はじめに
英語の技術動画で学ぶシリーズ。今回は ByteByteGo から、ドメイン名をIPアドレスに変換する DNS の仕組み。
Everything You Need to Know About DNS: Crash Course System Design #4 (5:45)
前回(#4 URLを入力すると何が起きるか)で「詳しくは別の動画で」とされていた DNS lookup の中身を扱う。動画タイトルのとおり、ByteByteGo の System Design 動画シリーズの第4回。
DNSとは
名前を住所に変える仕組み。人間が読めるドメイン名(google.com)を、機械が使うIPアドレスに変換する。
動画のたとえは「インターネットの電話帳(directory)」。冒頭と締めで「インターネットの背骨(backbone)」とも呼んでいる。
2種類のDNSサーバー
動画いわく、DNSがややこしいのは役割の違うサーバーが何種類も出てくるから。まず大きく2つに分けると見通しがよくなる。
| 役割 | 動画での用語 | やること | 例 |
|---|---|---|---|
| 代わりに探してくれる窓口 | DNS resolver | ブラウザからの問い合わせを受け、キャッシュに無ければ答えを持つサーバーを探して聞きに行く | ISPのもの、Cloudflare の 1.1.1.1、Google の 8.8.8.8
|
| 答えそのものを持つ係 | authoritative nameserver | そのドメインの正式な答えを返す | 下の3階層 |
ドメインのDNSレコードを更新するとき、書き換えているのは後者(authoritative nameserver)のほう。
答えを持つサーバーの3階層
では resolver はどうやって「答えを持つサーバー」を見つけるのか。ここで上から順にたどる階層構造が出てくる。
| 階層 | 持っている情報 | 動画でのポイント |
|---|---|---|
| root name server | TLDサーバーのIPアドレス | 論理的には13個。各IPアドレスの裏に物理サーバーが多数あり、anycast で一番近いものにつながる |
| TLD name server | 配下の各ドメインの権威サーバーのIPアドレス |
.com .org .edu のほか、国別の .de .uk など |
| authoritative nameserver(ドメインごと) | そのドメインの最終的な答え | ドメイン登録時はレジストラ(registrar)が運用。AWS や Cloudflare などに変更も可能 |
この階層設計のおかげで、DNSは分散していて壊れにくい(decentralized and robust)、というのが動画の主張。
1回の問い合わせの流れ
ユーザーがブラウザに google.com と打った場合。手前から順にキャッシュを見て、無ければ奥へ進む。
- ブラウザが自分のキャッシュを見る
- 無ければOSに聞く。OSも自分のキャッシュを持っていることが多い
- それでも無ければ DNS resolver に問い合わせる
- resolver もまずキャッシュを見る。無い/期限切れなら root に聞く →
.comのTLDサーバー一覧が返る -
.comのTLDサーバーに聞く →google.comの権威サーバーが返る -
google.comの権威サーバーに聞く → IPアドレスが返る - resolver → OS → ブラウザ の順にIPアドレスが戻る
4 について動画は「.com はよく使われるので、resolver がTLDサーバーのIPを最初からキャッシュしている可能性が高い」と補足している。つまり root まで毎回聞きに行くわけではない。
本番でDNSレコードを変えるときの注意
動画の最後は、稼働中の高トラフィックなシステムでDNSを変更するときの落とし穴(gotchas)。
変更がすぐ行き渡らないのが問題の根っこ。理由は2つ。
- 各レコードにはキャッシュの有効期限(TTL)があり、デフォルト値がかなり長いものもある
- TTLを守らない resolver も存在する(動画の言い方では "not every DNS resolver is a good citizen")
対策として動画が挙げる実践的な手順は2つ。
| 手順 | やること | ねらい |
|---|---|---|
| 1. 事前にTTLを短くする | 変更予定のレコードのTTLを、十分前もって60秒程度に下げておく | 短いTTLが各サーバーに行き渡ってから本番の変更をすれば、切り替えが早く効く |
| 2. 旧サーバーをすぐ止めない | 古いIPアドレスのサーバーはしばらく動かしておく | TTLを守らない resolver 経由のアクセスを取りこぼさない。トラフィックが十分減ってから廃止する |
2 は「時間と忍耐が要る」と動画自身が言っている。
まとめ
DNSは「窓口(resolver)が、root → TLD → 権威サーバーと階層をたどって答えを取ってくる」仕組み。途中の各所にキャッシュがあり、それが速さの理由でもあり、変更が遅れて届く理由でもある。
実務で効いてくるのは最後の話。サーバー移行などでIPアドレスが変わるときは、前もってTTLを下げ、旧サーバーはしばらく残す。これを覚えておけばよい。
覚えておきたい英単語
| 英語 | 意味 | 動画での使われ方 |
|---|---|---|
| authoritative | 正式な・権威のある(そのドメインの正解を持つ) | The authoritative nameserver is the one that holds the answer. |
| anycast | 同じIPアドレスへの通信を、一番近いサーバーに振り分ける方式 | Through the magic of anycast, we get routed to the one closest to us. |
| propagation | (変更が)行き渡ること・伝播 | DNS propagation is slow because there is a TTL on each DNS record. |
| honor | (ルール・設定を)守る・尊重する | There are some out there that don't honor the TTL. |
| decommission | (サーバーなどを)廃止する・運用から外す | Only decommission the server when traffic dies down to an acceptable level. |