ここでは、Application Server の高可用性機能の設定方法について説明します。この節の内容は次のとおりです。
Web アプリケーションの記述子設定
高可用性 Web アプリケーションに対して持続セッションデータを保証するために、高可用性データベース (HADB) には、HTTP セッションデータを保存するためのバックエンドストアが用意されています。ただし、HADB のデータの保存と読み取りに関連するオーバーヘッドが生じます。セッション持続の各種スキーマと、それらがパフォーマンスや可用性に与える影響について理解すると、高可用性に関する Application Server の構成時の意思決定に役立ちます。
通常は、アプリケーションサーバーインスタンスの 2 倍の数の HADB ノードを保持します。アプリケーションサーバーインスタンスごとに 2 つの HADB ノードが必要です。
Application Server では、セッションデータを HADB に書き込むことによって HTTP セッションの持続性とフェイルオーバーの機能が提供されます。持続性の頻度を指定することにより、サーバーが HADB に書き込む頻度を制御できます。
持続性の頻度は、管理コンソールの「設定」 > 「config-name」 > 「可用性サービス」 (「Web コンテナの可用性」) で指定します。
web-method
time-based
ほかの条件がすべて同じであれば、持続性の頻度に time-based 指定すると、web-method を指定した場合よりもパフォーマンスは向上しますが、可用性は劣ります。これは、セッション状態が、取得間隔 (デフォルトは 60 秒) で指定された間隔で持続性ストア (HADB) に書き込まれるためです。その間隔内にサーバーインスタンスで障害が起きると、セッション情報が HADB に最後に書き込まれたあとにセッション状態に発生したすべての更新が失われます。
持続性の頻度に web-method を指定すると、サーバーは 、各クライアント要求に応答する前に、HTTP セッション状態を HADB に書き込みます。このため、持続されるデータのサイズに基づく応答時間に影響を及ぼす可能性があります。可用性が重要で、ある程度のパフォーマンス低下は許容できるアプリケーションでは、このモードの持続性の頻度を使用します。
web-method 持続性の頻度の詳細については、『Sun Java System Application Server Enterprise Edition 8.2 高可用性 (HA) 管理ガイド』の「Web コンテナの可用性の設定」を参照してください。
持続性の頻度に time-based を指定すると、サーバーは、取得間隔と呼ばれる一定の間隔で持続性ストアにセッション情報を保存します。取得間隔は、「設定」 > 「config-name 」 > 「Web コンテナ」 (「マネージャープロパティー」) で指定します。config-name は、設定の名前です。デフォルトの取得間隔は 60 秒です。取得間隔が経過するたびに、専用スレッドが起動されて、メモリー内のすべてのセッションの繰り返し処理が行われ、セッションデータが保存されます。
一般に、持続性の頻度に time-based を指定すると、web-method を指定した場合よりも高いパフォーマンスが得られます。これは、クライアントに対するサーバーの応答が、HADB へのセッション情報の保存操作による影響を受けないためです。可用性よりもパフォーマンスが重要な場合は、このモードの持続性の頻度を使用します。
管理コンソールの「設定」 > 「config-name」 > 「可用性サービス」 (「Web コンテナの可用性」) で持続性の頻度を指定できますが、同じページで持続性の範囲も指定できます。
各持続性の範囲の詳細な説明については、『Sun Java System Application Server Enterprise Edition 8.2 高可用性 (HA) 管理ガイド』の第 9 章「高可用性 (HA) セッション持続性とフェイルオーバーの設定」を参照してください。
session
modifed-session
modified-attribute
持続性の範囲に session を指定すると、サーバーは、変更されたかどうかに関係なく、セッション全体のデータを HADB に書き込みます。このモードでは、要求ごとにすべてのセッションデータが持続されるので、バックエンドストアには常に最新のセッションデータが保持されますが、パフォーマンスは低くなります。
持続性の範囲に modified-session を指定すると、サーバーは、HTTP セッションの状態を調べます。サーバーは、データが変更されている場合にかぎり、セッションデータを HADB に保存します。このモードでは、セッションが変更されている場合にのみ HADB を呼び出してデータを持続するため、session モードよりも高いパフォーマンスが得られます。
持続性の範囲に modified-attribute を指定すると、属性の相互参照は行われず、アプリケーションは setAttribute() と getAttribute() を使用して HTTP セッションデータを操作します。この方法で書き込むアプリケーションでは、このセッション範囲の性質を活かして高いパフォーマンスを得ることができます。
HTTP セッションサイズがパフォーマンスに与える影響を知っておくことは重要です。パフォーマンスは、持続する必要があるセッションデータのサイズに反比例します。セッションデータは、直列化された形式で HADB に格納されます。そのため、データの直列化、BLOB としての挿入、さらに取得時の直列化復元によるオーバーヘッドが生じます。
24K バイトまでのセッションサイズでは、パフォーマンスは変わらないままであることがテストで判明しています。セッションサイズが 100K バイトを超え、同じバックエンドストアが同じ数の接続で使用される場合は、スループットが 90% 低下します。
HTTP セッションサイズの決定に注意を払うことが重要です。サイズの大きい HTTP セッションオブジェクトを作成する場合は、「HADB のチューニング」で説明されているように HADB ノードを計算します。
チェックポイントでは、ステートフルセッション Bean (SFSB) の状態が HADB に保存されます。これにより、サーバーインスタンスに障害が発生した場合に、SFSB の処理がクラスタ内の別のインスタンスに継続され、Bean の状態が復元されます。チェックポイント操作が行われるデータのサイズと、チェックポイント操作の実行頻度によって、特定のクライアントとの対話での応答時間における追加のオーバーヘッドが決まります。
SFSB のチェックポイント は、さまざまなレベルで有効にできます。
サーバーインスタンスまたは EJB コンテナ全体
アプリケーション全体
特定の EJB モジュール
個々の EJB モジュール内のメソッド単位
最適なパフォーマンスを得るには、sun-ejb-jar.xml ファイルに <checkpointed-methods> タグを追加して、Bean の状態を大きく変えるメソッドのみにチェックポイントを指定します。
詳細については、『Sun Java System Application Server Enterprise Edition 8.2 Developer’s Guide』の「Using Session Beans」を参照してください。
Application Server では、JDBC を使用して HADB データが保存および取得されます。最適なパフォーマンスを得るには、もっとも高速と予測される HADB 読み取り/書き込み操作に対して JDBC 接続プールを設定してください。
JDBC 接続プールは、管理コンソールの「リソース」 > 「JDBC」 > 「接続プール」 > 「pool-name」で設定します。接続プールの設定には次の項目があります。
初期および最小プールサイズ: プール内で維持される初期および最小接続数 (デフォルトは 8)
最大プールサイズ: クライアント要求に応じるために作成できる接続の最大数 (デフォルトは 32)
プールサイズ変更量: アイドルタイムアウト時間が経過したときに削除する接続数
アイドルタイムアウト: プールで接続がアイドル状態のままでいられる最長時間 (秒単位)。デフォルトは 300
最大待ち時間: 接続がタイムアウトになるまでに、呼び出し側が待つ時間 (ミリ秒単位)
最適なパフォーマンスを得るには、ノードあたりの接続数が 8 〜 16 のプールを使用します。たとえば、4 つのノードが設定されている場合は、通常プールサイズを 32 に、最大プールサイズを 64 に設定します。「アイドルタイムアウト」と「プールサイズ変更量」の値は、監視統計に基づいて調整します。
最適なパフォーマンスを得るには、次の設定を使用します。
接続検証: Required
検証方法: meta-data
トランザクション遮断レベル: repeatable-read
cacheDatabaseMetaData: false
eliminateRedundantEndTransaction: true
プロパティーを追加するには、「プロパティーを追加」ボタンをクリックし、プロパティー名と値を指定して、「保存」をクリックします。
JDBC 接続プールの設定の詳細については、「JDBC 接続プールのチューニング」を参照してください。