web-dev-qa-db-fra.com

Quand utiliser httpclose ou http-server-close dans haproxy

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"

Example

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:

  • Quand utiliser l'option httpclose?
  • Le serveur utilisant haproxy est responsable de tous nos appels à l'API Restful, y a-t-il d'autres considérations dont je dois être conscient après avoir supprimé la configuration "option httpclose"?
  • Dois-je utiliser "l'option http-server-close" et quels sont les impacts?
17
forestclown

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

7
anine.io