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.
La concurrence d'accès aux applications ASP.NET Core est gérée par son serveur Web . Par exemple:
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:
- Nombre maximal de connexions client
- Taille maximale du corps de la demande
- Débit de données maximal pour le corps de la demande
Par exemple:
.UseKestrel(options =>
{
options.Limits.MaxConcurrentConnections = 100;
}
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.