そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

EJBをクラスタ環境にデプロイした場合、どのようにバランシングするか

つぎの3つの方法が頭に浮かびました。

  1. ロードバランサでRMIプロトコルをバランシング
  2. RMIの機能でリクエストをバランシング
  3. J2EEサーバの機能でリクエストをバランシング


まず、ロードバランサを導入することで、RMIリクエストを振り分けることができるか検討します。RMIのポートを振り分ければ良いだけなので、実現可能でしょう。ただし、ステートフルEJBの場合、HTTPのようにリクエストの中身を見てセッション・スティッキーな設定はできないだろう。(RMIプロトコルを解釈する高機能なロードバランサは存在するのかも知れない。)


J2EEサーバのEJBレプリケーション機能と組み合わせた場合、どのホストでリクエストを受け付けても同じ処理をできると思うので、ロードバランサで適当に振り分けても大丈夫かもしれないが、レプリケーションクラスタ化するホスト数が増えた場合に速度・負荷が心配になります。


RMIの標準機能については、3番のJ2EEサーバの機能を先に見つけてしまったので、J2EEサーバの機能拡張がわざわざあるということは、RMIの標準機能ではないのだろうと推測してあまり調べてません。


結論としては、J2EEサーバの機能でできるようです。以下、発見した製品のみまとめました。


Oracle Application Server 10g
http://otndnld.oracle.co.jp/document/products/as10g/1013/doc_cd/web.1013/B28598-01/servclus.htm


BEA WebLogic Server 7
http://jp.bea.com/e-docs/wls/docs70//cluster/load_balancing.html#161434
http://edocs.beasys.co.jp/e-docs/wls/docs92/rmi/rmi_api.html

TomcatとかJBossとかどうなってるんだろう。