DNSでの「浸透」は家電の文脈における「マイナスイオン」と同じような言葉だから使うのやめよう!

「後は DNS の浸透を待つだけ」とかよく聞きますが、 DNS という技術に「浸透」という単語は存在しません。
それどころか、以下の点において、理工系の人間なら誰でも血圧が上がる「マイナスイオン」と同等です。お近くにいる DNS エンジニアの血圧が上がるので使うの止めましょう!*1

  • 定義が無い
  • 技術的にツッコミどころ満載
  • 専門家ではない人たちが雰囲気で使っている

「DNS はインフラ」ならともかく、多少なりとも DNS で飯食ってるエンジニアは使うのを止めよう!

「浸透」の正確な定義

DNS 関連 RFC のどこにも浸透という単語は出てこないですし、浸透という単語の定義についてまともに解説してる Web ページがあったら教えてほしいです。

「DNS 浸透」でぐぐってるだけで血圧上がってきますよ、うわぁぁぁぁ!

定義がない用語なので「浸透」を使うのはやめよう!

「浸透」の巷での定義

巷でよく聞く「浸透」と言う単語は、以下に挙げる複数の問題を混同して扱っているので有害です。
この混同が既に蔓延していることが、「DNS が TTL きっかりに切り替わらないこと」を「浸透」と定義すればいいじゃない、という考えに私が否定的な理由です。

  • キャッシュリゾルバにおける TTL のハンドリングへの誤解*2
  • TTL を無視するキャッシュリゾルバ*3が存在すると誤解
  • NS 変更の手順ミスに気がついていない*4
  • アプリケーションでの TTL を無視した DNS キャッシュ*5
  • その他*6

さらに、以下の例のように、人によって「浸透」の定義がズレてるのもマズさを加速させていると思います。*7

  • キャッシュリゾルバにおける TTL のハンドリングへの誤解
    • DNS が専門では無い人がこう思い込んでいることが多い
  • TTL を無視するキャッシュリゾルバが存在すると誤解
    • ちょっとかじってる人はこれが多いと思い込んでいることが多い
  • NS 変更の手順ミスに気がついていない・その他オペミス
    • DNS に関する高度な知識を持ってる人が「他の奴はこれを浸透だと勘違いしている」と思っていることが多い
  • アプリケーションでの TTL を無視した DNS キャッシュ
    • コンテンツプロバイダの運用エンジニアがこれを指して浸透と言う場合が多い

前二つの不勉強な連中はおいておくにしても、後ろ二つは論点が違えど問題点としては正しいので、議論がすれ違う原因のように見えます。さらに、上では省略しましたが、 DNS NOTIFY がコケてるとか同様の現象を引き起こすオペミス・誤解は山ほどあるので、それらがさらに議論を発散させていきます。
誤解を招くので「浸透」はやめよう!

「アプリケーションでの TTL を無視した DNS キャッシュ」を「浸透」と呼ぶこと

「DNS には浸透という概念は存在しない」とか良く聞きますが、個人的にはこの意見は間違っていると思います。「TTL を考慮せず DNS をキャッシュするアプリケーションの存在」により、正しい DNS オペレーションを行ったとしても TTL きっかりにトラフィックが切り替わらず、じわじわと減っていく世界になってしまいました。

アプリケーションで無造作に DNS をキャッシュするのはやめよう!

また、正しく A/AAAA レコードを切り替えたのに古い IP アドレスへアクセスが続く、という現象に頭を打ち付ける回数が多いエンジニアでもっとも人数が多いのは、コンテンツプロバイダの運用エンジニアだと私は思います。しかし、ウェブブラウザを vim/emacs のごとく使うのでウェブブラウザの挙動について詳しく、なかなか切り替わらない現象を、 DNS という仕組みを誤解せず、原因はアプリの DNS キャッシュであると正しく見抜いています。*8

と言うわけで、「アプリケーションでの TTL を無視した DNS キャッシュ」のみについて「浸透」と定義すりゃ、割としっくりくる気はします。かくいう私も、以前、ブラウザでの DNS キャッシュがなかなか抜けないことを指して「浸透」と言っていました。

しかし、このエントリを書くに当たって「浸透の定義」を調べるべく「DNS 浸透」でぐぐっていたら、言ってること三者三様で議論が錯綜し、頭痛がしてきて考えが変わりました。この言葉使っちゃいかん…。

誤解を招くので「浸透」はやめよう!

「浸透」がダメなら何て言えばいいのよ?

冒頭の言葉を*9正しく言い換えるなら、「後はアプリのキャッシュ切れを待つだけ」となります。

Web に限るなら「後はブラウザの DNS キャッシュ切れを待つだけ」ですね。

このアプリケーションでのキャッシュを除けば、 DNS を正しくオペレーションすることでトラフィックは TTL 期間で減少し、カッチリ切り替わります。*10 A レコードの書き換えだけならそもそもオペミスの余地が無い。*11

せっかく、「アプリの DNS キャッシュが原因」と本質を見抜いているのだから、「浸透」などという気持ち悪い言葉を使わずに、「アプリの DNS キャッシュ」と言いましょう!*12

まとめ

  • 「浸透」は定義が無いから使うな
  • 「浸透」は誤解を招くから使うな
  • 「アプリの DNS キャッシュ」って言え*13
  • アプリケーションは無造作に DNS をキャッシュするな
  • DNS サーバを正しく運用しろ

最後に

「浸透」という単語はとても良く燃えます。コメント欄やブコメを炎上させて頂ければさいわいです。
また、自分の知識に間違いなんぞいくらでもあるわーと思っている若者なので、間違いのご指摘なども辛辣な言葉で思う存分申して頂ければと思います。喜びます。

と言うかですね、エンジニアがうじゃうじゃいるところで「DNS の浸透」と発言すると、怖い人*14を召喚してしまう可能性が高いのでホントに止めてください。マジで。燃え燃えキュン。

参考

私が書いたこのエントリ自体も、特定の視点からの議論です。他の方の意見も見てよく消化することをお薦めします。また、 geekpage さんの記事は、技術的背景なども説明してあるので、目を通したあとに再度このエントリを読むと理解が深まると思います。

*1:「RAID でバックアップ」より高い攻撃力だ!

*2:キャッシュサーバを多段にしても段数分だけ保持される最長時間が伸びたりはしません。1段目のキャッシュサーバがカウントダウン済みの TTL を返却するので、コンテンツサーバが TTL 600 なら 2段目のキャッシュも 600秒以内に切れます。 HTTP とは勝手が違うぞ!

*3:いわゆるブロードバンドルータと呼ばれる製品の一部はこれに該当する挙動をしますが、絶対数はすごく少ないです。取り合えず 1% 以下であるとは断言出来ます。

*4:JPRS の資料が分かりやすく正確なのでお読み下さい。 http://jprs.jp/tech/material/iw2011-lunch-L1-01.pdf

*5:少なくとも Opera は一度引いたレコードを起動中ずっとキャッシュし続けパージしません。 chrome とか IE も怪しくない?

*6:DNS NOTIFY がコケてるとかオペミスのバリエーションはいくらでもあります

*7:独断と偏見に満ちています。先に謝りますごめんなさいごめんなさい!

*8:少なくとも私の観測範囲では。

*9:多くの場合において

*10:TTL 無視のブロードバンドルータは観測不能なほど少ないです!

*11:同時に TTL をイジる場合を除く

*12:「マイナスイオン」じゃなくて「オゾン」とか言いましょう!

*13:単純なAレコードの切り替えに限る。ちゃんと理解してることは前提。バッタ本という素晴らしい本があるので前 2/3 ぐらい読破すれば OK さっ!

*14:僕も噛みます