Web ファームがいつ作成されるか、先を見据えて...
電子メールの送信、ファイルのサムネイル化/処理など、さまざまなバックグラウンド タスクを実行するさまざまな Windows サービス アプリケーションがあります。
サーバー ファーム環境では、理論上は各マシンに各サービスをインストールして実行できますが、ビジネス オブジェクト ベースの「先書き優先」や望ましくないタスクの重複が原因で競合が発生する可能性があります。の回。
「先に書いたほうが勝つ」というシナリオは、問題を解決するか項目をスキップするコードまたはロジックによって克服できます。(基本的なキューイング メカニズム (クエリ リストとプロセス レコード) の場合は、再試行されます)
タスクを複製するために、トランザクションでタスクを実行して、他のプロセスが同じリソースを取得するのを防ぐことができますが、それらは単に待機するだけであり、再び発生したことに基づいてログインを処理する必要があると思いますか? これは当てはまりますか?
タスクの重複を防ぐために、起動する最初のサービスによって設定されるデータベースに「ロックフラグ」を書き込むメカニズムを構築することを考えています。このフラグは日付が付けられ、サービスのインスタンスを参照します。フラグを「所有」するサービスがタスクを実行し、この日付を定期的に更新します。また、サービスがフラグを所有していない状況では、各サービスにタイムアウト/許容度の設定があり、許容度をチェックし、必要に応じて引き継ぎます。
これは妥当な解決策のように聞こえますか?それとも、その段階でより優れたメッセージ キューイング ベースの解決策に進むべきですか?
テクノロジー: C# / ASP.NET / SQL Server