高可用性アプリケーションおよびサービスは、ハードウェアやソフトウェアの障害には関係なく、機能を継続的に提供します。このようなアプリケーションは、99.999% の時間利用可能であることから、ファイブナインの信頼性を実現していると言われることがあります。
Application Server では、次の高可用性機能を提供します。
高可用性セッション持続性
高可用性 JMS (Java Message Service)
RMI-IIOP 負荷分散とフェイルオーバー
Application Server は、HTTP 要求およびセッションデータ (HTTP セッションデータとステートフルセッション Bean データの両方) の高可用性を提供します。
Java EE アプリケーションは一般に、大量のセッション状態データを保持しています。Web ショッピングカートは、セッション状態の古典的な例です。アプリケーションはまた、頻繁に必要になるデータをセッションオブジェクトにキャッシュすることもできます。実際、ユーザーとの対話が多いほぼすべてのアプリケーションには、セッション状態の保持が必要になります。HTTP セッションとステートフルセッション Bean (SFSB) はどちらも、セッション状態データを保持しています。
サーバー障害の前後でのセッション状態の保持が、エンドユーザーにとって重要になることがあります。高可用性を実現するために、Application Server では、セッション状態データの格納方式として次の各タイプが用意されています。
クラスタ内の別のサーバーにおけるインメモリーレプリケーション
高可用性データベース (HADB)
ユーザーセッションを保持している Application Server インスタンスに障害が発生しても、セッション状態を復元することができ、セッションは情報を失うことなく動作を継続できます。
高可用性セッション持続性を設定する方法の詳細については、第 9 章「高可用性 (HA) セッション持続性とフェイルオーバーの設定」を参照してください。
Java Message Service (JMS) API は、Java EE アプリケーションおよびコンポーネントに対して、メッセージの作成、送信、受信、および読み取りを可能にするメッセージング標準です。この API によって、緩やかに結合され、信頼性が高く、非同期の分散通信が可能となります。Sun Java System Message Queue (MQ) は JMS を実装し、Application Server と密接に統合されているため、MQ を使用してメッセージ駆動型 Bean (MDB) などの JMS に依存するコンポーネントを作成できます。
接続のプールおよびフェールオーバーと、MQ クラスタを通じて、JMS の高可用性が実現されます。詳細については、第 10 章「Java Message Service 負荷分散とフェイルオーバー」を参照してください。
Application Server は JMS 接続プールとフェイルオーバーをサポートします。Application Server は JMS 接続を自動的にプールします。デフォルトでは、 Application Server は、指定されたホストリストから主 MQ ブローカをランダムに選択します。フェイルオーバーが発生すると、MQ は負荷を別のブローカに透過的に転送し、JMS セマンティクスを保持します。
JMS 接続のプールおよびフェールオーバーの詳細については、「接続プールとフェイルオーバー」を参照してください。
MQ Enterprise Edition は、ブローカクラスタと呼ばれる、相互に接続した複数のブローカインスタンスをサポートします。ブローカクラスタによって、クライアント接続はクラスタ内のすべてのブローカに分散されます。クラスタ化することで、水平方向のスケーラビリティーが提供され、可用性が向上します。
MQ クラスタの詳細については、「MQ クラスタと Application Server の併用」を参照してください。
RMI-IIOP 負荷分散では、IIOP クライアント要求が別のサーバーインスタンスまたはネームサーバーに分散されます。目標は、負荷をクラスタ間に均等に拡散して、スケーラビリティーを実現することです。また、IIOP 負荷分散を EJB のクラスタリングおよび可用性と結合すれば、EJB フェイルオーバーも実現されます。
クライアントがオブジェクトに対して JNDI 検索を実行すると、ネームサービスは、原則的に要求を特定のサーバーインスタンスにバインドします。それ以降、そのクライアントからの検索要求はすべて、同じサーバーインスタンスに送信されます。こうして、すべての EJBHome オブジェクトは、同じターゲットサーバーにホストされます。また、それ以降に取得された Bean 参照もすべて、同じターゲットホスト上に作成されます。JNDI 検索の実行時に、すべてのクライアントがターゲットサーバーのリストをランダムに選択するため、これにより負荷分散が効果的に実現されます。ターゲットサーバーインスタンスが停止すると、検索または EJB メソッド呼び出しは、別のサーバーインスタンスに処理が引き継がれます。
RMI-IIOP 負荷分散とフェイルオーバーは、透過的に発生します。アプリケーションの配備中に、特別な手順は必要ありません。クライアントアプリケーションが配備される Application Server インスタンスがクラスタに参加する場合、Application Server は、クラスタ内で現在アクティブなすべての IIOP 端点を自動的に検出します。ただし、端点の 1 つで障害が発生した場合に備えて、クライアントにはブートストラップ目的で少なくとも 2 つの端点を指定しておくことをお勧めします。
RMI-IIOP 負荷分散およびフェールオーバーの詳細については、第 11 章「RMI-IIOP 負荷分散とフェイルオーバー」を参照してください。
ハードウェア要件の評価、ネットワーク構成の計画、およびトポロジの選択を含む、高可用性配備の計画については、『Sun Java System Application Server 9.1 配備計画ガイド』を参照してください。また、このマニュアルでは、次に示すような概念への高レベルな導入も提供しています。
ノードエージェント、ドメイン、クラスタなどのアプリケーションサーバーコンポーネント
クラスタ内の IIOP 負荷分散
HADB のアーキテクチャー
メッセージキューのフェイルオーバー
高可用性機能を利用するアプリケーションの開発の詳細については、『Sun Java System Application Server 9.1 Developer’s Guide』を参照してください。
高可用性とともに最適なパフォーマンスを得るためにアプリケーションや Application Server を設定および調整する方法については、『Sun Java System Application Server 9.1 Performance Tuning Guide』を参照してください。このマニュアルでは、次のようなトピックが説明されています。
持続性の頻度および持続性のスコープの調整
ステートフルセッション Bean のチェックポイントの設定
JDBC 接続プールの設定
セッションサイズ
HADB のディスク使用、記憶域割り当て、パフォーマンス、およびオペレーティングシステム設定の調整
最適なパフォーマンスを得るためのロードバランサの設定