2017-09-27 8 views
0

私はプロジェクト内のすべてのモジュールを実行している複数のvmsを持っています。ユーザーが作成した各要求は、すべてのモジュールで処理する必要がありますが、一度だけ実行する必要があります。したがって、VM1が要求を受け取った場合、module1は要求を部分的に処理でき、次にVM1またはVM2、またはクラスタ内の他のVMがモジュール2をピックアップして処理できます。等々。クラスタ内で実行されているJavaアプリケーションのロードバランシング

それぞれのVMは容量が限られているので、個々のVM間で作業を割り当てるためにロードバランサを使用したいと考えています。

これを解決するためのロードバランサ(Javaのオープンソース)がありますか、私の要件を解決するためにいくつかの負荷分散アルゴ(ラウンドロビン、重み付けなど)を使用して実装する必要がありますか?

編集1:

各モジュールは、それ自体が独立しているJavaクラスですが、そのstarted.Each Vmはメッセージ・バスを聞いている前に行われなければ、以前のモジュールを必要とします。バスにメッセージが表示されたときに、vmがこれを選択して作業を開始できます。

答えて

0

オープンソースの豊富で幅広く使用されているHAProxy(TCP/HTTPロードバランサ)を試すことができます。良い文書とは別に、利用可能な情報がたくさんあります。

+0

httpリクエストを処理するWebアプリケーションではありません。これは助けにならないかもしれません。 –

+0

これで、通信やメッセージの受け渡しのモードは何ですか。 – Shailendra

+0

各Vmはメッセージバスを聞いています。バスにメッセージが表示されたときに、vmがこれを選択して作業を開始できます。 –

0

並列化しようとしている問題の正確なセマンティクスに応じて、問題をいくつかのサイズの「作業パケット」にまとめることで、結果を得ることができます。次に、直前のパケットを終了するとすぐに、各VMが前記キューからパケットをポーリングするようにします。これは自己スケジューリングと呼ばれます。

+0

私は必要なもののような音。このアーキテクチャが使われている材料を教えてください。 –

+0

私はこのアプローチを実装している一般的な解決策はわかりません。原則は通常、カスタムソリューションをロールバックするのに十分シンプルです。 – Felk

+0

また、問題とその規模に応じて、このような集中キューを持つことはボトルネックになる可能性があります – Felk

関連する問題