先日 Twitter 上で議論した際に整理したので、せっかくなので残しておきます。
下記のような説明を作業内容のすりあわせの時点で必要に応じて深堀して行えばいいだけのことなのに、なぜウソで丸め込むのか、という議論です。
Twitterでは短文にするために分かりにくい点などがあったので一部補足しています。
目次
DNS の仕組みについて
DNSはその情報をもっているサーバに問い合わせ、その応答をキャッシュしながら利用する仕組みです。
- キャッシュとは
- 利用の度に毎回問い合わせると、そのサーバや通信経路に負荷をかけることになるので、ため込んで再利用する仕組み
DNS におけるキャッシュの動作
DNSの仕様でそのキャッシュを利用できる時間(TTL)は決まっていて、そのTTLを過ぎてまたその情報を利用する場合は再度問い合わせることになっています。
TTLはその情報(レコード)を持っているサーバ(コンテンツサーバ)が指定します。
情報の書き換え後について
TTLに従う実装のみを想定した場合、書き換えたサーバに対して問い合わせた結果が正しい(かつそのサーバが正しく権威サーバとして利用できる状態になっている:要別途説明)ことを確認することで、情報の書き換え作業が完了したことを確認できます。
DNSの情報を書き換えた場合、情報を使う側が問い合わせに来てくれるまでその新しい情報が使われるようになりません。
そのため、最長でTTLに従った時間分、新旧どちらの情報が使われるかが確定できない状態になります。
- 例)TTLが1時間に設定されているレコードを書き換えた場合
-
1. 過去1時間以内にそのレコードを参照していない環境(つまりキャッシュが既に切れている環境)では即新しい情報が利用されます。
2. 例えば40分前にそのレコードをキャッシュした場合、書き換えまでの40分の時点で残り20分キャッシュが残っていることになるので、20分の間はキャッシュされている旧情報が利用されます。
3. 書き換え1分前にキャッシュされた場合、上記と同様、59分の間キャッシュされている旧情報が利用されます。
4. 上記2.3.はいずれの場合も、手動でキャッシュを消すことにより1.と同じ状態を作ることができます。
また、「問い合わせに答える」仕組みなので、聞きに来てくれない限り、その環境で新しい情報は利用できません。
ここが「浸透」というのにはふさわしくない部分。
[important]ただし、世の中にはTTLに従わない、仕様に合わない実装もあり、いつまでも古い情報を使うものもあるため、__「すべて」の環境で新しい情報を使うようになることは保証できません。__
(DNSはそういう仕組みです)
[/important]
[追記 date="2014.09.25."]
TTLに従わないキャッシュの実装を明確に確認したわけではなく、都市伝説との指摘もありますので一部削除します。
ただし、アプリケーションレベルではどのような実装でもあり得ますので(たとえば1度問い合わせた結果をプロセスを落とすまで再利用する)、新しい情報を使うことを保証できないことは変わりありません。
[/追記]
「浸透いうな」について
浸透いうな! http://www.e-ontap.com/dns/propagation/ も是非ご覧ください。
安易に言葉狩りの一種と考えず、またスラングの一種といった解釈もせず、何を言っているのかを理解しようとしてみることをおすすめします。
- 技術者ですら理解していなそうな人が多い仕組みを、間違った印象を植え付ける間違った用語で理解することは害でしかありません。
- また、それっぽい言葉、でお客さんをごまかして説明から逃げるような技術者によるビジネスに明るい未来はありません。
「浸透いうな」は単にそんな説明するな、というより、業界の技術者がその意味を理解できるくらい勉強して客をだますようなコミュニケーションをとらないビジネスをしましょう、なんだとおもいます。
— kaz. Suenaga / 末永 和史 (@kazSuenaga) March 26, 2014
こちらの記事もどうぞ
DNSについて。 DNSの動作についての自分なりの理解をまとめたものです。
DNSサーバの変更の際の手順。 移行作業手順の例です。
あくまで現時点での自分なりの理解の整理ですが、少しでもお役に立てば。
ご指摘等、歓迎です。