EJBのクラスタリング
EJBのクラスタリング
"weblogic-ejb-jar.xml"でクラスタ化を設定しているEJBをコンパイルすると、EJBHomeインタフェースとEJBObjectインタフェースはレプリカ対応(注)となります。
レプリカ対応したスタブはルーティングアルゴリズムを指定することにより、ロードバランシングを実現できます。メソッド呼び出しの途中でエラーが発生するとスタブがその例外をハンドリングして、別のレプリカに対して呼び出しを行います。
- ラウンドロビンのロードバランシング
- クラスタ内のWebLogic Serverインスタンスに対して順番にリクエスト送信します。HTTPサーバのプラグインにもこのアルゴリズムが適用されます。
- 重みベースのロードバランシング
- 各サーバに事前に値を割り当て、リクエストの送信頻度をサーバごとに管理できます。クラスタ内の物理サーバのスペックが異なるときに使用します。
- ランダム方式のロードバランシング
- クラスタ内のサーバインスタンス間で均等にリクエストが送信されます。
サーバアフィニティ
WebLogic Server 8.1からはサーバアフィニティという仕組みが導入されて、上記のロードバランシングと組み合わせて利用することができます。このサーバアフィニティを採用することで、クライアントとサーバインスタンスの間で開かれるIPソケットの数を抑えることができます。アフィニティの動作を以下に解説します。

図2:アンフィニティの動作
- クライアントがクラスタ内のサーバからコンテキストを取得します
- クライアントはそのコンテキストでオブジェクトをルックアップします
- クライアントからの接続はコンテキストを取得したサーバと固定されて、移行の呼び出しはサーバAを採用します
- 次に同じような処理で、クライアントがサーバBとの接続をしています。このとき、サーバBで障害が発生すると、既に接続しているサーバAにオブジェクトBをフェールオーバして処理を継続します
ステートレスセッションBean
ステートレスセッションBeanは、"weblogic-ejb-jar.xml"にステートが保持されていないことを示すだけで、自動フェールオーバが有効になります。
ステートフルセッションBean
ステートフルセッションBeanはHTTPセッションのレプリケーションと同様のレプリケーション方式を採用して、プライマリのBeanインスタンスのステートをセカンダリのBeanインスタンスにレプリケーションします。トランザクションのあるEJBの場合、トランザクションのコミット直後にレプ リケーションされます。トランザクションのないEJBの場合、メソッド呼び出しの直後にレプリケーションされます。
J2EE仕様にあるように、ステートフルセッションBeanはトランザクション非対応です。コミット後のレプリケーション前にプライマリで障害が発生すれば、コミット前の状態にフェールオーバされます。
エンティティBean
読み込み専用エンティティの場合、レプリカに対応したスタブがホームの呼び出しに返されます。このスタブはロードバランシングを行います。回復可能なエラーが発生した時には、自動的にフェールオーバを行われません。
読み書き用エンティティの場合には、ロードバランシングとフェールオーバはホームのみ行われます。