JBossASと商用サーバ

JBossASは起動すると勝手にクラスタ組んじゃったりするわけですが、商用サーバではクラスタ組めるのは上位製品のみ。WebSphereだとBaseとNetwork Deploymentで値段が4倍くらい違います。

JBossでは分散オブジェクトキャッシュとしてJBossCacheを内蔵してHibernateのL2キャッシュに使用できます。
同じことを商用サーバでやろうとすると、WebLogicだとOracleCoherence、WebSphereだとeXtremeScaleのObjectGridが必要。Coherenceは50万円/CPUから、WebSphere eXtremeScaleは$144/PVU(ObjectGrid単体でも買えるはずだけど単体の値段不明)。
(もっとも、JBossCacheのキャッシュローダにBerkeleyDBを使うとBerkeleyDBのライセンス料が50万円/CPUなので、Coherenceを高いとは言えないのかもしれませんが。)
Hibernateを前提とするにしても、L2Cacheの使用がそんなにパフォーマンスの改善に寄与するかは疑わしいと思っているのですが、どうなんでしょう。)

商用サーバを選択するケースというのは、どこに価格分の価値を見出しているのか考えてみました。

  • 集中管理機構。JBossは自律分散タイプだけれど、商用サーバはデプロイメント・マネージャとか管理サーバ経由で配下のサーバが全部管理できる。管理工数重要。
  • ノードエージェント。商用サーバではサーバインスタンスを監視して落ちたら再起動するような別プロセスが用意されており集中管理機構とリンクしている。
  • 現実的なセッション複製機構。商用サーバのセッション情報の複製は「ダウンしたとき代わりになるサーバへ情報を複製する」処理となっていて、フェイルオーバー対象になるかどうかわからないサーバにまで情報を複製するモードは存在しない。(JBossASもバディ・レプリケーションがあるけれど。)セッション情報をDBに書いて各サーバから参照することもできる(JBossASだとJBossCacheのキャッシュローダーをDBにすることが出来るけれど、各サーバで同じものを見に行くわけではない)。「いろいろな複製設定をそれぞれの種類のオブジェクトに適用できる」JBossASよりも、最適な構成に辿り着くまでの試行錯誤は短くて済みそう。
  • 商用ならではのニーズを満たす機能。クラスタ間通信のSSL化はWAN経由でクラスタ組むならニーズがありそう。トランザクションログファイルによるサーバ再起動時のトランザクション復旧はまだ分かるが、更にそのファイルの共有によって別インスタンストランザクションを復旧する機能はちょっとビックリ。(これらはいずれもWebSphereの機能)

同じような機能を実装しても、結局実装によってパフォーマンスは全然変わってきておかしくないし、商用サーバも中身で勝負しないとあれだけの金額は取れないだろうな…と思うのですが、どうなんでしょうね。