Nie zrozumiałem tego po raz pierwszy, kiedy czytałem wprowadzenie z https://www.nginx.com/blog/rate-limiting-nginx/ .
Teraz jestem pewien, że rozumiem, a moja odpowiedź jest jak dotąd najlepsza. :)
Załóżmy, że: 10r/s
jest ustawiony, maksymalna zdolność serwera to np. 10000r/s
Który jest 10r/ms
i jest w tej chwili tylko 1 klient.
Oto główna różnica między 10r/s per IP burst=40 nodelay
i 10r/s per IP burst=40
.
Jak udokumentowano na https://www.nginx.com/blog/rate-limiting-nginx/ ( zdecydowanie polecam najpierw przeczytać artykuł (z wyjątkiem sekcji Dwustopniowego ograniczania prędkości )), takie zachowanie rozwiązuje jeden problem. Który?:
W naszym przykładzie dwudziesty pakiet w kolejce czeka na przesłanie przez 2 sekundy, w którym to momencie odpowiedź na nie może być już przydatna dla klienta.
Sprawdź wersję roboczą, którą wykonałem, 40th
żądanie otrzymuje odpowiedź o, 1s
podczas gdy druga 40th
otrzymuje odpowiedź o 4s
.
To może najlepiej wykorzystać możliwości serwera: odsyła odpowiedzi tak szybko, jak to możliwe, jednocześnie zachowując x r/s
ograniczenie do danego klienta / adresu IP.
Ale tutaj też są koszty. Koszt będzie wynosić:
Jeśli masz wielu klientów w kolejce na serwerze, powiedzmy klient A
, B
i C
.
Bez nodelay
żądania są obsługiwane w kolejności podobnej do ABCABCABC
.
W nodelay
przypadku zamówienia jest bardziej prawdopodobne AAABBBCCC
.
Chciałbym podsumować artykuł https://www.nginx.com/blog/rate-limiting-nginx/ tutaj.
Przede wszystkim najważniejsza jest konfiguracja x r/s
.
x r/s
tylko nadmierne wnioski są natychmiast odrzucane.
x r/s
+ burst
, nadmiarowe żądania są w kolejce.
1.
vs 2.
, koszt jest taki, że po stronie klienta kolejki żądań podejmują ryzyko późniejszych żądań, które miały szansę zostać obsłużone.
Na przykład 10r/s burst=20
vs 10r/s
The 11th
prośba ma być natychmiast odrzucona na podstawie tego ostatniego warunku, ale teraz jest w kolejce i będzie służył. 11th
Żądanie zajmuje 21th
szansę życzenie użytkownika.
x r/s
+ burst
+ nodelay
, już wyjaśnione.
PS Rozdział dwustopniowego ograniczenia prędkości w artykule jest bardzo mylący. Nie rozumiem, ale to nie wydaje się mieć znaczenia.
Na przykład:
Po wprowadzeniu tej konfiguracji klient, który wysyła ciągły strumień żądań z prędkością 8 obr./s, doświadcza następującego zachowania.
8 r / s? poważnie? Obraz pokazuje 17 żądań w ciągu 3 sekund, 17/3 = 8?