0

Azure で複数のホストされたサービスを含むアプリケーションがあります。2 つは Web ロール、1 つはワーカー ロールです。問題は、2 つのロールが通信する必要があることです。1 つは、管理インターフェイスとして機能する Web ロールです。もう 1 つはワーカー ロールです。管理インターフェイスは、実行中のジョブの一時停止、ステータスのレポートなどのコマンドを発行する必要があります。2 つ目の Web ロールは単なるサイトであり、最初の 2 つとは関係ありません。

(序文として、Azure 用語の使用が正しいことを確認したい):

  1. ホステッド サービス: Azure の「アプリケーション」。本番環境とステージングの 2 つの展開による複数のロール

  2. 展開: 単一の外部エンドポイント (*.cloudapp.net) を持つ、運用環境またはステージング環境のすべてのロールの特定のインスタンス

  3. ロール: Web ロールまたはワーカー ロールのいずれかの単一の「ジョブ」。

  4. インスタンス: 役割を提供する VM

また確認すること: 既存のホストされたサービスに役割を追加することは可能ですか? つまり、あるソリューションから 2 つの役割を展開する場合、別のソリューションから別の展開に 3 番目の役割を追加できますか?

各ロールは独自のホストされたサービスにあるため、いくつかの課題があります。彼らがどのように通信できるかの選択肢についての私の理解は次のとおりです。

  1. サービス バス: アーキテクチャの観点からは、これが最良のようです。ホステッド サービスごとに WCF サービスをサービス バスに接続でき、管理者は worker ロールにコマンドを発行できます。欠点は、これは非常にコストがかかることです。

  2. 内部エンドポイント: コストを考慮すると、これが最善のようです。欠点は、すべてのロールを一度に展開する必要があり、Web ロールに一意のアドレスを設定できないことです。両方の Web ロールに外部からアクセスする唯一の方法は、ポート転送を使用することです。私の知る限り、あるソリューションから 2 つの役割を展開し、別のソリューションから 1 つの役割を展開することはできませんか?

  3. 外部 WCF サービス: 各コンポーネントは、個々のプロジェクトおよび個々のホストされたサービスに含めることができます。欠点は、管理用の外部から見えるサービスが存在することです。

  4. キュー/テーブル ストレージ: 管理者は Azure キューにコマンドを書き込むことができ、worker ロールはその応答をテーブル ストレージに書き込むことができます。これは、レポートの生成には適しているように見えますが、同期コマンドの発行には適していないようです。

すべてが "アプリケーション" にサービスを提供する複数のロールは、すべて同じ Azure ホステッド サービスに入る必要がありますか? 論理的な観点からそれが最も理にかなっている場合は、#2 を使用して、ポート フォワーディングのみを処理します。

4

1 に答える 1

1

まず、あなたの定義はかなり良さそうで、問題をよく理解していると思います。

また、展開ごとに、各外部エンドポイントを 1 つのロールにのみ割り当てることができます。したがって、ポート 80 で 2 つのサイトを実行する場合は、それらが同じロールにある必要があります。これは、IIS で同じポートを使用して 2 つのサイトをセットアップするようなものです (これはまさにあなたが作業しているものです)。サイトは、ホスト ヘッダーを使用して識別されます。その努力をしたくない場合、またはサイトを個別に展開したい場合は、スタンドアロン サイトを独自のサービス/クラウド プロジェクトに配置することをお勧めします。

通信の部分で見逃したオプションの 1 つは、サービス バス キューです。Microsoft は、ロール間通信専用に設計されたサービス バス キューを使用するライブラリをリリースしました。

それ以外に、あなたのポイントに関する追加のコメント: あなたは正しい内部エンドポイントが最も安価な方法ですが、すべて自分で展開することになります。もちろん、これらの内部エンドポイントでリッスンするように WCF サービスをセットアップすることもできます。

外部 WCF サービスは正常に機能する可能性がありますが、ロールのインスタンスが複数ある場合、すべての WCF 呼び出しはロード バランサーを通過し、メッセージはインスタンスの 1 つにのみ送信されます。メッセージがすべてのインスタンスで受信されたことを確認するには、複数の呼び出しを行う必要があります。それでも、他のフィードバック方法がなければ、メッセージが機能したことを確認できませんでした。

ストレージ キューにも同様の問題があります。2 つのインスタンスがあり、両方に同じメッセージを受信させたい場合、これを保証する方法はありません。

于 2011-10-16T21:41:09.567 に答える