GridGain(サイト・英語)の最新バージョンは、Javaベースでオープンソースのグリッドコンピューティングフレームワークで、ロードバランシングとデータパーティショニングの機能をサポートする。GridGain Systems社(サイト・英語)は先ごろ、グリッド内の負荷の高いノードで実行しているスケジュールされたジョブを、負荷の低いノードで実行するために「盗む」、「ワークスティーリング」機能を含む、フレームワークのバージョン2.0(source)をリリースした。
ロードバランシング機能は、ラウンドロビン(デフォルト)、重み付きランダム、アダプティブ、およびアフィニティ(スティッキー)ロードバランシングなどの、いくつかの異なるポリシーをサポートする。Oracle Coherence(source)製品のための、特別なアフィニティロードバランシングもある。
ワークスティーリングSPIは、グリッドのノード間でスケジュールされたジョブを(グリッド内の負荷の高いノードから、負荷の低いノードに、割り当て)、動的にロードバランシングすることで動作する。この機能は、グリッド内で実行されるジョブのフェイルオーバーだけでなく、ジョブのスケジューリングもサポートする。グリッドのジョブを盗むという設計のアイデアは、Java SE 7(サイト・英語)のために計画された、Doug Lea氏によるJava Fork/Joinフレームワーク(PDF・英語)に基づいている。この機能は、高速なノードがジョブを盗むことで、低速なノードにジョブが滞留するのを避けるために、利用することができる。フェイルオーバーSPIは、ジョブを盗むために最初のリクエストを送ったノードに切り替わったことを確認する。
巨大なデータセットを処理するときに、注意しなければならないことは、グリッド内のノード間で、ネットワーク越しに渡されるデータの量だ。GridGainは、巨大なデータセットの処理を最適化するために、以下の機能を備えている。
- データパーティショニングとアフィニティロードバランシング:この機能(source)は、グリッドノード全体のデータをパーティショニングして、データのあるノードに正確にグリッドジョブを送り、同じ場所でデータを計算することで動作する。
- ノード分割:グリッドノードは、それぞれに指定されたデータセット上で動作する、別々のグループに分割される(source)。これは、グリッドにジョブを送るだけの、グリッド内のいくつかのノード(マスター)と、これらのジョブを実行するだけの、その他のノードのグループ(ワーカー)、というシナリオにおいて役立つ。
- 中間チェックポイント:時間の掛かるジョブを扱うとき、それはしばしば、中間のジョブ状態を定期的の保存するのに役立つ。チェックポイントSPI(source)がこの機能を提供するので、もしジョブが別のノードにフェイルオーバーしても、初めからジョブを再実行しなくてもよい。
GridGain 2.0のリリースに含まれる、その他の新しい機能(source)。
- モニタリング:開発者は、GridNodeMetrics(source)インタフェースを利用しているすべてのグリッドノードに関する、実行時のメトリクスを取得することができる。これらのメトリクスには、グリッド内のアクティブなジョブ、休止中のジョブ、および廃棄されたジョブに関する詳細だけでなく、CPUおよびヒープメモリの情報も含まれる。
- リソースインジェクション:GridGainは現在、@GridUserResource(source)アノテーションを利用することで、タスクやジョブへの、どんなリソースのインジェクションでもサポートする。@GridSpringApplicationContextResource(source)アノテーションを利用することで、Springのアプリケーションコンテキスト(source)にインジェクションすることもできる。
- グリッドジョブコンテキスト:この機能は、(GridJobContext(source)インタフェースを利用して)特定のジョブや(GridTaskSession(source)インタフェースを利用して)タスクに参加するすべてのジョブの属性にアタッチできるようにする。
GridGainフレームワークは、JUnit、AspectJ、Spring、JBossおよびJGroups、GlassFish、WebLogic、WebSphere、Coherence、Mule、JXInsight、およびGigaSpacesなどの、いくつかのオープンソースおよび商用のフレームワークやアプリケーションサーバを統合(source)する。
すべてのテストの実行を全面的に高速化するために、グリッド全体でJUnit4テストやテストスイートを実行するのに利用できる、分散JUnit4(source)のGridGainタスクもある。分散JUnitテストは、@GridifyTest(サイト・英語)アノテーションを利用して設定される。これは典型的に、いくつかのユニットテストと統合機能テストを実行するのに時間の掛かる、アプリケーションの夜間ビルドの一部として、アプリケーションのテストスイートがすべて実行される、統合された開発サーバの環境で役立つ。
GradGainは、GridTaskSessionAttributeListener(source)インタフェースを利用して設定できる、非同期通知をサポートする。それはまた、タスクを管理するためのチェックポイント機能を持つ、GridTaskSession(source)インタフェースを利用するジョブ間の依存性も扱う。