Przyjmijmy pragmatyczne podejście.
Wszystkie te ograniczenia to rzeczy, które zostały zakodowane na stałe i zaprojektowane w ubiegłym wieku, kiedy sprzęt był wolny i drogi. Jesteśmy w 2016 roku, przeciętny toster ścienny może przetworzyć więcej żądań niż wartości domyślne.
Domyślne ustawienia są w rzeczywistości niebezpieczne. Posiadanie setek użytkowników na stronie internetowej nie jest imponujące.
proces_procesowy
Powiązane ustawienie, wyjaśnijmy to, gdy jesteśmy w temacie.
nginx jako moduł równoważenia obciążenia:
- 1 pracownik do równoważenia obciążenia HTTP.
- 1 pracownik na rdzeń do równoważenia obciążenia HTTPS.
nginx jako serwery WWW:
Ten jest trudny.
Niektóre aplikacje / frameworki / oprogramowanie pośrednie (np. Php-fpm) są uruchamiane poza Nginx. W takim przypadku wystarczy 1 pracownika nginx, ponieważ zwykle jest to zewnętrzna aplikacja, która intensywnie przetwarza i zjada zasoby.
Ponadto niektóre aplikacje / frameworki / oprogramowanie pośrednie mogą przetwarzać tylko jedno żądanie na raz i przeciążenie ich jest wsteczne.
Ogólnie rzecz biorąc, 1 pracownik jest zawsze bezpiecznym zakładem.
W przeciwnym razie możesz umieścić jednego pracownika na rdzeń, jeśli wiesz, co robisz. Uważam tę drogę za optymalizację i doradzam odpowiednie testy porównawcze i testy.
połączenia_procesowe
Łączna liczba połączeń wynosi worker_process * worker_connections
. Połowa w trybie równoważenia obciążenia.
Teraz dochodzimy do części tostera. Istnieje wiele poważnie niedocenianych limitów systemu:
- ulimits to maksymalnie 1k otwartych plików na proces w systemie Linux (1k miękki, 4k twardy w niektórych dystrybucjach)
- systemed limity są mniej więcej takie same jak ulimits.
- Domyślnie nginx to 512 połączeń na pracownika.
- Może być więcej: SELinux, sysctl, supervisord (każda wersja distro + jest nieco inna)
1k połączeń_obsługowych
Domyślnym bezpiecznym rozwiązaniem jest umieszczenie 1k wszędzie.
Jest wystarczająco wysoki, aby był większy niż większość wewnętrznych i nieznanych stron kiedykolwiek się z nim spotka. Jest wystarczająco niski, aby nie przekroczyć żadnych innych limitów systemu.
10k połączeń_obsługowych
Bardzo często mamy tysiące klientów, szczególnie w przypadku publicznej witryny internetowej. Przestałem zliczać liczbę stron, które widziałem, które spadły z powodu niskich domyślnych ustawień.
Minimalne dopuszczalne do produkcji to 10 tys. Powiązane limity systemowe muszą zostać zwiększone, aby na to pozwolić.
Nie ma czegoś takiego jak zbyt wysoki limit (limit po prostu nie działa, jeśli nie ma użytkowników). Jednak zbyt niski limit to bardzo realna rzecz, która powoduje odrzucenie użytkowników i martwą witrynę.
Ponad 10 tys
10k jest przyjemne i łatwe.
Moglibyśmy ustalić dowolne limity 1000kk (w końcu to tylko limit), ale to nie ma praktycznego sensu, nigdy nie uzyskujemy tego ruchu i nie mogliśmy go znieść.
Trzymajmy się 10k jako rozsądnego ustawienia. Usługi, które będą (i naprawdę mogą zrobić) więcej, będą wymagać specjalnego strojenia i testów porównawczych.
Scenariusz specjalny: użycie zaawansowane
Czasami wiemy, że serwer nie ma wielu zasobów i oczekujemy skoków, o których niewiele możemy zrobić. Wolimy odmawiać użytkownikom niż próbować. W takim przypadku ustal rozsądny limit połączenia i skonfiguruj ładne komunikaty o błędach i obsługę.
Czasami serwery zaplecza działają dobrze i dobrze, ale tylko do pewnego obciążenia , cokolwiek więcej i wszystko idzie szybko na południe. Wolelibyśmy zwolnić, niż spowodować awarię serwerów. W takim przypadku skonfiguruj kolejkowanie z ścisłymi limitami, pozwól nginx buforować całe ciepło, podczas gdy żądania są opróżniane w ograniczonym tempie.