Dans un contexte d’une étude sur les performances d’une application web, j’ai remarqué des retards constants d’environ 200ms sur certains appels HTTP qui utilisaient une API externe.
L’application web et l’API étaient sur le même segment de réseau et donc la latence du réseau était hors de question.
De plus la cible API a précédemment fait l’objet de tests de charge jMeter et éprouvée pour gérer 1500req/s.
Ce qui était encore plus étrange dans cette situation, c’est que seules les requêtes POST présentaient ce retard de 200ms. Les requêtes GET étaient rapides comme prévu.
Il s’est avéré que ces retards étaient causées par l’ algorithme de Nagle qui est activée par défaut dans la classe HttpWebRequest.
L’algorithme de Nagle augmente l’efficacité du réseau en diminuant le nombre de paquets envoyés sur le réseau.
Elle accomplit ceci en instituant un retard sur le client allant jusqu’à 200 millisecondes lorsque de petites quantités de données transitent sur le réseau.
Le retard est lié à une période d’attente de données supplémentaires qui pourraient être écrites, les données sont alors ajoutées au même paquet.
Arrêter cet algorithme pour le point de terminaison particulier supprime le retard de 200ms :
System.Net.ServicePointManager.FindServicePoint(uri).UseNagleAlgorithm = false;
La désactivation de l’algorithme de Nagle pour toutes les requêtes n’est pas conseillée non plus.
Je recommanderais d’expérimenter et d’effectuez des tests de performances étendues avant de le neutraliser.