web-dev-qa-db-ja.com

アプリケーションをグリッド/クラスター対応にするJava)に最適なライブラリは何ですか?

これは、負荷を分散し、追加の冗長性を提供することを目的として、サーバーのクラスター上でアプリケーションを実行する機能です。

GridGain のプレゼンテーションを見たことがあり、とても感動しました。

他に何か知っていますか?

28
Sarel Botha

いくつかあります:

現在、これらすべてを使用しているわけではありませんが、大部分を使用または調査しました。

GridGainとGigaSpacesは、キャッシングよりも グリッドコンピューティング を中心としており、(imho)データグリッドよりもグリッドの計算に最適です( 計算グリッドとデータグリッドの説明 を参照)。 GigaSpacesは本当に興味深いテクノロジーであり、無料バージョンやスタートアップ向けの無料フルバージョンなど、いくつかのライセンスオプションがあります。

CoherenceとTerracottaは、キャッシュを Maps として処理しようとします。これは、かなり自然な抽象化です。私はCoherenceをよく使用しました。これは優れた高性能製品ですが、安くはありません。テラコッタ私はあまり馴染みがありません。 Coherenceのドキュメントは時々少し不足していると思いますが、それは本当に強力な製品です。

OSCache Java WebアプリケーションにはかなりきちんとしたJSPタグがあるため、メモリ使用量と断片化を減らす手段として主に使用しました。コンパイルされたJSPを見たことがあれば、多くの文字列連結が行われていることを確認してください。このタグを使用すると、JSPコードとHTMLのセグメントの結果を1つの文字列に効果的にキャッシュでき、場合によってはパフォーマンスが大幅に向上します。

EHCacheは、私がWebアプリケーションでも使用した簡単なキャッシュソリューションです。分散キャッシュとしては決してありませんが、それは可能です。私はそれを迅速で汚い解決策と見なす傾向がありますが、それはおそらく私のバイアスです。

memcachedは、PHPの世界で特に普及しています(Facebookなどのサイトで使用されています)。これは非常に軽量で簡単なソリューションであり、同じプロセスで実行されないという利点があります。これがあなたにとって重要であるならば、他のテクノロジースタックとの相互運用性オプションは間違いなくより良いでしょう。

32
cletus

Hazelcastもチェックしてみてください。 Hazelcast は、キュー、トピック、マップ、セット、リスト、ロック、およびエグゼキュータサービスのオープンソースのトランザクション分散/パーティション実装です。作業はとても簡単です。クラスパスにhazelcast.jarを追加して、コーディングを開始するだけです。設定はほとんど必要ありません。

Runnable、Callableタスクを分散して実行することに興味がある場合は、Distributed Executor Serviceのドキュメントをチェックしてください http://code.google.com/docreader/#p=hazelcast

Hazelcast Apacheライセンスの下でリリースされ、エンタープライズグレードのサポートも利用できます。

20
Talip Ozturk

Infinispan を検討しましたか?これは、JBoss.orgのオープンソースデータグリッドプラットフォームです。詳細については、この(古い) ブログ投稿 プロジェクトの発表と、 InfinispanとHibernateの使用 などの興味深いブログ投稿を読むことをお勧めします。 a スタンドアロンキャッシュ 。さらに最近では、 Red Hatのエンタープライズデータグリッド簡単な「はじめに」ガイド 、そして DZone RefCard もあります YouTubeビデオ :)

6
Manik Surtani

@cletusの要約はかなり良いと思います。 Terracottaは、マップ形式の分散キャッシュ以上のものを提供していることをお伝えしたいと思います。 Javaヒープと同期プリミティブをクラスター化し、並行Javaプログラムを分散Javaプログラムに変換します。キャッシングを実行できますそれ(オープンソースキャッシュライブラリの分散バージョンの使用を含む)または他の多くのものを使用します。

作業配布の場合、Terracottaの上にいくつかの追加のライブラリが書き込まれます。特に、tim-pipes(メッセージ用)とtim-masterworker(Master-Workerスタイルの配布用)は、Terracottaの上に優れた抽象化です。このライブラリはTerracottaForgeにあります。

この最近追加されたページは、他のいくつかの潜在的なデータテクノロジーと比較して、少し追加情報を追加する可能性があります。

5
Alex Miller

[〜#〜] jppf [〜#〜] もいいですね。

4
raupach

リストに追加できるもう1つは、 Appistry CloudIQ です。これは分散コンピューティング環境です。 無料ダウンロード 最大5台のマシンとして利用できます。これには、負荷分散や、ハードウェア障害が発生した場合の作業の自動フェイルオーバーなどの機能が含まれます。

2
Brett McCann

また、チェックしてください ProActive

2
Lukas Grijander

もう少し下位レベルに移動したい場合は、 JGroups があります。これは、クラスタリングJavaプロセスの非常に基本的なものです。

2
james

グリッドコンピューティングの場合、 Ice Grid または DataSynapse GridServer を検討することもできます。これらは両方とも、タスクを分散するための非常に効果的なメカニズムを提供し、フェイルオーバーと冗長性を提供します。

1
John Channing

あなたの質問はさまざまな方法で解釈されていると思います。アプリケーションを「クラスター対応」するために使用できるライブラリについて質問します。

上記のライブラリの一部は、分散キャッシングなどの特定のクラスター機能を提供するのに役立ちますが、ワークロード管理を有効にする従来の方法は、J2EEコンテナーを使用することです。

クラスター化されたコンテナーインスタンスをセットアップすることにより、HA機能と作業負荷管理を利用できるようになり、クラスター化はアプリケーションレベルでほぼ透過的になります。クラスター化されるアプリケーションを作成するときは、状態の管理方法に注意する必要があるためです。たとえば、ある種のキャッシュを実装した場合は、各マシン間でキャッシュの状態を複製する必要があります。

良い出発点は、glassfishをダウンロードして、クラスター化されたglassfishインスタンスをセットアップすることです。

お役に立てば幸いです。

カール

1
Karl

非常に遅い答えですが、アプリケーションの構成方法に一部依存します。上記のアプローチのいずれかを使用する代わりに、実行可能ファイルをリモートで実行することをお勧めします。

リンクが不足していることをお詫びします-しかし、担当者がアップするまで、複数投稿することはできません。斜体の製品はGoogleにとって簡単なはずです。

実行可能ファイルをパラメトリック検索で実行する場合(たとえば、インスタンスごとにさまざまなオプションを使用して同じ実行可能ファイルを起動する場合)、従来のバッチアプローチが適切に機能します。これは非常に伝統的なハイパフォーマンスコンピューティングアプローチであり、現在も広く使用されています。これをエンタープライズ規模で処理するのに適したインフラストラクチャは、Platform LSFDataSynapse GridServer[ 〜#〜] pbs [〜#〜]または成熟するにつれてWindows HPC ServerGlobusCondorなどのオープンソース製品もご覧ください。アプリの大きさに応じて、LHCのような非常に大規模な科学プロジェクトに使用されるgLiteも確認できます。

従来のHPCアプローチは、コンピューティングインフラストラクチャを構成するプロセスからアプリコードを分離することでメリットが得られますが、パフォーマンスが低下する可能性があります。また、スループットは速くなりますが、長時間のシステムではメモリリークやその他の問題が発生しやすくなります。

1
Tim Barrass

Fura もチェックしてください

1
Lukas Grijander