私は現在、単純な古いテーブル (SQL Server Service Broker ではありません) を使用して SQL Server Azure データベースにイベントが格納される分散型イベント ベース システムのリファレンス アーキテクチャをまとめているところです。
イベントは、新しいイベント メッセージのキューをポーリングするワーカー ロールを使用して処理されます。
私の調査では、複数のプロセッサがキューからメッセージを処理できるようにする解決策がいくつか見られます。私が見ている多くのパターンで私が抱えている問題は、複数のプロセスが単一のメッセージキューにアクセスしようとしているときに、ロックの管理などの複雑さが増すことです。
従来のキュー パターンでは、複数のプロセッサが 1 つのキューからプルすることを理解しています。ただし、イベント メッセージを任意の順序で処理できると仮定すると、キューとそのキュー プロセッサの間に 1 対 1 の関係を作成し、異なるキュー間で負荷を分散するだけの理由はないでしょうか?
queue_1 => processor_1
queue_2 => processor_2
この実装により、複数のプロセッサ間でキューへの同時アクセスを管理するために必要なすべての配管が回避されます。イベント パブリッシャーは、任意の負荷分散アルゴリズムを使用して、メッセージをパブリッシュするキューを決定できます。
私の検索でこの種の実装が見られないという事実は、この設計の大きな欠点を見落としていると思います。
編集
この投稿は、データベース テーブルをキューとして使用するか、MSMQ や Azure Queues などとして使用するかについて議論を引き起こしました。Azure AppFabric の持続的メッセージ バッファーを含め、利用可能なネイティブ キューイング オプションが多数あることは理解しています。オプションを評価した結果、SQL Azure テーブルで十分であると判断しました。私の質問の意図は、単一のキューに対して複数のプロセッサを使用することと、キューごとに 1 つのプロセッサを使用することについて議論することでした。