web-dev-qa-db-fra.com

Comment configurer la simultanéité dans .NET Core Web API?

Dans les anciens jours WCF, vous contrôliez la concurrence du service via le paramètre MaxConcurrentCalls. MaxConcurrentCalls par défaut à 16 appels simultanés mais vous pouvez augmenter ou diminuer cette valeur en fonction de vos besoins.

Comment contrôlez-vous la simultanéité côté serveur dans l'API Web .NET Core? Nous devons probablement le limiter dans notre cas, car trop de requêtes simultanées peuvent nuire aux performances globales du serveur.

11
user2368632

La concurrence d'accès aux applications ASP.NET Core est gérée par son serveur Web . Par exemple:

Crécerelle

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

Il n'est pas recommandé de définir le nombre de threads Kestrel sur une grande valeur comme 1K en raison de l'implémentation basée sur l'async de Kestrel.

Plus d'informations: Kestrel utilise-t-il un seul thread pour traiter les demandes comme Node.js?

La nouvelle propriété Limits a été introduite dans ASP.NET Core 2.0 Preview 2.

Vous pouvez maintenant ajouter des limites pour les éléments suivants:

  1. Nombre maximal de connexions client
  2. Taille maximale du corps de la demande
  3. Débit de données maximal pour le corps de la demande

Par exemple:

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

IIS

Lorsque Kestrel s'exécute derrière un proxy inverse, vous pouvez régler le proxy lui-même. Par exemple, vous pouvez configurer IIS pool d'applications dans web.config ou dans aspnet.config:

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

Bien sûr Nginx et Apache ont leurs propres paramètres de concurrence.

14
Ilya Chumakov