2

タスクの同時操作を管理する必要があります。つまり、一度に実行できるのは、このタスクの 1 つのバージョンだけです。

問題は、マルチサーバー環境で実行することです。

要件:

  • メソッドのインスタンスを一度に実行できるようにします。(OS ミューテックス)。
  • マルチサーバー環境で動作する必要があります。
  • プロセスが停止した場合、Mutex をドロップする必要があります。
  • 堅牢で成熟したソリューションである必要があります。

環境:

  • Windows サーバー (オンプレミス)
  • 。ネット
  • アズール

これまでに検討したこと:

  • OS ミューテックス: オンプレミスで動作しますが、プロセスの終了時にロックが解放されるかどうかは不明です。また、Windows が堅牢なミューテックスをサポートしているかどうかも不明です。
  • DB フラグ: オンプレミスで機能し、マルチサーバーで機能します。プロセスの終了時にロックを解除しません。
  • AppFabric: オンプレミスで動作しますが、追加のセットアップ手順は望ましくありません。マルチサーバーで動作します。ロックを取得するとタイムアウトするように設定できますが、プロセスが終了してもロックは解除されません。(今のところ最高)
  • CIFS ファイル ロック: オンプレミスで動作し、マルチサーバーで動作し、プロセスの終了時にロックを解除する必要があります。これは個人的な偏見かもしれませんが、堅牢なテストに失敗します。

これはかなり一般的な問題だと思いますが、コミュニティが一般的にどのように解決しているかを知りたいと思っています。

特に、CIFS ロック ソリューションや MSMQ を使用できるかどうかについて意見を聞きたいです。

4

1 に答える 1

1

Windows Azure ストレージの使用に問題がない場合は、Windows Azure BLOB を使用して、その BLOB のリースをタイムアウト付きで取得できます (使用できる最大時間は 1 分です)。リースを取得したサーバーはタスクを実行でき、期限が切れる前にリースを更新し続けることができます。

他のサーバーは、リーダー プロセスが終了した場合に備えて、引き続きリースの取得を試みます。

ポーリングの頻度は、他のプロセスがすぐに再開することがどれほど重要であるかによって異なりますが、おそらく余分なコストが発生する可能性があります (頻度が高すぎる場合や、そのリースで競合するポーリング サーバーの数によっては、わずかではない可能性があります)。

于 2013-09-11T17:52:09.123 に答える