現在、Steam Web API を使用して DotA 2 マッチをクロールするサービスを作成しています。ソリューションをスケーラブルにしたいので、クロール ジョブを同時にバッファリングして処理できるようにしたいと考えています。それがキューの考えの理由です:
すべてのコンポーネントは、異なるコンピューター/VM 上で実行できる必要があります (メモリ内またはプロセス間同期はありません)。クロール ジョブは次のようになります。
Job 1: Crawl match 1234 with options ABC
Job 2: Crawl match 2345 with options BCD
データの性質上、同じ試合を指す複数のジョブがキューに入れられる場合があります (2 人のプレイヤーが同じゲームをプレイした場合など)。したがって、キューが提供できない同期メカニズムが必要です (クローラーは、同じ一致のデータを同時に書き込もうとしてはなりません)。
私の実際の質問は、同じデータにアクセスする必要があるキューワーカーを同期するために使用できるパターンはありますか?
私が考えたアプローチの 1 つは、クローラーが一致できるようにする別のサービスを導入することでしたLock
(これは、データベースから一致データを読み書きする前に行う必要があります)。
しかし、それは多くの新しい質問と要件をもたらします:
- コントローラーをスケーリングする方法は?
- コントローラーが壊れたら?
- キュー ワーカーがマッチのロックを解除しない場合はどうなりますか?
- ...
興味がある場合は、おそらく使用するテクノロジを次に示します。
- キュー: Windows Server のサービス バス
- サービス: .NET Web API
- データベース: SQL Server 2012