1. 概要
Web アプリケーションでは、一部のレポートの生成にはデータベースの計算に時間がかかる場合があります。また、一部の Web サイトは気象情報を提供するため、温度情報を取得するためにリモート サーバーにアクセスして SOAP 呼び出しを行う必要があります。これらはすべて、複雑な情報の例です。 Web ページに複雑な情報を追加しすぎると、Web サーバーやデータベース サーバーに過負荷がかかる可能性があります。 JSP コード ブロック バッファリングにより、開発者はあらゆる種類の複雑な情報を自由に追加できます。
JSP はタグ ライブラリ内の複雑な Java コードをカプセル化して実行できるため、JSP ページ ファイルの保守が容易になり、専門家以外の開発者にとっても JSP ページ ファイルの使用がより便利になります。商用製品またはオープンソース製品のタグ ライブラリがすでに多数存在します。しかし、これらの製品のほとんどは、単純な Java Scriptlet で実装できる機能を実装するためにタグ ライブラリを使用するだけであり、JSP カスタム タグ ライブラリが登場する前に、ほとんど同じ機能を提供するいくつかの製品はありませんでした。
OpenSymphony によって設計された OSCache タグ ライブラリは、既存の JSP ページ内で高速メモリ キャッシュを提供する画期的な JSP カスタム タグ アプリケーションです。さまざまな形でキャッシュ製品を提供するベンダーがいくつかありますが、それらはすべてベンダー固有の製品です。 OSCache は、JSP 1.1 準拠のサーバー上で実行でき、既存の JSP コード ブロックをすべてのユーザーだけでなく、ユーザーごとにキャッシュすることもできます。 OSCache には、ディスクへのバッファリング、プログラム可能なバッファ フラッシュ、例外制御など、スケーラビリティを向上させるいくつかの高度な機能も含まれています。さらに、他の OpenSymphony 製品と同様に、OSCache のコードはオープン ソース ライセンスの下で自由に配布されます。
この記事では、架空のオークション Web サイトのデザインプロセスを例として、OSCache の作業プロセスを紹介します。この架空の Web サイトには、最近のオークション活動を報告する管理ページ、さまざまなプロモーション情報を含む完全に機能するホームページ、およびユーザーのすべての未決済のオークション活動に関する情報が含まれる特別なナビゲーション バーが含まれます。
2. 管理ページ
オークション Web サイトには管理レポートが含まれており、データベース サーバーがそのレポートを作成するのに数秒かかります。複数の管理者がシステムの動作を監視している可能性があり、管理者がアクセスするたびにレポートを再生成することは避けたいため、レポートの生成に時間がかかることが重要です。これを実現するには、ページ全体をアプリケーション レベルのバッファ タグにカプセル化し、1 時間ごとに更新します。他のベンダーの一部の製品にも同様の機能がありますが、OSCache の方が優れているというだけです。
わかりやすくするために、フォーマットの問題にはあまり焦点を当てません。管理ページを作成するときは、まずタグ ライブラリ宣言をページに追加します。
<%@ taglib uri="cachetags" prefix="cache" %>
次に、ページ全体をキャッシュ タグで囲む必要があります。キャッシュ タグのデフォルトのキャッシュ時間は 1 時間です。
<cache:cache> .... 複雑な管理レポート.... </cache:cache>
管理ページがキャッシュされました。管理者がページの生成後 1 時間以内に同じページに再度アクセスすると、以前にキャッシュされたページが表示されるため、データベース サーバーがこのレポートを再度生成する必要はありません。
3. ホーム ページ
オークション Web サイトのトップ ページには、Web サイトの活動が表示され、終了間近のオークションが宣伝されます。進行中のオークションの数、現在ログインしているユーザーの数、近い将来終了予定のオークションのリスト、および現在時刻を表示したいと考えています。これらのメッセージには、異なる時間精度要件があります。ウェブサイト上のオークションは通常数日間続くため、有効なオークション数をバッファする時間を 6 時間に設定できます。ユーザー数は明らかにより頻繁に変化しますが、ここではこの値を一度に 15 分間バッファーします。最後に、ページに表示される現在時刻が常にページにアクセスされた正確な時刻になるようにします。
ホーム ページでタグ ライブラリを宣言した後、まずバッファリングせずに現在の日付を直接出力します。
現在は次のようになります: <%=new java.util.Date()%>
次に、オークションに出品される日付のリストを表示します。短期で終了するもの:
<cache:cache> <ul> <% // 最新のオークションを含むイテレータを構築します。 Iterator Auctions = .... while (auctions.hasMore()) { Auction Auction = (Auction) Auctions .next(); %><li><%=auction%></li%< } %> </ul> </cache:cache>
最後に、この数値に必要な進行中のオークション アクティビティの数を表示します。 6時間バッファリングされます。キャッシュ マーキングにはデータをキャッシュする秒数が必要なため、6 時間を 21600 秒に変換します。
<cache:cache time="21600"> <% //データベースにクエリを実行して、オークション アクティビティの総数を取得します。 int AuctionCount = .. .. %> この Web サイトでは <%=auctionCount%> が進行中です! </cache>
ご覧のとおり、複雑なバッファリング システムを備えたホームページを構築するために使用するコードはほんのわずかです。このバッファリング システムはページの各部分を個別にバッファリングし、各部分のバッファリング時間はそれぞれの情報の変更頻度と完全に一致します。バッファリングのおかげで、ホームページにさらに多くのコンテンツを配置できるようになりました。これまでバッファリングを行わなかった場合、ホームページにコンテンツを置きすぎると、ページのアクセスが遅くなり、データベース サーバーに過度の負荷がかかる可能性もあります。
4. ナビゲーション バー
Web サイトを計画するときに、ショッピング カートの内容を左側のナビゲーション バーの下に表示することに決めたとします。ユーザーによるオークションの各商品の入札数と現在の価格、および現在のユーザーが最も高い入札をしたすべての商品のリストが表示されます。
セッション レベルのバッファリング機能を使用して、ナビゲーション バーに上記の機能を構築します。 Web サイト内の他のページがこのナビゲーション バーを参照できるように、次のコードをテンプレートまたはインクルード ファイルに追加します。
<cache:cache key="navbar"scope="session" time="300"> <% //抽出して表示します。現在の入札情報%> </cache:cache>
ここでは、キーとスコープという 2 つの重要な属性を紹介します。この記事の前半のコードでは、キャッシュ タグがコード ブロックの一意のキーを自動的に作成できるため、このキー属性を手動で設定する必要はありません。ただし、ここでは、このキャッシュされたコード ブロックをサイトの残りの部分から参照したいため、キャッシュ タグの key 属性を明示的に定義します。 2 番目に、scope 属性は、現在のコード ブロックをすべてのユーザーに対して 1 回バッファリングするのではなく、ユーザーごとにバッファリングする必要があることをキャッシュに指示するために使用されます。
セッション レベルのバッファリングを使用する場合は十分に注意する必要があります。これは明らかです。複雑なナビゲーション バーを使用してサーバーの負荷を 5 分の 1 または 10 分の 1 に減らすことはできますが、セッションごとに必要なメモリ スペースは大幅に増加します。 CPU 機能の観点から同時ユーザー数を増やすのは間違いなく理想的ですが、メモリ サポート能力の観点から同時ユーザー数が CPU の限界まで減少すると、このソリューションは理想的ではなくなります。
この記事の前半で述べたように、このバッファされたコード ブロックをサイトの残りの部分から参照したいと考えています。これは、ユーザーがオークションにアイテムを追加したり、他のユーザーがオークションに出品したアイテムに入札したりするときに、次回読み取られるときにナビゲーション バーに最新のコンテンツが含まれるようにバッファを更新する必要があるためです。このデータは他のユーザーのアクティビティによって変更される可能性がありますが、サイト上でアクションを実行した後も自分のリストが変更されていないことを確認すると、ユーザーは非常に混乱する可能性があります。
OSCache ライブラリによって提供されるフラッシュ タグは、バッファの内容をリフレッシュできます。ユーザー アクションを処理する次のコードをページに追加すると、この領域に影響を与える可能性があります:
<cache:flush key="navbar"scope="session" />
ユーザーが次回アクセスすると、navbar バッファ ブロックが更新されます。 。
これまでのところ、サンプル Web サイトの構築は完了し、実行を開始できるようになりました。 OSCache の例外処理機能を見てみましょう。バッファ ブロック内で Java 例外が発生するなど、バッファされたコンテンツが無効になった場合でも、OSCache タグ ライブラリを使用すると、プログラムでコンテンツを表示できます。この例外制御機能を使用すると、データベース サーバーと Web サーバー間の接続を切断できますが、Web サイトは引き続き実行できます。 JSP 1.2 仕様では TryCatchFinally インターフェイスが導入され、タグ自体が Java 例外を検出して処理できるようになります。したがって、マークアップをこの例外処理コードと組み合わせて、JSP ページをよりシンプルかつ整理することができます。
OpenSymphony は、追加のバッファリング メカニズムと、バッファリングによって使用される RAM とディスク領域を管理できる、より管理しやすいメイン システムを実装することを計画しています。これらの機能が導入されると、Web サイトの応答性と信頼性をさらに向上させることができるようになります。
[結論]
OSCache は、よりカラフルでパフォーマンスの高い Web サイトの構築に役立ちます。 OSCache タグ ライブラリの助けを借りて、これを使用して、トラフィックのピーク期間やデータベース サーバーの過負荷など、Web サイトの応答性に影響を与えるいくつかの問題を解決できるようになりました。