マルチインスタンス ワーカー ロール用に、Azure 上の Redis 内に分散ロックを作成しようとしています。ワーカー ロールの複数のインスタンス間で、一度に 1 つのスレッドだけがアクセスできる「クリティカル セクション」を作成する方法が必要です。
私はこれを行うために StackExchange.Redis クライアントを使用していますが、便利なことに、TakeLock\ReleaseLock
すでにtransactional の実装があり、 SO に関するこの回答は、使用するパターンとロックの作成方法の詳細についての良いアイデアを与えてくれます。
この件についてさらに読むと、distlock に関するこの Redis の記事も読みました。この記事では、分散ロック メカニズムを実装しようとするときのフェイルオーバー ベースの Redis ノードの弱点について説明しています。
Azure Redis キャッシュは (基本層とは別に) マスター/スレーブ フェールオーバーを実装していますが、これは、 1 つのものだけがロックされることを保証するために、レッドロックパターンを実装する必要があることを意味しますか?
さらに、私は疑問に思っています:
- Azure Redis の例の接続文字列にマスターとスレーブがリストされていないように見えるのはなぜですか? Azure はマスター/スレーブ フェールオーバーを別の方法で実装しましたか?
- redlock の.NET 実装の 1 つが、マスター/スレーブの使用をサポートしないことを選択したのはなぜですか? (使用法セクションの最初の段落を参照) これは単に選択によるものですか、それともマスター/スレーブが redlock の有効な使用法ではないためですか ( redis の記事ではそうではないようです)