Hatena::ブログ(Diary)

mura日記 (halfrack)

2012-01-27

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% 以下であるとは断言出来ます。

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

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

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

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

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

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

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

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

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

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

*14:僕も噛みます

ChietherChiether 2012/01/27 16:38 しかしそろそろ。 「キャッシュって何? わかりやすい言葉で説明してくれなきゃ困るよ」って言ってくるエンドさんを、泣くまで殴りたい。

実際。絵に描いて、「このサーバは設定時間がきて、再取得して反映される」「こっちのサーバは30秒後」と線引いて動きみせたら「浸透するようにって言えばいいだろ」って怒られたことが15年前に。

私の罪は、そこで「ハイハイw」って、流しちゃったことですかね?

えむけいえむけい 2012/01/27 17:11 > アプリケーションで無造作に DNS をキャッシュするのはやめよう!
Webブラウザは決して無造作にキャッシュしているわけではなく、DNS Rebindingという攻撃への対策のために意図的にTTLを無視しています(それだけに問題が根深い)。

kokorohamoekokorohamoe 2012/01/27 20:31 gethostbynameの返り値にTTLってあったのかと一瞬調べてしまいました
アプリケーションでの TTL を無視した DNS キャッシュとおっしゃいますが、
アプリケーションはカーネルからどのようにTTLを取得していると思われているのでしょうか?

halfrackhalfrack 2012/01/27 20:35 DNS Rebinding への対策は、短すぎる TTL を無視して延長するのが本質です。
10日間とかキャッシュしているのは過剰でしょう。
30分とかであれば納得しますし、 6時間でもまあ許すかという感じですが、ちょっと保持しすぎだなーと思っています。

hanehane 2012/01/27 21:12 おもに非技術屋さんが身体的感覚として(タイムラグを感じるから)浸透と呼んでいるだけで、正しい用語を使いましょうというのはまた別の議論だと思います。ツイッター等で「炎上」するというのは定義されていないから「否定的引用の多用」と言い換えましょう、と主張したところでナンセンスなのに近い気がします。

halfrackhalfrack 2012/01/27 21:32 gethostbyname から TTL を得ることは出来ないので、gethostbyname を使わない方法で名前解決を実装する必要があり、実装は大変だと思います…。
私がパッと思いつくのは、スタブリゾルバをブラウザに内蔵させることですが、大変そう…。 OS のネットワークスタックからフルリゾルバの IP アドレスを取得出来れば実現可能?
TTL を守りながらキャッシュするイケてる感じでフットプリントの小さいクロスプラットフォームなスタブリゾルバのライブラリを作って OSS で広く公開すれば、アプリの邪悪なキャッシュを討伐することが出来そう。

halfrackhalfrack 2012/01/27 21:35 もしくは、 gethostbyname を拡張する方向でしょうか。
gethostbyname2 は知っていたので、今さっき、 "gethostbyname3" でぐぐってみたところ「みんな不満溜まってるだろうなぁ」という感想を持ちました…。

halfrackhalfrack 2012/01/27 22:02 非技術屋の人が「浸透」って言ってる分にはしょうがないと思いますYO!
DNS で飯食ってるエンジニアが使ってるのがマズい、と伝えたかったんですが、論点が明確な文章に出来なくてごめんなさい。
マイナスイオンを例えに出したのも、「家電量販店で客と店員がマイナスイオンと言ってるのは許さんこともないが、理系の大学生が使ってたらアレ。」と思ってのチョイスだったり。
多少なりとも DNS で飯食ってるエンジニアは使うのを止めよう!

えむけいえむけい 2012/01/27 22:15 Operaの内部実装は知らないのでFirefoxの話になりますが、TTLは取得していません。一度取得した結果を3分間アプリケーション内部でキャッシュして使い回すので結果的に3分以下のTTLは無視されるようです。
以前はFirefoxも終了するまでキャッシュしていた気がするんですが、いつの間にか変わっていました。
IPv6対応のためgethostbynameは使っていません。もっともgetaddrinfoもTTLは取得できないようなので些細なことですけど。

halfrackhalfrack 2012/01/27 22:48 キャッシュ周りの挙動が素直というか、その辺のデフォルト値がリーズナブルなので、私も Firefox を使っています。良いですよね!
コンテンツプロバイダの運用者としても、何かの調査で User-Agent: を見ているときに、 Firefox を目撃することは少ないです。
というか、 getaddrinfo で議論するべきでした。カメぬいの角に頭をぶつけて死にます…。

hate_broccolihate_broccoli 2012/01/27 23:51 ごちゃごちゃうるせーよバカ
浸透で定義付けたんだよ

beyondDNSbeyondDNS 2012/01/28 00:17 DNS で飯食ってるエンジニアが使ってるのがマズいどころか、犯罪です。

halfrackhalfrack 2012/01/28 00:36 "前二つの不勉強な連中はおいておく"
「DNS を深く理解し、意図した TTL を越えてキャッシュされてしまうオペミスのパターンを知り尽くした DNS キャッシュリゾルバの運用エンジニア」と、「原因の追求を安易に放棄し時間経過に任せたりせず、問題の本質はブラウザのキャッシュにあると見抜ける優秀なコンテンツプロバイダの運用エンジニア」に向けてこのエントリを書きました。
「浸透」について暗黙の定義が両エンジニアで異なっていて、かみ合わない不毛な議論を繰り返しているのを見てられなくなりました。
DNS とか知らなくても生きていける感じの人に、このエントリを読ませたらうるせーバカでその通りだと思いますスミマセンスミマセン

u1pu1p 2012/01/28 00:56 浸透言う技術者はバカ技術者と定義付け〜。

来訪した某社営業。自分が説明できないので同行させた技術者がやっぱり浸透と言ってたんで、簡単な口頭試問して即お断りできた。
その点で「浸透」は良いバロメータかと。「当てにならないSIerチェッカ」として、食い物にされている顧客層に広く浸透させたいもんですわ。

halfrackhalfrack 2012/01/28 01:36 「浸透と言うエンジニアはアホ」という認識も、実は全てのエンジニアに共有されているわけではなくて、その認識のズレも良くない影響があるなと思っています。
通常業務で影響する範囲は正しく理解していて、 A レコードの変更でキャッシュリゾルバがどのような挙動をするか正しく知っているが、 DNS 界隈の動向までは追っかけてないので「浸透言うな」とか知らんがな。とかだろうと推測しています。 DNS コンテンツサーバ自体の運用は主要な仕事ではないので、外部に委託しているというのであれば、時間が有限なエンジニアとして正しい振る舞いだと思います。委託してたら NS レコードの変更とか自分ではやらないですからヘマしようが無いですし。
もちろん、 SI とかで DNS 周りの構築運用が主要な業務、というエンジニアが浸透って口走っていたら眉を潜めますけどね。

halfrackhalfrack 2012/01/28 01:49 同僚と話していて気がついたのですが、「TTL 86400秒の A レコードが 86400秒かけて各所のキャッシュサーバから消えていく」というのを「浸透」と定義している人も割といっぱいいるのですね。
他者との認識のズレを自覚することは難しいなと、上記の定義をしている層に気がついていなかった私はハッとしました。
自覚すら難しいものを修正するのはもはや無理なので、「浸透」という言葉自体を捨てたいです。

halfrackhalfrack 2012/01/28 05:17 携帯電話キャリアの GW が TTL を越えてアクセスしにくることを「浸透」と定義してる人もいるらしい。
上に挙げた例以上に、多様な定義のズレがあるようです。ううっ…。

twistedtwisted 2012/01/28 15:53 いえ。今後も使います。
貴方がはっきりと言い換えに使える言葉を提示できていれば一考の余地もありましたが、
結局「Web に限るなら」などと限定条件付けてるじゃないですか。
そもそも言葉をどう使うかということと、現象を理解出来ているということは別ですから。

halfrackhalfrack 2012/01/28 22:05 その1行上に「後はアプリのキャッシュ切れを待つだけ」と汎用的な表現も書きました…。
もちろん現象を理解出来ていることと、現象を正しく言葉で表現することは別であることには強く同意します。
せっかく現象を正しく理解出来ているのに、「浸透」という聞き手により高い確率で誤解される単語を使って、「DNS を理解してないバカ」レッテルを貼られるのはもったいないじゃないですかー。
条件によっては「人の所為にするなよ!」とか不要な怒りを買いかねませんしね。

beyondDNSbeyondDNS 2012/01/28 22:48 opera の動作をアプリケーションのキャッシュと呼ぶのですか。どこがキャッシュだと思われたのですか。

sadinfrasadinfra 2012/01/30 11:31 ・定義が無い
・技術的にツッコミどころ満載
・専門家ではない人たちが雰囲気で使っている

これって"クラウド"のことなんじゃ。

odenoden 2012/01/30 13:48 不的確な単語を利用することは技術者の伝統的な文化の一つですよね。
わざと的はずれな語を利用することでユーモアを示す尊重すべき文化です。

代表的なところだと「停止」と本来は訳すべきkillを「殺す」と表現することや、
認識されている不具合が納期を過ぎると「バグ」から「仕様」に改名されることは常識です。

個人的にはDNSの浸透もそのように解釈しておりましたが、
この記事が示すところはすなわちDNSの管理者は技術者などではなく、
単なる事務作業員の一種に過ぎないということを主張したいということなのでしょうか。

halfrackhalfrack 2012/01/30 19:55 「getaddrinfoで得られた結果をアプリケーションが長時間保持する」ことについての表現に、「アプリの DNS キャッシュ」を選んだのは確かにちょっとツッコミどころがあるような気がしてきました。
もうちょっと考える時間を下さい。

beyondDNSbeyondDNS 2012/01/30 20:09 odenさんへ DNSの管理者とはどういう人をイメージしておられるのでしょうか。確かにDNSレコードを書きかえるだけの作業員が大部分かもしれませんね。

halfrackhalfrack 2012/01/30 20:10 ぼくも「Opera は DNS 浸透圧が高い」とか大喜利するのは楽しいと思いますハイ。
しかし、「鯖が飛んだ」と「DNS の浸透」の間には明確な違いがあり、これを話すにはちょっとこのコメント欄は狭すぎるので、後日また別にエントリを書こうと思っています。(ちなみに、 1つのエントリで多くの話題を扱うと議論が発散しがちになるので、このエントリでは意図的に触れないように書きました。)
ちなみに結論だけ先に申しておきますと、ご指摘とはまったく逆の主張となります。

odenoden 2012/02/03 13:54 beyondDNSさんへ
>確かにDNSレコードを書きかえるだけの作業員が大部分かもしれませんね。
まさにそんな感じです

えむけいえむけい 2015/02/28 11:08 Firefox 36から、Windowsでは本当にTTLを取得するようになりました。
https://bugzilla.mozilla.org/show_bug.cgi?id=1084645

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証