2

各バッチ プロセスを処理する複数のワーカー スレッドを作成するマルチスレッド バッチ処理プログラムがあります。

ここで、アプリケーションをスケーリングして 1 億レコードを処理するには、サーバー ファームを使用して各バッチ プロセスの処理を行う必要があります。サーバー ファームで実行されている要求を処理するための C# のネイティブ サポートはありますか? このセットアップで動作するように C# 実行可能ファイルをセットアップする方法について何か考えはありますか?

4

3 に答える 3

2

fejesjoco が言ったように作業を分散するマネージャーを作成するか、処理する特定の数の作業単位のみを取得するようにアプリを十分にスマートにすることができます。それらのユニットの処理が完了したら、db サーバーに接続して次のバッチを取得します。すすぎ、完了するまで繰り返します。

補足として、ほとんどの分散ワーカー システムは次のように実行されます。

  1. 作業はバッチごとにサーバーでキューに入れられます
  2. ワーカー プロセスはサーバーにチェックインして操作するバッチを取得します。使用可能なバッチは、そのワーカーによって処理されているものとしてマークされます。
  3. (オプション) ワーカー プロセスは、ステータス レポートと共にサーバーにチェックインします (例: 10% 完了、20% 完了など)。
  4. ワーカー プロセスは作業を完了し、結果を送信します。
  5. 手順 2 に進みます。

もう 1 つのオプションは、3 つのワーカーがまったく同じデータ セットを処理するようにすることです。これにより、結果を比較することができます。2 つ以上で同じ結果が得られた場合は、それらの結果を受け入れます。3 つすべての結果が異なる場合は、問題があることがわかり、データ/コードを検査する必要があります。通常、これは、ワーカーが (SETI のように) コントロールの外にある場合、または大規模な計算を実行していて、潜在的なハードウェアの問題を修正したい場合にのみ発生します。

時々、現在の労働者数とセット全体の進捗状況を表示する管理アプリがあります。個々のバッチにかかるおおよその時間がわかっている場合は、ワーカーがいつ停止したかを検出して、新しいプロセスに同じバッチを取得させることができます。

これにより、何も再コーディングすることなく、必要なだけ個々のワーカーを追加または削除できます。

于 2010-12-28T15:54:56.850 に答える
1

クラスタリングの組み込みサポートはないと思います。最も単純なケースでは、サーバー間で入力を分割する単純なマネージャー アプリケーションを作成してみてください。プロセスはお互いを認識する必要がないため、何も書き直す必要はありません。

于 2010-12-28T15:42:34.427 に答える
0

Why not deploy the app using a distributed framework? I'd recommend CloudIQ Platform You can use the platform to distribute your code to any number of servers. It also handles the load balancing, so you would only need to submit your jobs to the framework, and it will handle job distribution to the individual machines. It also monitors application execution, so if one of the machines suffers a failure, the jobs running there will be restarted on another machine in the group.

Check out the Community link for downloads, forums, etc.

于 2011-01-14T16:14:44.480 に答える