2016-01-17 60 views
11

Odziedziczyłem system, w którym występują pewne problemy z wydajnością spowodowane opóźnieniami w sieci. Używamy CentOS 5.x oraz haproxy 1.5xKiedy używać funkcji httpclose lub http-server-close w haproxy

Powodem jest to, że nie ma dużo czasu spędzonego na każdym wniosków API ze względu na czas spędzony na „połączeniu początkowym”

Example

Ignoruj reszta taktowania, ponieważ jest to tylko przykład wzięty z sieci, reszta taktu jest w porządku z mojego końca, z wyjątkiem "początkowego połączenia", w którym wszystkie wywołania API są w czasie około 150 - 250 ms dla "początkowego połączenia".

Po usunięciu ustawień "opcja httpclose" z haproxy, wydajność znacznie się poprawiła, ponieważ minął czas oczekiwania od "połączenia początkowego".

Po przejściu przez niektórych artykułów, Znalazłem ten http://killtheradio.net/technology/haproxys-keep-alive-functionality-and-how-it-can-speed-up-your-site/

Gdzie to sugerować, aby usunąć:

option httpclose 

i zastąpić

timeout client 5000 
option http-server-close 

Więc moje pytania to:

  • Kiedy korzystać z opcji httpclose?
  • Serwer używający haproxy jest odpowiedzialny za wszystkie nasze restrykcyjne wywołania API, czy są jakieś inne kwestie, o których muszę wiedzieć po usunięciu opcji "opcja httpclose"?
  • Czy powinienem użyć "opcji http-server-close" i jakie są skutki?

Odpowiedz

3

Trzeba rzeczywiście być używając

option http-keep-alive 

Musisz się upewnić, że granice interfejsu internetowego są wystarczająco wysokie (uważać wymagań pamięciowych), które mogą pomieścić wzrost liczby aktywnych sesji, która będzie wyższy ze względu na fakt, że połączenia nie będą już zamykane po każdym żądaniu.

Następną sprawą jest upewnienie się, że twój serwer obsługuje utrzymywanie aktywności w kierunku HAproxy, w przeciwnym razie powyższe czynności są bezużyteczne i możesz przełączyć się z powrotem do trybu zamknięcia serwera http.

W zależności od stawki żądań i liczby klientów równoległych, należy dostosować timeout http-keep-alive, aby upewnić się, że masz wystarczającą liczbę gniazd połączeń w interfejsie, zachowując jednocześnie dobry procent ponownego użycia połączenia. Dobra wartość na początek to kilka sekund.

Opcja powinna być używana tylko wtedy, gdy chcesz zamknąć połączenie zarówno z serwerem, jak iz klientem, co prawie nigdy nie ma miejsca, jeśli klienci nie są zepsute. Jeśli masz serwer, który nie radzi sobie dobrze z wieloma niewykorzystanymi żądaniami, możesz użyć opcji http-server-close, ale wszystkie nowoczesne serwery internetowe to dobrze.

Pomoże to również w przypadku części SSL, ponieważ reprezentuje znaczącą porcję fazy połączenia (ponieważ nie wymaga uzgadniania SSL przy każdym żądaniu), ale warto przyjrzeć się wydajności pamięci podręcznej sesji SSL i jeśli aktywny jest więcej niż jeden serwer HAproxy, obsługa RFC5077 (wymaga 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