2016-01-17 9 views
11

Ich habe ein System geerbt, bei dem es aufgrund der Netzwerklatenz einige Leistungsprobleme gibt. Wir verwenden CentOS 5.x und haproxy 1,5xWenn httpclose oder http-server-close in haproxy verwenden

Der Grund dafür ist, dass es eine Menge Zeit auf jeder API-Anfragen wegen Zeitaufwand für die „Anfangsverbindung“

Example

ausgegeben wird, ignorieren Der Rest des Timings, da dies nur ein Beispiel aus dem Web ist, ist der Rest des Timings von meinem Ende abgesehen von "anfängliche Verbindung", wo alle API-Aufrufe rund 150 - 250 ms für "erste Verbindung" sind.

Nach dem Entfernen der Einstellungen "Option httpclose" von Haproxy, hat sich die Leistung deutlich verbessert, da die gesamte Wartezeit von der "ersten Verbindung" weg ist.

Nach durch einige Artikel gehen, ich habe dieses http://killtheradio.net/technology/haproxys-keep-alive-functionality-and-how-it-can-speed-up-your-site/

Wo es entfernen vorschlagen gefunden:

option httpclose 

und ersetzen mit

timeout client 5000 
option http-server-close 

Also meine Fragen sind:

  • Wann wird die Option httpclose verwendet?
  • Der Server, der haproxy verwendet, ist verantwortlich für alle unsere Restful-API-Aufrufe. Gibt es noch weitere Überlegungen, auf die ich nach dem Entfernen der Konfig "Option httpclose" achten muss?
  • Sollte ich "Option http-Server-close" verwenden und was sind die Auswirkungen?

Antwort

3

Sie tatsächlich

option http-keep-alive 

Sie müssen, dass die Frontend Grenzen hoch genug sind, um sicherzustellen, verwendet werden soll (der Speicheranforderungen vorsichtig sein), dass sie die Erhöhung der Anzahl der aktiven Sitzungen aufnehmen kann, die wird höher sein aufgrund der Tatsache, dass Verbindungen nicht mehr nach jeder Anfrage geschlossen werden.

Als nächstes stellen Sie sicher, dass Ihr Backend unterstützt HAproxy am Leben erhalten, ansonsten ist das Obige nutzlos und Sie können zurück in http-Server-Close-Modus wechseln.

Abhängig von der Rate Ihrer Anfragen und der Anzahl der parallelen Clients müssen Sie timeout http-keep-alive anpassen, um sicherzustellen, dass Sie genügend Anschlüsse im Frontend haben, während der Prozentsatz der Wiederverwendung der Verbindung beibehalten wird. Ein guter Wert für den Anfang ist ein paar Sekunden.

Die Option httpclose sollte nur verwendet werden, wenn Sie die Verbindung sowohl zum Server als auch zum Client schließen möchten. Dies ist fast nie der Fall, es sei denn, die Clients sind beschädigt. Wenn Sie einen Server haben, der nicht viele Anfragen im Leerlauf bewältigen kann, sollten Sie die Option http-server-close verwenden, aber alle modernen Webserver dazu.

Dies hilft auch beim SSL-Teil, da es einen wesentlichen Teil der Verbindungsphase darstellt (vorausgesetzt, dass es bei jeder Anforderung keinen SSL-Handshake benötigt), aber Sie sollten sich die SSL-Sitzungs-Cache-Leistung ansehen und wenn Sie mehr als einen HAproxy-Server aktiv haben, RFC5077-Unterstützung (erfordert v1.6 +).

https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#tune.ssl.cachesize https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.ssl.lifetime