2016-01-17 11 views
11

Ho ereditato un sistema in cui ha alcuni problemi di prestazioni dovuti alla latenza della rete. Stiamo usando CentOS 5.x, e haproxy 1,5xQuando utilizzare httpclose o http-server-close in haproxy

Il motivo è che c'è un sacco di tempo speso su ogni richieste API a causa di tempo speso per "connessione iniziale"

Example

Ignora il resto dei tempi visto che questo è solo un esempio tratto dal web, il resto dei tempi va bene dalla mia parte eccetto per "connessione iniziale" dove tutte le chiamate API sono temporizzate intorno a 150 - 250 ms per "connessione iniziale".

Dopo aver rimosso le impostazioni "opzione httpclose" da haproxy, le prestazioni sono migliorate in modo significativo poiché tutti i tempi di attesa dalla "connessione iniziale" sono andati.

Dopo aver attraversato alcuni articoli, ho trovato questo uno http://killtheradio.net/technology/haproxys-keep-alive-functionality-and-how-it-can-speed-up-your-site/

Dove si suggerisce di rimuovere:

option httpclose 

e sostituirlo con

timeout client 5000 
option http-server-close 

Quindi le mie domande sono:

  • Quando utilizzare l'opzione httpclose?
  • Il server che utilizza haproxy è responsabile di tutte le nostre chiamate API restful, ci sono altre considerazioni di cui ho bisogno di essere a conoscenza dopo aver rimosso l'opzione di configurazione "httpclose"?
  • Devo usare "opzione http-server-close" e quali sono gli impatti?

risposta

3

si dovrebbe effettivamente utilizzare

option http-keep-alive 

È necessario assicurarsi che i limiti di frontend sono abbastanza alti (fate attenzione dei requisiti di memoria) che possono ospitare l'aumento del numero di sessioni attive, che sarà più alto a causa del fatto che le connessioni non saranno più chiuse dopo ogni richiesta.

La prossima cosa è assicurarsi che i tuoi back-end supporti mantengano vivo verso HAproxy, altrimenti quanto sopra è inutile e puoi tornare alla modalità di chiusura http-server.

A seconda della frequenza delle richieste e del numero di client paralleli, è necessario regolare timeout http-keep-alive per assicurarsi di disporre di un numero sufficiente di slot di connessione sul frontend mantenendo comunque una buona percentuale di riutilizzo delle connessioni. Un buon valore per iniziare è pochi secondi.

L'opzione httpclose deve essere utilizzata solo se si desidera chiudere la connessione sia verso il server che verso il client, il che non è quasi mai il caso a meno che i client non siano interrotti. Se si dispone di un server che non è in grado di far fronte a molte richieste inattive, è possibile utilizzare l'opzione http-server-close, ma tutti i server Web moderni.

Questo aiuterà anche con la parte SSL in quanto rappresenta una parte significativa della fase di connessione (dato che non avrà bisogno di un handshake SSL su ogni richiesta), ma si potrebbe voler esaminare le prestazioni della cache della sessione SSL e se hai più di un server HAproxy attivo, il supporto RFC5077 (richiede 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

Problemi correlati