Windows Azureでの大規模なWebパフォーマンスアプリケーション(現時点では理論上)のアーキテクチャを検討しており、「Windows Azureキュー(SBではない)」とそれらをスケーリング/作成するための最適な方法について頭を悩ませたいと思いました。
私は基本的に、MVCフロントエンド(Webロール)、Windows Azureキュー(非同期メッセージデカップリング)、ワーカーロール、およびブラック化されたSQLDBを調べています。
私の理解では、Webロールでメッセージを受信し、それをキューに渡すと、ワーカーロールはキューをポーリングし{作業を行います…たとえばSQL DB CRUD操作}、完了メッセージを送り返します。
スケールのためにWindowsAzureキューの作成を処理し、Webロールとワーカーロールを介してメッセージをやり取りするための最良の方法は何ですか?注文などの作業を送信するための1つのキューと、ステータスメッセージなどの通知用の別のキューを用意するのが最適ですか?
多くの投稿で、アプリケーションコードの外部にキューを作成する必要があると言われていますが、これは現在のキューの制限でどのようにスケーリングしますか?「単一のWindowsAzureキューのスケーラビリティターゲットは500トランザクションで「制約」されます/秒」?
MSDNには、キューを介したスケーリングに関する優れたリソースがいくつかあります。
•ロールインスタンスのスケーリングとは、ポイントインタイムワークロードを処理するために追加のWebまたはワーカーロールインスタンスを追加および削除することを指します。これには、多くの場合、サービス構成のインスタンス数の変更が含まれます。インスタンス数を増やすと、Windows Azureランタイムが新しいインスタンスを開始しますが、インスタンス数を減らすと、実行中のインスタンスがシャットダウンします。
•プロセス(スレッド)スケーリングとは、現在のワークロードに応じてスレッドの数を上下に調整することにより、特定のロールインスタンスでスレッドを処理するという点で十分な容量を維持することを指します。
要するに、私は以下の質問に対する答えを探しています:
- キュー作成のベストプラクティス?
- Webロール(MVCアプリ)はどのようにメッセージを追跡しますか?つまり、メッセージを渡した後、「通知」キューをポーリングしますか?Webロールでメッセージ相関を処理してクライアントに送り返すための最良の方法は何ですか( Webコンシューマー)?
- スケーリングオプションは最善のアプローチを上回っていますか、それともその場でキューの動的スケーリングを検討する必要がありますか(もしそうなら、この場合はSBキューの方が良いと思います)500トランザクション/秒の制限を回避するための新しいキューの作成?
述べたように、現時点での私の質問はより理論的なものですが、今後のソリューションを設計し、将来にわたって利用できるようにしたいと考えています。
ありがとう