Azure で複数のホストされたサービスを含むアプリケーションがあります。2 つは Web ロール、1 つはワーカー ロールです。問題は、2 つのロールが通信する必要があることです。1 つは、管理インターフェイスとして機能する Web ロールです。もう 1 つはワーカー ロールです。管理インターフェイスは、実行中のジョブの一時停止、ステータスのレポートなどのコマンドを発行する必要があります。2 つ目の Web ロールは単なるサイトであり、最初の 2 つとは関係ありません。
(序文として、Azure 用語の使用が正しいことを確認したい):
ホステッド サービス: Azure の「アプリケーション」。本番環境とステージングの 2 つの展開による複数のロール
展開: 単一の外部エンドポイント (*.cloudapp.net) を持つ、運用環境またはステージング環境のすべてのロールの特定のインスタンス
ロール: Web ロールまたはワーカー ロールのいずれかの単一の「ジョブ」。
インスタンス: 役割を提供する VM
また確認すること: 既存のホストされたサービスに役割を追加することは可能ですか? つまり、あるソリューションから 2 つの役割を展開する場合、別のソリューションから別の展開に 3 番目の役割を追加できますか?
各ロールは独自のホストされたサービスにあるため、いくつかの課題があります。彼らがどのように通信できるかの選択肢についての私の理解は次のとおりです。
サービス バス: アーキテクチャの観点からは、これが最良のようです。ホステッド サービスごとに WCF サービスをサービス バスに接続でき、管理者は worker ロールにコマンドを発行できます。欠点は、これは非常にコストがかかることです。
内部エンドポイント: コストを考慮すると、これが最善のようです。欠点は、すべてのロールを一度に展開する必要があり、Web ロールに一意のアドレスを設定できないことです。両方の Web ロールに外部からアクセスする唯一の方法は、ポート転送を使用することです。私の知る限り、あるソリューションから 2 つの役割を展開し、別のソリューションから 1 つの役割を展開することはできませんか?
外部 WCF サービス: 各コンポーネントは、個々のプロジェクトおよび個々のホストされたサービスに含めることができます。欠点は、管理用の外部から見えるサービスが存在することです。
キュー/テーブル ストレージ: 管理者は Azure キューにコマンドを書き込むことができ、worker ロールはその応答をテーブル ストレージに書き込むことができます。これは、レポートの生成には適しているように見えますが、同期コマンドの発行には適していないようです。
すべてが "アプリケーション" にサービスを提供する複数のロールは、すべて同じ Azure ホステッド サービスに入る必要がありますか? 論理的な観点からそれが最も理にかなっている場合は、#2 を使用して、ポート フォワーディングのみを処理します。