Я вперше цього не зрозумів, коли читав вступ із https://www.nginx.com/blog/rate-limiting-nginx/ .
Тепер я впевнений, що розумію, і моя відповідь поки що найкраща. :)
Припустимо: 10r/s
встановлено, максимальна можливість сервера є, наприклад, 10000r/s
яка є 10r/ms
і на даний момент є лише 1 клієнт.
Отже ось основна відмінність між 10r/s per IP burst=40 nodelay
і 10r/s per IP burst=40
.
Оскільки https://www.nginx.com/blog/rate-limiting-nginx/ задокументовано ( настійно рекомендую ознайомитись зі статтею спочатку (за винятком розділу " Двоступінчасті обмеження швидкості ")), така поведінка вирішує одну проблему. Який?:
У нашому прикладі 20-й пакет у черзі чекає 2 секунди, щоб його переадресували, і тоді відповідь на нього більше не може бути корисною для клієнта.
Перевірте проект, який я зробив, на 40th
запит отримують відповідь, 1s
а інший 40th
отримує відповідь о 4s
.
Це дозволяє найкращим чином використовувати можливості сервера: надсилати відповіді як можна швидше, зберігаючи при цьому x r/s
обмеження для даного клієнта / IP.
Але тут також є вартість. Вартість складе:
Якщо у вас на сервері багато клієнтів, то, скажімо, клієнт A
, B
і C
.
Без nodelay
цього запити подаються в порядку, подібному до ABCABCABC
.
З nodelay
, швидше за все, буде замовлення AAABBBCCC
.
Я хотів би підвести підсумок статті https://www.nginx.com/blog/rate-limiting-nginx/ тут.
Перш за все, найважливіша конфігурація x r/s
.
x r/s
лише надлишки запитів негайно відхиляються.
x r/s
+ burst
, зайві запити в черзі.
1.
проти 2.
, вартість полягає в тому, що на стороні клієнта запити, що стоять у черзі, приймають шанси на наступні reuqests, які мали б можливість отримати обслуговування.
Наприклад, 10r/s burst=20
проти 10r/s
, 11th
запит повинен бути відхилений негайно за останньою умовою, але зараз він знаходиться в черзі та буде наданий. 11th
Запит займає 21th
можливість запиту.
x r/s
+ burst
+ nodelay
, вже пояснено.
PS Розділ статті про обмеження швидкості у двох ступенях дуже заплутаний. Я не розумію, але це, мабуть, не має значення.
Наприклад:
За умови встановлення такої конфігурації клієнт, який здійснює безперервний потік запитів при 8 об / х, відчуває таку поведінку.
8 р / с? серйозно? На зображенні показано 17 запитів протягом 3 секунд, 17/3 = 8?