0

C# で長時間実行されるデータ フィード プログラムを開発しようとしています。データ処理は複数のサーバーで実行され、前のドキュメントの処理が完了すると、データがデータ処理ソフトウェアに供給される一種の長時間実行キューのようなものになります。

どうすればいいですか?おそらく 10,000 のドキュメントが 5 つの個別のサーバーに分散して処理され、ドキュメントはサーバーがビジーかどうか、およびサーバーが既に処理したドキュメントの数に基づいて分散されます。通常の負荷分散基準。サーバーを継続的に監視し、それに応じてデータをフィード/送信する Windows アプリケーションを作成できます。WCF サービスを使用する必要がありますか? Windowsフォームアプリケーション? Windows メッセージ キューまたは独自のメッセージ キューを構築する必要がありますか? 個々のドキュメントには 20 ~ 30 分かかる場合があり、1 万個のドキュメントがあるため、データのフィードは基本的に継続的に行われます。基本的にどのような状況でも、給餌プログラムがクラッシュ/停止することは望ましくありません。

これを開発するためにどのソフトウェアとアプローチを使用しますか? ポインタ、推測、アイデアはありますか?

4

1 に答える 1

0

Windows サービス (Visual Studio の Windows アプリケーションの一種) を使用する必要があります。

チュートリアル: コンポーネント デザイナーでの Windows サービス アプリケーションの作成

コントロール パネルで設定すると、ユーザーがログインしていなくても、オペレーティング システムが起動するたびに開始されます。また、読み取り/書き込みが必要なファイルにアクセスする権限を持つアカウントを使用してサービスを開始する必要があります。これ専用のアカウントを作成できます。

Windows サービス(これは、前の段落のことを行う方法を説明します)

処理されない単純な例外がサービスを突然停止するため、すべての例外をキャッチすることが絶対に必要です。

ジョブをキューに入れる方法はいくつかありますが、データベース テーブルのような簡単なものを使用することをお勧めします。このテーブルには、ジョブの定義を定義するために必要な列を含めることができます。また、プロセスに保留中/開始済み/成功裏に終了/終了済みとしてフラグを立てるための列と、関連するすべての追加情報 (開始時間と終了時間、処理コンピューターなど) を含めることができます。 . サーバー間の競合を避けるために、次の保留中のジョブを取得し、それをサーバーによって開始されたものとして設定する操作をトランザクションで保護する必要があります。

複雑な負荷分散手順を作成しないでください。本当に必要な場合は、スレッドの優先度を低いレベルに設定して、他のプロセスの速度が低下しないようにすることができます。

于 2012-04-18T00:16:17.607 に答える