2

多くの外部 Web サービスを呼び出す必要がある Azure Web ロールを構築しています。

ASP.Net 1.1 の場合、デフォルトの maxconnection 制限が 2 であったことを覚えています。これは、アプリケーションがそれ以上の値を必要とする場合に調整できます (正直なところ、これはかなり低かったです)。ASP.Net 2.0 では、これを引き上げたと思います。推奨値はコア数の 12 倍でした。

Azure Web ロールの制限と、これを調整する手段は何ですか? 数百または数千の同時アウトバウンド要求が一度に発生します。これは、より大きなインスタンス (より多くのコア) が必要であることを意味しますか? それとも、より多くの「極小」インスタンスを使用してそれらを正しく構成することで実現できますか? (サーバーごとに 12 を意味する場合でも)

ありがとうございました。

4

1 に答える 1

2

インスタンスのサイズは、インスタンス用に予約される帯域幅のみを決定します (XS は 5 Mbpsです。詳細はこちらをご覧ください)。必要なことは、DefaultConnectionLimit を 2 以上に変更するだけです。

  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="12"/>
    </connectionManagement>
  </system.net>

Web アプリケーションでこれを許可する場合は、これを web.config に追加します。たとえば、インスタンスを開始する前にサービスを呼び出す場合は、WebRole.cs に次を追加します。

    public override bool OnStart()
    {
        ServicePointManager.DefaultConnectionLimit = 12;
        return base.OnStart();
    }

リクエストがキューに入れられていても、Web サービスを非同期で呼び出すと、全体的なパフォーマンスが向上することに注意してください。これは非常に基本的な例です (単純な REST サービスを呼び出すと仮定すると、WCF クライアント プロキシは非同期要求をより適切にサポートします)。

<%@ Page Async="true" ... %>

public partial class AsyncPage : System.Web.UI.Page
{
    private WebRequest req;

    void Page_Load (object sender, EventArgs e)
    {
        AddOnPreRenderCompleteAsync (
            new BeginEventHandler(BeginWebServiceCall),
            new EndEventHandler (EndWebServiceCall)
        );
    }

    IAsyncResult BeginWebServiceCall (object sender, EventArgs e, 
        AsyncCallback cb, object state)
    {
        req = WebRequest.Create("http://some.webs.service/rest/api");
        return req.BeginGetResponse (cb, state);
    }
    void EndWebServiceCall (IAsyncResult ar)
    {
        using (var response = req.EndGetResponse(ar))
        {
            using var reader = 
                new StreamReader(response.GetResponseStream()))
            {
                var text = reader.ReadToEnd();
        ...
            }
        }
    }
}
于 2012-09-14T13:57:38.490 に答える