2

Azure のドキュメントによると、Web ロールの内部エンドポイントは負荷分散されません。これの実際的な影響は何ですか?

例: 20 個のインスタンスを持つ Web ロールがあります。その Web ロールの内部エンドポイントを定義する場合、内部実装は何ですか? たとえば、20 個のインスタンスすべてが引き続きこのエンドポイントにサービスを提供しますか? インスタンスごとに特定のエンドポイントを取得できますか?

パブリック エンドポイントで通常の負荷分散動作を利用し、各インスタンスで内部エンドポイントを公開することで適切に対応できる独自のコールバック要件があります。公開されているエンドポイント制限の数値に基づくと、これは不可能です。では、内部エンドポイントを定義するとき、それは「インスタンスごとに 1 つ」ですか、それとも何ですか? すべてのロール インスタンスがエンドポイントにサービスを提供していますか? 内部エンドポイントが負荷分散されていないと Microsoft が言っているのはどういう意味ですか? すべてのトラフィックが 1 つのインスタンスに流れるだけですか? それは意味がありません。

4

3 に答える 3

12

まず、数と制限を明確にしましょう。エンドポイントの制限は、インスタンスではなく、ロールに対するものです。ロールとインスタンスの用語がよくわからない、または混乱している場合は、それに関する私のブログ投稿を確認してください。したがって、制限は役割ごとです。

ここで、EndPoint の違いについて説明します。ここにブログ投稿があります。しかし、簡単に言えば、Internal EndPoint は展開内でのみ通信を開きます。それが内部である理由です。外部トラフィック (インターネットから) が内部エンドポイントに到達することはありません。つまり、トラフィックがロード バランサーを経由しないため、負荷分散されません。内部エンドポイントのトラフィックは、ロール インスタンス間のみを行き来し (最終的には内部ルーティング ハードウェアを経由します)、展開の境界を通過することはありません。そうは言っても、インターネット トラフィックを内部エンドポイントに送信できないことはすでに明らかです。

補足事項 - ただし、InputEndpoint は、インターネットおよび展開内から検出可能です。ただし、InputEndpoint へのトラフィックインターネットから LoadBalancer を経由するため、LoadBalanced です。

数字に戻る。1 つの入力エンドポイントと 1 つの内部エンドポイントを持つ 1 つの WebRole があるとします。これにより、展開用に合計 2 つのエンドポイントが作成されます。50 個のインスタンスをスピンアップしても、EndPoint の合計制限にカウントされる EndPoint は 2 つしかありません。

特定のインスタンス用の特定のエンドポイントを取得できますか - 確かにそうです! RoleEnvironemntクラス経由。Roles 列挙があります。各 Role にはInstancesがあり、各 Instance にはInstanceEndpointsがあります。

お役に立てれば!

于 2012-09-09T19:28:29.780 に答える
3

エンドポイントはロール レベルで定義され、インスタンスごとにインスタンス化されます。

入力エンドポイントには、インターネットからアクセスできるようにするパブリック IP アドレスがあります。その入力エンドポイントへのトラフィックは、エンドポイントをホストするロールのすべてのインスタンス間で (ラウンド ロビン アルゴリズムを使用して) 負荷分散されます。

内部エンドポイントにはパブリック IP アドレスがなく、クラウド サービスまたはそのクラウド サービスを含む仮想ネットワーク内からのみアクセスできます。Windows Azure は、トラフィックを内部エンドポイントに負荷分散しません。各ロール インスタンス エンドポイントは個別にアドレス指定する必要があります。Ryan Dunn は、WCF サービスをホストする内部エンドポイントとの負荷分散された相互作用を実装する簡単な例を示す素晴らしい投稿をしています。

Spring Wave リリースでは、インスタンス入力エンドポイントのプレビューが導入されました。これは、特定のロール インスタンスにポート転送されるパブリック IP エンドポイントです。これは明らかに負荷分散ではありませんが、特定のインスタンスに直接接続する方法を提供します。

于 2012-09-09T20:34:21.050 に答える
3

物事をより簡潔かつ具体的にしようとしているだけです:

// get a list of all instances of role "MyRole"
var instances = RoleEnvironment.Roles["MyRole"].Instances;

// pick an instance at random
var instance = instances[new Random().Next(instances.Count())];

// for that instance, get the IP address and port for the endpoint "MyEndpoint"
var endpoint = instance.InstanceEndpoints["MyEndpoint"].IPEndpoint;

内部エンドポイントは、他の VM を見つけるための検出メカニズムと考えてください。

于 2012-09-09T21:21:12.563 に答える