Przedmowa
Od jakiegoś czasu dostrajam HAProxy i przeprowadziłem na nim wiele testów wydajności. Od 100 żądań HTTP / s do 50 000 żądań HTTP / s.
Pierwszą radą jest włączenie strony statystyk w HAProxy . POTRZEBUJESZ monitorowania, bez wyjątku. Będziesz także potrzebował dostrajania, jeśli zamierzasz przekroczyć 10 000 żądań / s.
Limity czasu są mylącą bestią, ponieważ mają ogromny zakres możliwych wartości, z których większość nie ma zauważalnej różnicy. Nie widziałem jeszcze, żeby coś zawiodło z powodu o 5% mniejszej lub o 5% wyższej. 10000 vs 11000 milisekund, kogo to obchodzi? Prawdopodobnie nie twój system.
Konfiguracja
Nie mogę z czystym sumieniem podać kilku liczb jako „najlepszych limitów czasu dla wszystkich”.
Zamiast tego mogę powiedzieć, NAJBARDZIEJ agresywne limity czasu, które są zawsze dopuszczalne w przypadku równoważenia obciążenia HTTP (S). Jeśli napotkasz niższe wartości, nadszedł czas, aby ponownie skonfigurować moduł równoważenia obciążenia.
timeout connect 5000
timeout check 5000
timeout client 30000
timeout server 30000
klient limitu czasu:
Limit czasu braku aktywności ma zastosowanie, gdy oczekuje się od klienta potwierdzenia lub wysłania danych. W trybie HTTP ten limit czasu jest szczególnie ważny do rozważenia podczas pierwszej fazy, kiedy klient wysyła żądanie oraz podczas odpowiedzi podczas odczytywania danych wysyłanych przez serwer.
Przeczytaj : Jest to maksymalny czas na otrzymanie nagłówków żądań HTTP od klienta.
Czasami 3G / 4G / 56k / satelita może być wolny. Nadal powinny być w stanie wysłać nagłówki HTTP w ciągu kilku sekund, NIE 30.
Jeśli ktoś ma tak złe połączenie, że potrzebuje więcej niż 30 sekund, aby poprosić o stronę (następnie więcej niż 10 * 30s, aby poprosić o 10 osadzonych obrazów / CSS / JS), uważam, że jest dopuszczalne, aby go odrzucić.
serwer limitu czasu:
Limit czasu bezczynności ma zastosowanie, gdy oczekuje się, że serwer potwierdzi lub wyśle dane. W trybie HTTP ten limit czasu jest szczególnie ważny do rozważenia podczas pierwszej fazy odpowiedzi serwera, gdy musi on wysłać nagłówki, ponieważ bezpośrednio reprezentuje czas przetwarzania serwera dla żądania. Aby dowiedzieć się, jaką wartość tam umieścić, często dobrze jest zacząć od czasów, które byłyby uważane za niedopuszczalne czasy odpowiedzi, a następnie sprawdzić dzienniki, aby obserwować rozkład czasu odpowiedzi i odpowiednio dostosować wartość.
Odczyt : Jest to maksymalny czas na otrzymanie nagłówków odpowiedzi HTTP z serwera (po otrzymaniu pełnego żądania klienta). Zasadniczo jest to czas przetwarzania z serwerów, zanim zacznie wysyłać odpowiedź.
Jeśli twój serwer jest tak wolny, że potrzeba ponad 30 sekund, aby zacząć udzielać odpowiedzi, to uważam, że dopuszczalne jest uznanie go za martwy.
Przypadek szczególny : udzielenie odpowiedzi na niektóre usługi RZADKIE bardzo intensywne przetwarzanie może zająć minutę lub dłużej. Ten limit czasu może wymagać znacznego zwiększenia w przypadku tego konkretnego zastosowania. (Uwaga: może to być przypadek złego projektu, użyj komunikacji w stylu asynchronicznym lub w ogóle nie używaj HTTP).
limit czasu połączenia:
Ustaw maksymalny czas oczekiwania na próbę nawiązania połączenia z serwerem.
Przeczytaj : Maksymalny czas, w którym serwer musi zaakceptować połączenie TCP.
Serwery są w tej samej sieci LAN co HAProxy, więc powinno być szybkie. Daj mu co najmniej 5 sekund, ponieważ tyle czasu może potrwać, gdy wydarzy się coś nieoczekiwanego (utracony pakiet TCP do retransmisji, serwer wymyślający nowy proces do przyjmowania nowych żądań, wzrost ruchu).
Przypadek szczególny : gdy serwery są w innej sieci LAN lub łączą niewiarygodne. Ten limit czasu może wymagać znacznego zwiększenia. (Uwaga: może to być przypadek złej architektury).
kontrola limitu czasu:
Ustaw dodatkowy limit czasu sprawdzania, ale dopiero po nawiązaniu połączenia.
Ustaw dodatkowy limit czasu sprawdzania, ale dopiero po nawiązaniu połączenia Jeśli jest ustawiony, haproxy używa min („limit czasu połączenia”, „inter”) jako limit czasu połączenia dla sprawdzenia i „limit czasu sprawdzenia” jako dodatkowego limitu czasu odczytu. „Min” jest używane, aby osoby biegnące z bardzo długim „limitem czasu połączenia” (np. Ci, którzy tego potrzebowali z powodu kolejki lub tarpit), nie spowalniały kontroli. (Należy również pamiętać, że nie ma uzasadnionego powodu, aby mieć tak długie limity czasu połączenia, ponieważ „kolejki limitów” i „tarpit limitów czasu” można zawsze użyć, aby tego uniknąć).
Przeczytaj : Podczas przeprowadzania kontroli poprawności serwer musi timeout connect
zaakceptować połączenie, a następnie timeout check
udzielić odpowiedzi.
Wszystkie serwery MUSZĄ mieć skonfigurowane sprawdzenie poprawności HTTP (S). To jedyny sposób, aby moduł równoważenia obciążenia wiedział, czy serwer jest dostępny. Kontrola zdrowia to prosta /isalive
strona, na którą zawsze można odpowiedzieć OK
.
Daj temu limit czasu co najmniej 5 sekund, ponieważ tyle czasu może potrwać, gdy wydarzy się coś nieoczekiwanego (utracony pakiet TCP do ponownej transmisji, serwer wymusza nowy proces do przyjmowania nowych żądań, wzrost ruchu).
War Story : Wiele osób błędnie uważa, że serwer zawsze może odpowiedzieć na tę prostą stronę w 3 ms. Ustawiają agresywny limit czasu (<2000 ms) z agresywnym przełączaniem awaryjnym (2 nieudane kontrole = serwer nie działa). Z tego powodu widziałem, jak całe witryny się psują. Zazwyczaj występuje niewielki wzrost ruchu, serwery zaplecza stają się wolniejsze, kontrole zdrowia są opóźnione ... aż nagle wszystkie się skończyły razem, HAProxy uważa, że WSZYSTKIE serwery zginęły jednocześnie, a cała strona się zawiodła.