Java ベースのキャッシュとクラスタ,そしてデータ配信のソリューションである Hazelcast のバージョン2.0 が先日リリースされた。今回のリリースでは営利企業用の Enterprise Edition と,オープンソースコミュニティ用でフリーの Community Edition の2つが提供される。
Apache バージョン2 ライセンスでリリースされる Community Edition は Google Code にホストされている。今回のバージョン2では,各ノードを他の全ノードが均等にバックアップするように設計された分散バックアップ機能が装備されている。"分散バックアップに関してはまったく新しいものと言ってよいでしょう。" Hazelcast の創設者である Talip ozturk 氏は InfoQ にこう語っている。
バックアップデータを分散することによって,ノード損失がクラスタに与える影響を最小化します。メモリ上にビッグデータを保持しているような場合には,この違いは大きなものです。
メカニズムとしては,データ容量の多少に関わらず他ノードすべてに対して等分したデータを,クラスタ全体に渡って分配する,というものだ。例えば 50 ノードで構成されるクラスタで,各ノードが 20GB の主データと 20GB のバックアップデータを保存しているとすれば,ノード1のデータは残り 49 のノードに 1/49 ずつバックアップされることになる。ノード1がダウンしても移行操作は必要なく,クラスタのバランス状態が保持される。新しいノードが追加されれば,Hazelcast はデータをそのノードへ徐々に移動して,最終的にはすべてのノードの負荷を均一にする。
バージョン2の新機能としては,他に次のものがある。
- 並列 I/O。通信の In と Out を組み合わせて,単一のスレッドで処理する (バージョン 1.0 では,各メンバが In 用に1つ,Out 用に1つのスレッドを持ち,NIO チャネルを使用して他メンバと通信していた)。
- コネクション管理の改善。コネクションのダウンを宣言する前に,Hazelcast がその修復を試みるようになった。
- 新しいイベントコンテナ。キュー,リスト,セット,トピック用である。
Enterprise Edition にはさらにオフヒープ・ストレージ (Hazelcast では Elastic Memory と呼ぶ),セキュリティ機能の拡張,ネイティブ C# クライアントが追加されている。
セキュリティ機能としては,クラスタメンバとクライアントいずれの認証にも利用可能な JAAS ベースの実装を備えている。クライアント操作に関するアクセス制御のチェックにも使用されている。アクセス制御はエンドポイントのアカウントとエンドポイントのアドレスを併用して管理する。セキュリティの有効化と設定は XML を使用して,あるいは API を通じて行うことができる。
Elastic Memory は本質的に,ガベージコレクション (GC) による長時間の停止に対する回避策である。GC 停止を完全に排除した Azul の C4 コレクタを例外とすれば,商用 JVM のガベージコレクション停止時間はヒープサイズに比例して増大するが,Elastic Memory は JVM ヒープのサイズを抑制することができるため,結果的にガベージコレクションの停止時間が短縮される。Ozturk 氏の示すガイドラインは次のようなものだ。
JVM がそれぞれ 10GB 以上のデータを保持していて,使用する値が 1KB 以上の場合には,Elastic Memory は効果を持ちます。JVM のデータが 4GB 程度か,あるいは値が1KB未満の場合は推奨しません。
Hazelcast の Elastic Memory 実装はバイトバッファを直接使用して構築されている。各バッファは,デフォルトでは 1KB の大きさのブロックに分割される。Oracle の Coherence や Terracotta の Ehcache,その他多数のキャッシュベンダが提供している機能に近いものだ。
Enterprise Edition のライセンスモデルはノード単位の年間サブスクリプションに基づく。価格情報は sales@hazelcast.com を通じて入手することができる。Hazelcast では Community Edition を対象とした2レベルのサポートも合わせて提供している。提供価格の指標は 同社ウェブサイト で公開されている。