1

現在のプロジェクトでは、システムからエクスポートされたデータに対して非常に複雑な計算を実行する必要があります。計算はサードパーティのソフトウェアによって処理されます (これは基本的に、私たちにとってブラック ボックスです)。このソフトウェアは 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で正しい軌道に乗っているかどうかの確認(またはその逆)です。

4

3 に答える 3

-2

答えは NO です - Camel は、あなたが説明するものを真似するのにストレッチすることができますが、それを行うのに最適なフレームワークではありません。

ExchangeApache Camel は、(camel-file コンポーネントを使用して) ファイルである可能性があるものとして、入力された unity of work 識別でいくつかの分割を実行します。しかし、分割すると、各「チャンク」は専用の に送信されProcessorます。

問題は、チャンクがExchangeそれ自体であり、メモリに入れることを意図していることです (後でタスクを並行して実行できるようにするため)。あなたの場合、データの一部がまだ大きすぎてメモリで処理できないと思います。そうでない場合、Camel はニーズに応え、説明したシステムとの統合に必要なすべてのポーリングを実行します。

あなたは何も提案しないように頼んでいますが、私があなたなら、代わりに Spring Batch を試してみます。

于 2015-10-14T13:30:11.540 に答える