Sun Java System Application Server Enterprise Edition 8.2 パフォーマンスチューニングガイド

高可用性に関する Application Server のチューニング

ここでは、Application Server の高可用性機能の設定方法について説明します。この節の内容は次のとおりです。

高可用性 Web アプリケーションに対して持続セッションデータを保証するために、高可用性データベース (HADB) には、HTTP セッションデータを保存するためのバックエンドストアが用意されています。ただし、HADB のデータの保存と読み取りに関連するオーバーヘッドが生じます。セッション持続の各種スキーマと、それらがパフォーマンスや可用性に与える影響について理解すると、高可用性に関する Application Server の構成時の意思決定に役立ちます。

通常は、アプリケーションサーバーインスタンスの 2 倍の数の HADB ノードを保持します。アプリケーションサーバーインスタンスごとに 2 つの HADB ノードが必要です。

セッションの持続性の頻度のチューニング

Application Server では、セッションデータを HADB に書き込むことによって HTTP セッションの持続性とフェイルオーバーの機能が提供されます。持続性の頻度を指定することにより、サーバーが HADB に書き込む頻度を制御できます。

持続性の頻度は、管理コンソールの「設定」 > 「config-name」 > 「可用性サービス」 (「Web コンテナの可用性」) で指定します。

持続性の頻度は、次のいずれかに設定できます。

ほかの条件がすべて同じであれば、持続性の頻度に time-based 指定すると、web-method を指定した場合よりもパフォーマンスは向上しますが、可用性は劣ります。これは、セッション状態が、取得間隔 (デフォルトは 60 秒) で指定された間隔で持続性ストア (HADB) に書き込まれるためです。その間隔内にサーバーインスタンスで障害が起きると、セッション情報が HADB に最後に書き込まれたあとにセッション状態に発生したすべての更新が失われます。

Web-method

持続性の頻度に web-method を指定すると、サーバーは 、各クライアント要求に応答する前に、HTTP セッション状態を HADB に書き込みます。このため、持続されるデータのサイズに基づく応答時間に影響を及ぼす可能性があります。可用性が重要で、ある程度のパフォーマンス低下は許容できるアプリケーションでは、このモードの持続性の頻度を使用します。

web-method 持続性の頻度の詳細については、『Sun Java System Application Server Enterprise Edition 8.2 高可用性 (HA) 管理ガイド』「Web コンテナの可用性の設定」を参照してください。

Time-based

持続性の頻度に 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

持続性の範囲に session を指定すると、サーバーは、変更されたかどうかに関係なく、セッション全体のデータを HADB に書き込みます。このモードでは、要求ごとにすべてのセッションデータが持続されるので、バックエンドストアには常に最新のセッションデータが保持されますが、パフォーマンスは低くなります。

modified-session

持続性の範囲に modified-session を指定すると、サーバーは、HTTP セッションの状態を調べます。サーバーは、データが変更されている場合にかぎり、セッションデータを HADB に保存します。このモードでは、セッションが変更されている場合にのみ HADB を呼び出してデータを持続するため、session モードよりも高いパフォーマンスが得られます。

modified-attribute

持続性の範囲に modified-attribute を指定すると、属性の相互参照は行われず、アプリケーションは setAttribute()getAttribute() を使用して HTTP セッションデータを操作します。この方法で書き込むアプリケーションでは、このセッション範囲の性質を活かして高いパフォーマンスを得ることができます。

セッションサイズ

HTTP セッションサイズがパフォーマンスに与える影響を知っておくことは重要です。パフォーマンスは、持続する必要があるセッションデータのサイズに反比例します。セッションデータは、直列化された形式で HADB に格納されます。そのため、データの直列化、BLOB としての挿入、さらに取得時の直列化復元によるオーバーヘッドが生じます。

24K バイトまでのセッションサイズでは、パフォーマンスは変わらないままであることがテストで判明しています。セッションサイズが 100K バイトを超え、同じバックエンドストアが同じ数の接続で使用される場合は、スループットが 90% 低下します。

HTTP セッションサイズの決定に注意を払うことが重要です。サイズの大きい HTTP セッションオブジェクトを作成する場合は、「HADB のチューニング」で説明されているように HADB ノードを計算します。

ステートフルセッション Beans のチェックポイント

チェックポイントでは、ステートフルセッション Bean (SFSB) の状態が HADB に保存されます。これにより、サーバーインスタンスに障害が発生した場合に、SFSB の処理がクラスタ内の別のインスタンスに継続され、Bean の状態が復元されます。チェックポイント操作が行われるデータのサイズと、チェックポイント操作の実行頻度によって、特定のクライアントとの対話での応答時間における追加のオーバーヘッドが決まります。

SFSB のチェックポイント は、さまざまなレベルで有効にできます。

JDBC 接続プールの設定

Application Server では、JDBC を使用して HADB データが保存および取得されます。最適なパフォーマンスを得るには、もっとも高速と予測される HADB 読み取り/書き込み操作に対して JDBC 接続プールを設定してください。

JDBC 接続プールは、管理コンソールの「リソース」 > 「JDBC」 > 「接続プール」 > 「pool-name」で設定します。接続プールの設定には次の項目があります。

最適なパフォーマンスを得るには、ノードあたりの接続数が 8 〜 16 のプールを使用します。たとえば、4 つのノードが設定されている場合は、通常プールサイズを 32 に、最大プールサイズを 64 に設定します。「アイドルタイムアウト」と「プールサイズ変更量」の値は、監視統計に基づいて調整します。

最適なパフォーマンスを得るには、次の設定を使用します。

標準属性に加えて、次の 2 つのプロパティーを追加します。

プロパティーを追加するには、「プロパティーを追加」ボタンをクリックし、プロパティー名と値を指定して、「保存」をクリックします。

JDBC 接続プールの設定の詳細については、「JDBC 接続プールのチューニング」を参照してください。