2

次のことを行うAzureアプリケーションを作成したいと思います。

  • ユーザーには、コマンドのリストを表示するMVC 4 Webサイト(Webロール)が表示されます。
  • ユーザーがコマンドを選択すると、そのコマンドはすべてのワーカーロールにブロードキャストされます。
  • ワーカーロールはタスクを処理し、結果を保存し、Webロールに通知します
  • Webロールは、ワーカーロールの結果を組み合わせて表示します

私が読んでいることから、これを行うには2つの方法があるようです。WindowsAzureServiceBusまたはキューの使用です。各ワーカーロールは、結果もデータベースに保存します。

Service Busは、パブリッシュ/サブスクライブモデルの方が適切であるように思われるため、すべてのワーカーロールが同じコマンドをほぼ同時に取得します。ただし、キューは使いやすいようです。

開発時にエミュレータでサービスバスをローカルで使用できますか?私は無料トライアルを使用していますが、開発中はアプリケーションを継続的に維持できません。また、キューを使用する場合、処理が完了したことをWebロールに通知するにはどうすればよいですか?

4

3 に答える 3

5

同意します。ServiceBusは、このメッセージング要件に適しています。少しの努力で、キューでも同じことができます。ただし、ServiceBusがすでに提供しているものを実装するための多くのコードを作成することになります。

Azure Strorageサービス(キュー/テーブル/ブロブ)のようなServiceBusのローカルエミュレーターはありません。ただし、ロールが開発環境でローカルに実行されている間は、ロール間のメッセージングにServiceBusを使用できます。

処理が完了したことをWebロールに通知することについての最後の質問については、ここに進むにはいくつかの方法があります。ほんの少しの考え(網羅的なリストではありません)...

  1. Webロールが作業単位の状況を定期的にチェックできるテーブル保管。
  2. 完了した作業のための別のServiceBusキュー/トピック。
  3. 内部エンドポイント。それがワーカーロールNからの単なる更新なのか、それともすべてのワーカーロールの完了した作業単位を示しているのかを知るためのロジックが必要になります。
于 2013-03-11T16:15:42.787 に答える
3

私はリックの答えに同意しますが、次のことも追加して考えます。

Service Busトピックのアプローチを選択した場合、各ワーカーの役割がオンラインになると、トピックへのサブスクリプションを生成する必要があります。ワーカーの1つに障害が発生してリサイクルされた場合のサブスクリプションの保守、またはサブスクリプションが存在する可能性がある理由について考える必要があります。

すべてのワーカーが完了していることをWebの役割に伝えるのは興味深いことです。リックが提供するオプションは良いものですが、ここでいくつかのことを考える必要があります。つまり、Webの役割は、そこにいるワーカーの数や、すべてが完了したことをいつ報告したかを判断するためのその他のメカニズムを知る必要があります。5つのワーカーロールがメッセージを受信して​​作業を開始すると、そのうちの1つが繰り返し処理に失敗し始めるという状況が発生する可能性があります。他の4つは完了を報告しますが、現在Webロールは5番目を待っています。返信をどのくらい待ちますか?続けてもらえますか?システムにスケールダウンするように指示し、Webロールが5つあると考えているのに、現在は4つしかない場合はどうなりますか。これらは考慮する必要があることであり、すべて要件によって異なります。

于 2013-03-11T16:32:50.700 に答える
0

あなたの質問に基づいて、どちらのキューサービスを使用しても良い結果を得ることができます。しかし、それらのそれぞれには、克服すべきさまざまな課題と利点があります。

サービスバスキューのいくつかの利点は、永続的な接続(最大100接続)で受信をブロックし、メッセージの完了を監視でき、より大きなメッセージ(256KB)を送信できることです。

サービスバスソリューションに対するストレージキューのいくつかの利点は、わずかに高速であり(15ミリ秒が重要な場合)、単一のストレージシステムを使用できることです(とにかくブロブおよびテーブルサービスにストレージを使用する可能性があるため)。自動スケーリング。負荷に基づいてワーカーロールを自動スケーリングする必要がある場合、リクエストをストレージキューに渡すと、自動スケーリングが簡単になります。AzureCloudServiceUIの[スケール]タブで自動スケーリングを設定するだけです。

2つの紺碧のキューサービスのより詳細な比較はここで見つけることができます:http://msdn.microsoft.com/en-us/library/hh767287.aspx

また、キューを使用する場合、処理が完了したことをWebロールに通知するにはどうすればよいですか?

Azure Storage Queuesソリューションについては、 https://github.com/brentrossen/AzureDistributedServiceに役立つライブラリを作成しました。これは、WebロールからワーカーロールへのRPCスタイルの通信を容易にし、ストレージキューを介して戻るプロキシレイヤーを提供します。

于 2014-08-13T14:48:05.337 に答える