ASP(アクティブ・サーバー・ページ)やJSP(Javaサーバー・ページ)といった動的コンテンツの配信を高速化できるソリューションが充実してきた。動的コンテンツを意識したキャッシュである。Webページ単体ではなく,ページを構成するコンポーネントごとにキャッシュするかどうかを設定できる。専用のキャッシュ・サーバー製品が国内に登場したほか,主なアプリケーション・サーバーにも同様の機能の実装が進んでいる。

(河井 保博=kawai@nikkeibp.co.jp,実森 仁志=hjitsumo@nikkeibp.co.jp)

 ASP(アクティブ・サーバー・ページ),JSP(Javaサーバー・ページ)といった動的コンテンツの配信を高速化するための手法が整いつつある。動的コンテンツを意識したキャッシュ機能を実装する製品が充実してきたからだ。

 例えばカナダのスパイダ・ソフトウエアのキャッシュ・サーバー製品「SpiderCache」。丸紅ソリューションが,2002年2月,国内で発売した。米BEAシステムズ,米IBM,米オラクル,米サン・マイクロシステムズなどのWebアプリケーション・サーバーにも,動的コンテンツ向けのキャッシュ機能が実装され始めている(表1)。米マイクロソフトの「.NET Framework」にも,同様のキャッシュ機能が実装される。米インクトゥミが3月に日米で同時発表した「Personal Edge」,近く日本市場にも登場しそうな米ファイングラウンド・ネットワークスの「Condensor」といった製品も,動的コンテンツ配信の高速化に効果が高い。

 ここで言う動的コンテンツは,頻繁に更新される情報やユーザーごとに異なる情報を含んだ,サーバー側で動的に生成されるWebページ。最近では,パーソナライゼーションをはじめ,動的コンテンツ提供するサイトが増えている。さらに今後Webサービスが台頭してくれば,複数のWebサービスを組み合わせた動的コンテンツが増えることは必至である。

 ただ,動的に生成されるWebページは,内容が同じまま再度ユーザーに提供される可能性が低いため,キャッシュしないのが一般的。アクセス要求があるたびに,サーバーはオブジェクトの取得からページ生成までの一連の処理を実行しなければならない。ほんの一部しか内容が変わっていない場合でも,毎回Webサーバー側でページ全体を生成しなければならず,高速レスポンスを実現しにくい。

 そこで注目されるのが,動的コンテンツを効率的にキャッシュできる製品。簡単に言うと,これらの製品は,動的に生成されるWebページのうち,頻繁に変わる情報とあまり更新されない情報を切り分け,それぞれに異なるキャッシング・ルールを適用できる。Webページ中の静的な部分や,頻繁に更新される情報でも短時間のうちに多数のアクセスがあるような部分には,キャッシュの効果を期待できる。

製品カテゴリ 製品名 メーカー名 動的コンテンツのキャッシュ機能の概要
キャッシュ・サーバーなど Personal Edge 米インクトゥミ キャッシュした過去のWebページと最新情報を比較し,更新された差分を自動算出。ブラウザ側に搭載されたPE Agentがローカル・キャッシュのベース・ページと受信した更新情報から最新の情報を再現する
SpiderCache カナダのスパイダ・ソフトウエア キャッシュ・サーバー・ソフト。ASP,JSPなどのファイルの内容を解釈して,ページの一部分だけをキャッシュできる。データベース上のデータ更新などのイベントに応じてキャッシュを自動廃棄させることも可能。丸紅ソリューションが販売
Condensor 米ファイングラウンド・ネットワークス キャッシュした過去のWebページと最新情報を比較し,更新された差分を自動算出。更新情報には,ベース・ページと更新情報を融合させるプログラムも内蔵されるため,ブラウザ側に特別なソフトは必要ない。国内での提供時期は未定
アプリケーション・サーバーなど WebLogic Server 6.1J 米BEA システムズ JSPファイルで生成したWebコンテンツの一部または全部をキャッシュできる。サーブレットの実行結果をキャッシュすることも可能
WebSphere Application Server V4.02 米IBM サーブレットの実行結果をキャッシュできる
Oracle9i Application Server R1.0.2.2 米オラクル 主要なWebコンテンツをキャッシュできる。外部からXML(拡張可能マークアップ言語)形式の命令を送ることで,キャッシュされているコンテンツを廃棄させられる
iPlanet Application Server 6.5 米サン・マイクロシステムズ サーブレットの実行結果をキャッシュできる
.NET Framework1.0 米マイクロソフト ASP.NETで生成したWebコンテンツをキャッシュできる。Cacheオブジェクトと呼ぶ機能を利用して,複数のコンテンツを関連付けておくと,1つのコンテンツが更新された際に,キャッシュされている関連コンテンツすべてを自動的にキャッシュから破棄するなどの設定が可能
表1●動的コンテンツのキャッシュ機能を提供する製品

タグを使ってページを部分キャッシュ

図1●動的Webページを構成する部品ごとにキャッシュの有無を選択可能に
例えば,JSPファイルなどに含まれるJavaScriptの一部分や,JavaScriptから呼び出すサーブレットごとに,実行結果をキャッシュするかしないか,キャッシュの有効期限をいつまでにするかを設定できる。実際にキャッシュできる部品や,キャッシュしたデータを破棄する機能などは,製品ごとに異なる。

 もう少し具体的に見てみよう。SpiderCacheは,Webサーバーとインターネットの間に設置して,リバース・プロキシとして使う製品。アプリケーション・サーバーのキャッシュ機能も,ほぼ同じ使い方になる。

 まず,もとのコンテンツのコンポーネントごとに,独自のタグ・ライブラリなどで定義されたキャッシュ用のタグを付け加える。このタグの記述として,キャッシュするかどうかやキャッシュ保持期間(TTL)を指定する。こうすると,キャッシュ・サーバーがタグを識別して,動的に生成されるWebページのうち,キャッシュ可能な部分だけを選んで蓄積できる(図1[拡大表示])。

 ただし,製品によって,対象になるコンテンツの種類や,キャッシュできる内容に違いがある。例えばSpiderCacheはASP,JSP,CGI(共通ゲートウエイ・インタフェース)スクリプトなど,さまざまな環境に対応できる。これに対してアプリケーション・サーバーは,JSPやサーブレットといったJava環境が前提になっている。.NET FrameworkはWebアプリケーション実行環境であるASP .NET(アクティブ・サーバー・ページ.NET)にしか対応しない。

 また,アプリケーション・サーバーでも,製品によってキャッシュ対象はさまざま。例えば,BEAの「WebLogic Server6.1J」は,JSPに含まれているJavaScriptで生成したコンテンツをキャッシュできる。JavaScriptの一部をキャッシュすることも可能である。これに対して,IBMの「WebSphere Application Server4.02」,サンの「iPlanet Application Server6.0」などは,サーブレットで生成したコンテンツをキャッシュできる。

 キャッシュの有効期限より早くコンテンツが更新された場合には,古い情報を能動的にキャッシュから廃棄させることも可能である。バックエンドのデータベース上のデータが更新されるなどのイベントが発生した時点でキャッシュ・コンテンツを廃棄する。例えばOracle 9i ASは,外部からXML(拡張可能マークアップ言語)形式の命令を送付してコンテンツを廃棄できる。SpiderCacheやほかのアプリケーション・サーバー,.NET Frameworkも,イベント・ベースでの廃棄の仕組みを持つ。こうした仕組みを使うと,データベース・アクセスを伴うコンテンツでも,少なからずキャッシュの恩恵を受けられる。

差分を自動検出する製品も

図2●米インクトゥミが発表した「Personal Edge」の概要
ネットワーク上で更新された部分だけを抜き出してユーザーに提供することで,アクセス回線に流れるデータ量を減らし,レスポンスを高速化させる。クライアント側にPersonal Edge(PE) Agentを搭載。インターネット上のキャッシュ・サーバーがアクセス要求とWebサイトからの応答結果をPE Page Serverに転送。Page Serverは,過去の同じやり取りの結果と比較して更新されている部分を算出してキャッシュ・サーバーに返信する。エンドユーザー側では,PE Agentがキャッシュから受信した更新情報と ローカル・キャッシュのベース・ページから最新のWebページを再現する。

 一方,違うアプローチでほぼ同様の効果を得られる製品も登場している。インクトゥミのPersonal Edge(PE)とファイングラウンドのCondensorである。

 これらの製品は,ASPやJSPのスクリプトでキャッシュする部分を指定するのではなく,キャッシュする部分としない部分を自動的に判断する(図2[拡大表示])。エンドユーザー側(ブラウザ)にキャッシュした内容に,更新情報を加えて最新コンテンツを再現する。ブラウザが受信するのは更新された情報,つまり差分だけ。このため,ラスト1マイルのアクセス回線部分に流れるデータ量が減り,レスポンスが向上する。SpiderCacheやアプリケーション・サーバーのように,もとのコンテンツにキャッシング・ルールのタグを加えるような変更が必要ない点もメリットの1つである。

 例えばPEの場合。ISPのネットワーク上,あるいはサーバー側にTraffic Serverが設置されているとしよう。Traffic Serverは,ユーザーからのアクセスが発生すると,当該コンテンツに対するアクセス要求と応答の両方を「PE Page Server」に送信する。この動作が数回繰り返されると,PE Page Serverは,受け取ったコンテンツから変更されていない部分を自動的に検出し,リファレンスとなる「ベース・ページ」を生成してTraffic Serverに返す。

 Traffic Serverは,エンドユーザーにベース・ページと差分情報という2つのデータを返信する。同じユーザーからのアクセス要求に対しては,差分情報だけを送信する。ここで,クライアントに搭載された専用ソフトの「PE Agent」が,Webブラウザのローカル・キャッシュに格納されたベース・ページと,受信した差分情報を組み合わせて,最新のWebページを再現する。

 Condensorもほぼ同じ機能を提供する。PEとの違いは,専用クライアントが不要な点。差分データには,ベース・ページに差分を反映する命令も含まれていて,ブラウザ上でベース・ページを変換するイメージでWebページを動的に生成できる。