現在のプロジェクトでは、システムからエクスポートされたデータに対して非常に複雑な計算を実行する必要があります。計算はサードパーティのソフトウェアによって処理されます (これは基本的に、私たちにとってブラック ボックスです)。このソフトウェアは Linux または Windows バイナリとしてあり、コマンド ラインでデータを使用して実行する方法を知っています。
1 つの CPU コアで 1 つのデータセットを処理するには、約 200 時間かかります。ただし、データセットをより小さなデータセット (構造的に同等) に分割し、計算を並行して実行する場合があります。後で、結果を簡単に集計できます。私たちの目標は、各データセットを 10 時間以内に処理できるようにすることです。
私たちの顧客は、独自のジョブ処理アプリケーションを持っています。インターフェイスはファイル システム ベースです。ジョブの EXE ファイル (はい、Windows ベースです) と構成 INI ファイルを受信フォルダーにコピーします。ジョブ処理アプリは、ノードの 1 つでこのジョブを実行します (エラーの処理、フェールオーバーなど)。 .) そして最後に、結果を送信フォルダーにコピーします。この独自のジョブ処理システムには数百の CPU コアが搭載されているため、データセットを 10 時間未満で処理するのに十分な能力があることは明らかです。30分弱でも。
さて、問題は、私たちのアプリケーションはこれまでのところ J2EE ベースで、多かれ少なかれ標準的な JBoss アプリです。そして、次のことが必要です。
- 独自のキューのようなジョブ処理システムと統合し、
- 信頼できる方法でデータセットを分割/集約します。
私には、私たちがしなければならないことの多くの部分は、スプリッターやアグリゲーターなどのエンタープライズ アプリケーション統合パターンに非常に似ているように見えます。そのため、 Apache Camelが実装に適しているかどうかを考えていました。
- メッセージの形式でジョブ (EXE + INI + データセット) を作成します。
- スプリッターは、データセットをいくつかの小さなデータセットに分割することで、大きなジョブ メッセージを小さなものに分割します。
- メッセージを着信ディレクトリに書き込んだり、独自のジョブ処理システムの発信ディレクトリからメッセージを読み取ったりするために、おそらく独自のメッセージング チャネルを実装する必要があります。
- ジョブ パーツの結果をジョブの 1 つの結果に集約するには、アグリゲーターが必要です。
しかし、私はまだ Apache Camel の経験がないので、適用可能性についてアドバイスを求めることにしました。
上記の問題を考えると、Apache Camel はこのタスクに適していると思いますか?
結びのメモ: 外部リソースやツール/ライブラリの提案を探しているわけではありません。私がApache Camelで正しい軌道に乗っているかどうかの確認(またはその逆)です。