2

ここで、異なる JVM (おそらく異なるマシン) で実行されている複数の Java プロセスに作業を分散する必要がある状況があります。

1 から 1000 までのレコードを持つテーブルがあるとします。10 のセットを収集して配布する作業を探しています。1 から 10 のレコードを workerOne に送信するとします。次に、workerThree に 11 ~ 20 を記録します。などなど。言うまでもなく、workerTwo がそれを実行できない限り、workerOne が workerTwo の作業を実行することはありません。

この例は純粋にデータベースに基づいていましたが、ファイル処理、電子メール処理など、あらゆるシステムに拡張できます。

すぐに対応できるのは、Master/Worker アプローチを採用することだと少し感じています。ただし、ここではさまざまな JVM について説明しています。1 つの JVM がダウンしても、もう 1 つの JVM はその作業を続行する必要があります。

今、百万ドルの質問は次のとおりです。これを行うための機能を提供する優れたフレームワーク(生産準備が整っている)はありますか。データベース レコード、ファイル処理、電子メール処理などの特定のニーズの具体的な実装がある場合でも。

Java Parallel Execution Framework を見たことがありますが、それが別の JVM に使用できるかどうか、また一方が停止した場合にもう一方が継続するかどうかはわかりません。ワーカーは複数の JVM 上にある可能性があると思いますが、マスターはどうでしょうか?

詳細情報 1: JDK 1.6 要件のため、Hadoop が問題になります。それは少し多すぎます。

ありがとう、フランクリン

4

7 に答える 7

2

MapReduceHadoopを調べたいと思うかもしれません

于 2009-06-24T17:43:23.027 に答える
1

メッセージキューを使用することもできます。作業のリストを生成し、それを素敵な小さなチャンクにパッケージ化する1つのプロセスがあります。次に、それらのチャンクをキューに入れます。労働者の一人一人は、何かが現れるのを待ち行列で待っているだけです。その場合、ワーカーはキューからチャンクをプルして処理します。1つのプロセスがダウンした場合、他のプロセスがたるみを取ります。シンプルで人々は長い間そのようにやってきたので、ネット上にはそれに関する多くの情報があります。

于 2009-06-24T18:22:39.440 に答える
1

あなたが説明した問題は、マスター/ワーカー パターンを使用して解決するのが間違いなく最適です。

JavaSpaces (Jini フレームワークの一部) を調べる必要があります。これは、この種の作業に非常に適しています。基本的に、各タスクを Command オブジェクト内で実行するようにカプセル化し、必要に応じてサブクラス化するだけです。これらを JavaSpace にダンプし、ワーカーに一度に 1 つずつ取得して処理させ、完了したら再アセンブルします。

もちろん、パフォーマンスの向上は、レコードの各セットを処理するのにかかる時間に完全に依存しますが、JavaSpaces が複数のマシンに分散されていても、問題は発生しません。

于 2009-06-25T02:38:14.487 に答える
1

テラコッタならできると思います。Web ページを扱っている場合は、JBoss をクラスター化できます。

自分でこれを行いたい場合は、実行するジョブ、進行中のジョブ、および再スケジュールが必要な未完了のジョブを追跡するワーク マネージャーが必要になります。次に、ワーカーは何かをするように要求し、それを実行し、結果を送り返し、さらに要求します。

どのような仕事をしたいのかを詳しく説明することもできます。

于 2009-06-24T19:17:55.967 に答える
1

Hadoopをチェックする

于 2009-06-24T17:43:23.200 に答える
0

そのためにJgroupsを使用することを検討します。jvm をクラスター化し、ノードの 1 つをマスターとして選択して、ネットワーク経由でメッセージを送信することにより、他のノードに作業を分散できます。または、すでに作業項目をパーティション分割してから、パーティションの分散をマスター ノードで管理することもできます。 . JVM-4 がダウンした場合、マスター ノードによって認識され、マスター ノードは他のノードの 1 つにパーティション 1 のピックアップも開始するように指示します。使いやすいもう 1 つの代替手段は、redis pub sub サポートです。http://redis.io/topics/pubsub。しかし、私が気に入らないredisサーバーを維持する必要があります。

于 2014-10-15T19:41:02.153 に答える