6

Windows Azureでの大規模なWebパフォーマンスアプリケーション(現時点では理論上)のアーキテクチャを検討しており、「Windows Azureキュー(SBではない)」とそれらをスケーリング/作成するための最適な方法について頭を悩ませたいと思いました。

私は基本的に、MVCフロントエンド(Webロール)、Windows Azureキュー(非同期メッセージデカップリング)、ワーカーロール、およびブラック化されたSQLDBを調べています。

私の理解では、Webロールでメッセージを受信し、それをキューに渡すと、ワーカーロールはキューをポーリングし{作業を行います…たとえばSQL DB CRUD操作}、完了メッセージを送り返します。

スケールのためにWindowsAzureキューの作成を処理し、Webロールとワーカーロールを介してメッセージをやり取りするための最良の方法は何ですか?注文などの作業を送信するための1つのキューと、ステータスメッセージなどの通知用の別のキューを用意するのが最適ですか?

多くの投稿で、アプリケーションコードの外部にキューを作成する必要があると言われていますが、これは現在のキューの制限でどのようにスケーリングしますか?「単一のWindowsAzureキューのスケーラビリティターゲットは500トランザクションで「制約」されます/秒」?

MSDNには、キューを介したスケーリングに関する優れたリソースがいくつかあります。

•ロールインスタンスのスケーリングとは、ポイントインタイムワークロードを処理するために追加のWebまたはワーカーロールインスタンスを追加および削除することを指します。これには、多くの場合、サービス構成のインスタンス数の変更が含まれます。インスタンス数を増やすと、Windows Azureランタイムが新しいインスタンスを開始しますが、インスタンス数を減らすと、実行中のインスタンスがシャットダウンします。

•プロセス(スレッド)スケーリングとは、現在のワークロードに応じてスレッドの数を上下に調整することにより、特定のロールインスタンスでスレッドを処理するという点で十分な容量を維持することを指します。

要するに、私は以下の質問に対する答えを探しています:

  1. キュー作成のベストプラクティス?
  2. Webロール(MVCアプリ)はどのようにメッセージを追跡しますか?つまり、メッセージを渡した後、「通知」キューをポーリングしますか?Webロールでメッセージ相関を処理してクライアントに送り返すための最良の方法は何ですか( Webコンシューマー)?
  3. スケーリングオプションは最善のアプローチを上回っていますか、それともその場でキューの動的スケーリングを検討する必要がありますか(もしそうなら、この場合はSBキューの方が良いと思います)500トランザクション/秒の制限を回避するための新しいキューの作成?

述べたように、現時点での私の質問はより理論的なものですが、今後のソリューションを設計し、将来にわたって利用できるようにしたいと考えています。

ありがとう

4

2 に答える 2

8

回答をどのように追跡するかという質問に対して、私は通常、次のことを行います。

  1. Web ロールは、ジョブ ID を含むメッセージをキューに書き込みます。
  2. Worker ロールが作業を行い、結果を partition key を持つテーブルに書き込みます。
  3. Web ロールはテーブルのその行をポーリングしています。それが存在すると、答えが返ってきます。

繰り返しますが、これがユーザー対話型のものであり、ユーザーが実際に開いている HTTP 接続で結果を取得するのを待っている場合は、同期通信を使用してキューをスキップする方がよい場合があります。

もし私があなたなら、少なくとも 0MQ (ZeroMQ、またはその新しいフォーク Crossroads I/O) のようなものを使用することを検討します。 . たとえば、Web サーバーは PUSH ソケット経由でメッセージを送信し、ワーカー ロールは PULL ソケット経由で受信し、ワーカー ロールは PUB ソケット経由で応答を発行し、Web ロールは SUB ソケット経由で応答を受信します。PUSH/PULL は負荷分散を行い、PUB/SUB は待機中の Web ロールにメッセージを戻す処理を行います。参考までに、これはまさに Mongrel2 で使用されているメッセージング アーキテクチャとテクノロジです。

1 秒あたり 500 オペレーションを超えるという点では、複数のキューを作成してメッセージをランダムにスプレーするだけで済みます。(通常、各ワーカーはそれらすべてをポーリングします。) ただし、1 つのストレージ アカウントには 1 秒あたり 5,000 操作の制限があることに注意してください。そのため、10 個のキューを作成したら、新しいストレージ アカウントを作成して、より保証されたスケーラビリティ。

于 2012-08-20T04:05:22.977 に答える
3

高速な同期 (およびスケーラブル) ソリューションが必要な場合は、このパターンの使用を検討することをお勧めします。

ここに画像の説明を入力

このパターンを使用する理由は、キューを使用すると、Web ロールと worker ロールを個別にスケーリングできるためです。これはかなりの数のキューを意味しますが、たとえば、2 つの Web ワーカー ロールを持ち、必要に応じて 6 から 8 のワーカー ロールにスケールアップできることを意味します。

これは、SQL をポーリングするよりも高速であり、キューを使用しない場合よりも回復力があると思います。

詳細はこちら: https://msdn.microsoft.com/en-us/library/dn589781.aspx

于 2015-09-03T04:57:01.843 に答える