2016-06-24 9 views
2

一度に1kタスクを処理すると予想されるバッチジョブがあります。そして、各タスクには平均で約12〜16分かかります。並列タスクのバッチ処理の設計手法

現在の実装では、すべてのタスクがブロッキングキューにプッシュされます。このキューからタスクをポップして処理するスレッドがあります。タスクの場合、実行のためにjavaのexecutorサービスを使用しており、すべてのサブタスクが処理されると、このタスクは完全であるとマークされ、キューから別のタスクを読み込みます。ネイティブライブラリを呼び出すため、内部で何をしているのか分からないため、タスク処理時間を最適化できません。

現在の実装では、24時間以上で約300タスクを処理できます。

私は、処理時間を短縮するのに役立つ適切なプラットフォームまたはフレームワークを探しています。

私はコンテナとしてのJava 1.7、OSGIとApache Karafを使用してい

PS:ここでのタスクは、500メガバイトの範囲の特定の画像を壊している - 4ギガバイト小さな塊にし、JPEG形式

にそれを保存します
+0

ある時点で100%のCPU負荷またはhdd負荷がありますか? – Jeroen

+0

はいCPUとネットワークの両方(ネットワークから処理しているため)は完全な24時間にわたって100%の使用率 – Sandeep

+0

を表示していますか?もしそうなら、私はネイティブライブラリが単にそれを取ると仮定します。 –

答えて

2

水平スケーリングの場合、私はメッセージングシステムを使用します。すべてのタスクをJMSキューに入れるだけです。その後、マシンのクラスタ上でkarafを起動し、それぞれが待ち行列で待ち受けるようにします。 JMSは自動的にプロセスをラウンドロビンに送ります。したがって、負荷が分散されます。