はじめに
「DNSは浸透しない」とよく言われます。結構定期的に話題になるのですが、そのたびにモヤモヤしている部分がありました。
ちょうど最近話題になった記事があったので、この機会に個人的な考えを書いてみることにしました。
「浸透」とは
DNS浸透問題について書かれた記事を読むと、そもそも「浸透」という語のイメージが自分とは違っているように思います。
一応辞書的には goo国語辞書より引用すると、
1 水などが、しみとおること。「雨水が地下に—する」「堤防の—破壊」
2 思想・風潮・雰囲気などがしだいに広い範囲に行きわたること。「新しい生活様式が国民に—する」
3 ある液体または気体が、半透膜を通過して、他の液体または気体と混じり合い拡散する現象。「—圧」
となっています。これらに共通する挙動として、浸透はPull型であるということが言えるのではないかと思います。
例えば「水がしみわたる」場合の挙動を考えると、「水源から圧力をかけて強制的にしみわたらせる」というよりは、個々の水分子にかかる重力や分子間力によって自然としみわたっていく過程と思われます。
2の思想などが行きわたる過程も、個々人が独立にその思想を採用するかどうかを決定し、その結果として全体に広がる様子ではないでしょうか。
3の正確な原理は知りませんが、やはり外部からの強制的な圧力によってではなく、各分子の独立した挙動の結果だと思われます。
ということで元記事では
浸透・伝播・反映していくような Push 型のモデルは DNS にはありません。
と書かれていますが、そもそも浸透は Pull 型モデルだと思っています。
DNSの浸透
そうすると、各DNSキャッシュサーバにおいて、DNSエントリがTTL切れをむかえ、キャッシュからパージされ、新しいエントリに更新される、という挙動の結果として、新しいエントリの内容が広まっていく様子はまさに「浸透」ではないでしょうか。
個人的にこの挙動を説明する日本語としてこれ以上適切なものが思い浮かびません。
ちなみに浸透と一緒によく出てくる「伝搬・伝播」は隣接した者同士で伝わっていくニュアンスが強いと思うので、(隣接するキャッシュサーバに順に伝わっていくというわけではないので)DNSの挙動の説明としてはあまり適切ではないというのは理解できます。
「浸透・伝搬・伝播」とまとめて言っている方はこの隣接性が強くイメージされているのかもしれません。水の浸透の例であれば確かに隣接していない部分に直接水が到達することはありませんが、2番の「思想の浸透」ような例では隣接はあまり関係なく、浸透にとって隣接であることは必須でないと個人的には思っています。
「DNS浸透問題」
もともと「浸透いうな」というのは、TTLを適切に設定せずにDNSエントリを更新し、その言い訳として「浸透に時間がかかってるのでしょうがないです」というのが不適切である、という問題だったと理解しています。
だからといって「浸透」と言わなければ解決するというものでもないのではないでしょうか。
この問題についての言及を見ていくと、DNSの挙動を理解したうえでなお「浸透」と呼びたい人も散見されます。
明らかに間違った用語であるというならともかく、挙動を反映した用語(という理解も可能)なのに、言い訳に使われがちという理由だけで「いうな」と言われるのはかなり強いな、と思います。
浸透という言い方自体は認めたうえで「TTLを適切に設定すれば浸透にかかる時間を十分短くできる」という説明でもいいのではないかと思います。
おわりに
「DNS浸透いうな」側の記事ばかり目につくので「浸透といってもいいんじゃない?」と思って書いてみました。結構個人的なイメージの部分も大きいと思うので、必ずしもここで書いたことだけが正しいとも思いませんが、浸透という理由もあるよ、ということで。
追記(2024/1/1)
その後、元記事の著者であるdebiru_Rさんと会話させていただきました。
現時点ではお互い理解に至ったという状況ではありませんが、少し理解が進展した気がするので追記しておきます。
浸透する、しない派の違いとしてマクロとミクロという視点の違いがあるのではないかと思いました。
ミクロにキャッシュサーバの挙動を考えると、ユーザからのリクエストに反応する形でTTL切れキャッシュの破棄と更新を行うので、自動的に/自然とゾーンサーバの更新情報が広がってはいかない、という主張に見えます。
それに対し、私はゾーンサーバの更新情報がインターネット全体に拡散していく過程をマクロにとらえた結果、浸透というのが自然だと考えているように思われます。
例えば「噂が自然と広がる」という言い方は私は自然だと思います。これはミクロな会話は人的な行為ですが、社会全体における噂の拡散過程をマクロに捉えると、それはあたかも自然現象かのように見える、ということだと思います。
同じような視点の違いを
各DNSキャッシュサーバにおいて、DNSエントリがTTL切れをむかえ、キャッシュからパージされ、新しいエントリに更新される
という記述に対して、「そんな挙動をするキャッシュサーバはあるのか?」という反応でも感じました。
これは上記文章から「TTL切れを常時監視して切れると同時に破棄するキャッシュサーバ」を想定したのではないかという気がします。(確認は取っていないので違うかもしれませんが)
しかし私の意図としてはこの文章は単に「TTL切れ後にキャッシュがパージされる」という時系列を示しており、キャッシュの実装戦略(つまりパージをどのタイミングで実行するか)には言及していないつもりでした。
ここでもマクロとミクロの違いが出ているのかな、と思います。
一般にエンジニアはミクロな実装詳細を抽象化して隠蔽し、マクロに考える傾向があるのだと思いますが、人によってどこまで抽象化して考えるかが異なる、ということではないかという気がしています。
追記その2(2024/1/6)
その後、もう1件別の方とも会話させていただきました。
こちらも途中で終わってしまったのですが、「権威サーバの設定変更は即座にインターネット全体に反映するのだから、じわじわ浸透するようなイメージとは合わない」といったようなことを言われました。
これはおそらく「適切な設定をすれば」ということなのだと思います。
(もし任意の設定で真なら、そもそもDNS浸透問題は発生しないことになってしまうので)
私としては適切な設定をするかどうかでモデルが変わってしまうというのは不自然で、「間違った設定をすると浸透時間1週間だが、適切な設定をすれば浸透時間は0(のようにユーザには見える)」という方が自然に感じます。
ただ、私はこの会話から「浸透いうな」の意図が「ユーザに浸透を感じさせるな」ということなのではないかと思いました。ドメイン管理者は浸透時間が0に見えるように適切に設定変更することで、ユーザからすると(浸透時間0なので)あたかも浸透などという現象は発生していないように見えるというのが、目指すべきところではないでしょうか。それを達成するためにドメイン管理者のメンタルモデルから「浸透」を排除するのはやはり適切ではないと思いますが、ユーザの意識から「浸透」を排除すべきという点には同意します。
というわけでタイトルをそのように変更しました。