Windows 秘話キャッシュは身近なところに

Raymond Chen

キャッシュによってパフォーマンスを向上させることができますが、それにはキャッシュを正しく使用する必要があります。通常、キャッシュには、さまざまな調整事項があり、キャッシュのポリシーが正しく調整されている場合でも、キャッシュを正しく使用する必要があります。

ある実例をご紹介しましょう。ただし、基本的な論点に無関係なテクノロジの詳細について説明する必要が生じないように、ここで紹介する例は、読者の皆さんが簡単に理解できるような内容のシナリオに書き換えています。

ニューヨークを拠点とした企業で、文書をアーカイブする中央 Web サーバーを保有しているとしましょう。この企業では、「2005 年 6 月 23 日に保管されたジョンソン訴訟の棄却に関する請願書をください」という要求をすることがあります。この文書が変更されることはないので、これは固定的な Web ページと同じようなものだと言えます。請願書を更新する必要がある場合、元のファイルは既に正式に保管されているので変更されることなく、訂正内容が保管されます。元の請願書を変更するには、過去に戻るタイム マシンが必要です (それが実現できたとしたら、一見たいしたことがない行動によって、うっかり人類の歴史の流れを変えてしまう可能性があります)。

この使用形態は、Web プロキシ サーバーのキャッシュにも当てはまります。6 月 23 日付けの請願書が要求され、その後、すぐに他から同じ文書が要求された場合、プロキシ サーバーでは、中央サーバーにアクセスすることなく、最初の問い合わせと同じ結果を 2 つ目の問い合わせに対して提供することができます。

この企業の Web プロキシ サーバーでは既にキャッシュが採用されており、マイアミ支社は、このキャッシュ機能を活用するようになっていました。しかし、パフォーマンスの改善は見られませんでした。プロキシ サーバーに対して数回連続して同じ文書を要求しても、応答は中央サーバーに直接文書を要求するのと同じくらい遅いものでした。どこに問題があったのでしょうか。プロキシ サーバーがダウンしていたのでしょうか。

実際のところ、プロキシ サーバーは正常に機能しており、問題はプロキシ サーバーの配置場所にありました。マイアミ支社からニューヨーク本社へは低速な回線で接続されており、マイアミ支社では、ニューヨーク本社に配置されている Web プロキシ サーバーのキャッシュを使用していました。

図 1 から、プロキシ サーバーを使用しても通信速度が上がらなかった理由がおわかりいただけると思います。プロキシ サーバーが完璧に機能し、中央サーバーを経由せずに、すべての要求に対応できたとしても、文書はマイアミ支社とニューヨーク本社間の低速な接続経由で転送される必要があった、というのがその理由です。

fig01.gif

図 1 低速な接続を考慮していない場所に配置されたプロキシ サーバー (画像をクリックすると拡大表示されます)

キャッシュを使用する場合、キャッシュはキャッシュするものよりも高速である必要があります。この例では、マイアミ支社からプロキシ サーバーへの接続は、マイアミ支社から中央サーバーへの接続よりも高速でなければプロキシ サーバーを使用する意味がありません。つまり、プロキシ サーバーはマイアミ支社から近い場所に配置される必要があります。図 2 に示すように、プロキシ サーバーを最大限に活用するには、プロキシ サーバーはマイアミ支社に配置する必要があります。

fig02.gif

図 2 マイアミ支社にとってより役立つプロキシ サーバーの配置 (画像をクリックすると拡大表示されます)

マイアミ支社にプロキシ サーバーがあると、マイアミ支社の弁護士が 6 月 23 日付けの請願書を要求した場合、要求はローカルのプロキシ サーバーに送られ、キャッシュから文書をすばやく取得することができます。キャッシュにない文書は、中央サーバーから取得され、次にマイアミ支社で文書が要求されたときに備えてプロキシ サーバーにキャッシュされます。

キャッシュは時間的な局所性を活用していますが、マイアミ支社にプロキシ サーバーを移動することで、地理的な局所性も有効に活用しています。マイアミ支社の弁護士は、ニューヨーク本社の弁護士とは異なる文書を要求する傾向があるので (異なる訴訟を扱っているので当然のことです)、各オフィスで独自のキャッシュ データを保持することで、キャッシュをより役立てることができます。

この企業では、マイアミ支社にプロキシ サーバーを配置し、マイアミ支社では、ローカルのプロキシ サーバーを使用するようにオフィス内のコンピュータを設定しました。今ではパフォーマンスに満足しています。

Raymond Chen は自分の Web サイト「The Old New Thing」および同じタイトルの書籍 (Addison-Wesley、2007 年) の両方で、Windows の歴史と Win32 プログラミングについて扱っています。ソーダ水を使用すると、染みを消すことができます。