住商情報システムは11月11日,Javaアプリケーションに手を加えることなく,JavaVM(Java Virtual Machine)間でクラスタ化するミドルウエア製品「Terracotta Virtualization Server(TVS)」と「Distributed Shared Objects(DSO)」を2006年1月に出荷すると発表した。開発は米Terracotta。価格は未定。
TVSとDSOを組み合わせると,複数のJavaVM上で同じJavaオブジェクトを共用できる。利用例の一つに,複数のWebアプリケーション・サーバー間で,ユーザーごとのセッション・オブジェクトを共有する場合が挙げられる。一般的なWebアプリケーション・サーバーにもセッション・オブジェクトを共有する仕組みはある。だが,データベースを介する,メモリー間通信を利用しても処理のオーバーヘッドが大きい−−などの理由で,サーバー台数に対してリニアに性能が上がらないケースが多かった。「TVSとDSOを利用すれば,サーバーの台数が増えても性能を落とさずにオブジェクトを共有できる」(Terracotta上席副社長 Bob Griswold氏)という。すでにNTTデータ先端技術が,約150台のWebアプリケーション・サーバー(Apache/Tomcat)をクラスタ化するために利用している実績もある。
Webアプリケーション・サーバー上でセッション・オブジェクトを共有する例を基に,仕組みを説明する。Webアプリケーション・サーバーには,エージェント・ソフトであるDSOをあらかじめ組み込んでおく。そして,共有したいセッション・オブジェクトのクラス情報を定義ファイルに記述する。アプリケーションには,特別な変更は必要ない。
ユーザーがWebアプリケーション・サーバーにログインしてセッション・オブジェクトが生成されるとき,DSOはJavaVMとクラスの間に割り込み,仮想的なオブジェクトIDを提供する。本来,異なるJavaVMで呼び出されたクラスは,たとえ同じクラスから生成したとしても,異なるオブジェクトIDが割り当てられる。しかし,DSOが提供する仮想的なオブジェクトIDはアプリケーション・サーバー間で共通化されているので,あたかも同じセッション・オブジェクトを共有しているように扱える。
セッション・オブジェクトの生成・破棄や,セッション・オブジェクトの更新内容の伝搬を制御するのが,TVSの役割である。セッション・オブジェクトを更新する場合であれば,DSOが変更内容だけを抽出し,TVSを介してほかのアプリケーション・サーバー上のDSOに反映することになる。セッション・オブジェクトの場合は更新が競合することはないが,必要があればTVSはロック制御も行う。また,ユーザーのログアウトによりセッション・オブジェクトがどのアプリケーション・サーバー上でも使われなくなると,DSOに指示してオブジェクトを破棄(ガベージ・コレクションを制御)する。
Terracottaは,2006年1月にバージョン2.0(現行は1.1)をリリースするのと同時に,特定の用途向けのパッケージも提供する予定。具体的には,Webアプリケーション・サーバー上のセッション・オブジェクト共有に特化した「セッション・リプリケーション・モジュール(SRM)」(仮称)などが検討されている。