7

シナリオ:

複数のワーカーロールまたは複数のスレッドを持つ1つのワーカーロールをスピンオフした場合。これにより、Azureキュー内の新しいメッセージがポーリングされます。

これが正しい設計アプローチであるかどうかを誰かが確認できますか?多くのワーカーロールが必要な理由は、PROCESSJOBを高速化するためです。アプリケーションはほぼリアルタイムである必要があります。つまり、メッセージが表示されたらすぐに、複雑なビジネスルールを適用し、AZUREDBにコミットする必要があります。3分あたり11,000のメッセージを期待しています。

ありがとうございました。

4

1 に答える 1

17

キューリーダーはいくつでも持つことができます。ワーカーロールインスタンスはすべて同じキューから読み取ることができるため、スケールアウトするのが非常に一般的であり、作業スループットが大幅に向上します。

キューメッセージを読むと、他の人が同じ作業を読んだり実行したりできないように、一定期間「非表示」とマークされます。メッセージの所有者は、期間が終了する前にメッセージを削除する必要があります。そうしないと、メッセージが再び表示され、元のリーダーがメッセージを削除しようとすると例外がスローされます。これは、操作がべき等でなければならないことを意味します。

直接的なポイズンメッセージの処理はありませんが、各メッセージにはデキューカウントがあるため、実装は簡単です。それをチェックして、3〜4回読んだ後に毒メッセージを削除してください。時間枠が短すぎるために処理が失敗する可能性があるため、デキューカウントに基づいてタイムアウト期間を動的に調整することもできます。

MSDNドキュメントは次のとおりですDequeueCount

編集:3分で11,000メッセージを処理する限り:キューのスケーラビリティの目標は500 2,000 TPS、つまり3分で最大360,000トランザクションです(11,000メッセージの要件をはるかに超えています)。メッセージを1つのキューメッセージに結合したり、一度に複数のメッセージを読み取ったりすることで、処理をさらに高速化できます。これにより、トランザクション数も削減されます。キューのExplicitMessageCountプロパティを調べて、キューがバックアップされているかどうかを確認することもできます(その後、キューアイテムの消費を支援するために追加のインスタンスにスケールアウトします)。

于 2011-08-28T14:09:34.650 に答える