J'ai hérité d'un système où il a des problèmes de performances en raison de la latence du réseau. Nous utilisons CentOS 5.x et haproxy 1.5x
La raison en est qu'il y a beaucoup de temps passé sur chaque demande d'API en raison du temps passé sur la "connexion initiale"
Ignorez le reste du timing car ce n'est qu'un exemple tiré du Web, le reste du timing est très bien de ma part, sauf pour la "connexion initiale" où tous les appels API sont chronométrés entre 150 et 250 ms pour la "connexion initiale".
Après avoir supprimé les paramètres "option httpclose" de haproxy, les performances se sont considérablement améliorées car tout le temps d'attente de la "connexion initiale" a disparu.
Après avoir parcouru quelques articles, j'ai trouvé celui-ci http://killtheradio.net/technology/haproxys-keep-alive-functionality-and-how-it-can-speed-up-your-site/
Où il suggère de supprimer:
option httpclose
et remplacer par
timeout client 5000
option http-server-close
Mes questions sont donc:
Vous devriez en fait utiliser
option http-keep-alive
Vous devez vous assurer que les limites du frontend sont suffisamment élevées (faites attention aux besoins en mémoire) pour qu'elles puissent s'adapter à l'augmentation du nombre de sessions actives, qui sera plus élevée du fait que les connexions ne seront plus fermées après chaque demande.
La prochaine chose consiste à s'assurer que vos supports backend restent actifs vers HAproxy, sinon ce qui précède est inutile et vous pouvez revenir en mode de fermeture de serveur http.
Selon le taux de vos demandes et le nombre de clients parallèles, vous devez ajuster timeout http-keep-alive
pour vous assurer que vous disposez de suffisamment de connecteurs sur le frontend tout en conservant un bon pourcentage de réutilisation des connexions. Une bonne valeur pour commencer est de quelques secondes.
L'option httpclose
ne doit être utilisée que si vous souhaitez fermer la connexion vers le serveur et le client, ce qui n'est presque jamais le cas sauf si les clients sont rompus. Si vous avez un serveur qui ne peut pas gérer correctement un grand nombre de requêtes inactives, vous pouvez utiliser http-server-close
option, mais tous les serveurs Web modernes bien.
Cela aidera également la partie SSL car elle représente une partie importante de la phase de connexion (étant donné qu'elle n'aura pas besoin d'une négociation SSL à chaque demande), mais vous voudrez peut-être examiner les performances du cache de session SSL et si vous avez plusieurs serveurs HAproxy actifs, prise en charge RFC5077 (nécessite v1.6 +).
https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#tune.ssl.cachesizehttps://cbonte.github.io/haproxy-dconv/ configuration-1.5.html # 3.2-tune.ssl.lifetime