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/sjest ustawiony, maksymalna zdolność serwera to np. 10000r/sKtóry jest 10r/msi jest w tej chwili tylko 1 klient.
Oto główna różnica między 10r/s per IP burst=40 nodelayi 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, 1spodczas gdy druga 40thotrzymuje 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/sograniczenie 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, Bi C.
Bez nodelayżądania są obsługiwane w kolejności podobnej do ABCABCABC.
W nodelayprzypadku 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=20vs 10r/sThe 11thprośba ma być natychmiast odrzucona na podstawie tego ostatniego warunku, ale teraz jest w kolejce i będzie służył. 11thŻądanie zajmuje 21thszansę ż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?