web-dev-qa-db-ja.com

.NET Core Web APIで並行性を構成するにはどうすればよいですか?

WCFの昔は、MaxConcurrentCalls設定を使用してサービスの同時実行を制御していました。 MaxConcurrentCallsのデフォルトは16の同時呼び出しですが、必要に応じてその値を増減できます。

.NET Core Web APIでサーバー側の同時実行性をどのように制御しますか?同時リクエストが多すぎるとサーバー全体のパフォーマンスが低下する可能性があるため、このケースではおそらく制限する必要があります。

11
user2368632

ASP.NET Coreアプリケーションの同時実行性は、その Webサーバー によって処理されます。例えば:

チョウゲンボウ

var Host = new WebHostBuilder()
    .UseKestrel(options => options.ThreadCount = 8)

Kestrel非同期ベースの実装のため、Kestrelスレッド数を1Kのような大きな値に設定することはお勧めしません。

詳細: KestrelはNode.jsのようなリクエストの処理に単一のスレッドを使用していますか?

ASP.NET Core 2.0 Preview 2の新しいLimitsプロパティが 導入 になりました。

次の制限を追加できます。

  1. 最大クライアント接続
  2. 最大リクエスト本文サイズ
  3. 最大リクエスト本文データレート

例えば:

.UseKestrel(options =>
{
    options.Limits.MaxConcurrentConnections = 100;
}

IIS

Kestrelがリバースプロキシの背後で実行されている場合、プロキシ自体を調整できます。たとえば、IISアプリケーションプールをweb.configまたはaspnet.configに構成できます。

<configuration>
  <system.web>
    <applicationPool
        maxConcurrentRequestsPerCPU="5000"
        maxConcurrentThreadsPerCPU="0"
        requestQueueLimit="5000" />
  </system.web>
</configuration>

もちろんNginxApacheには独自の同時実行設定があります。

14
Ilya Chumakov