Я не понял этого в первый раз, когда читал вступление от 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.
vs 2.
стоимость заключается в том, что на стороне клиента запросы в очереди берут на себя шансы последующих запросов, которые будут иметь возможность быть обслуженными.
Например, 10r/s burst=20
против 10r/s
, 11th
предполагается , что запрос будет отклонен немедленно при последнем условии, но теперь он ставится в очередь и будет обслуживаться. 11th
Запрос занимает 21th
возможность запроса.
x r/s
+ burst
+ nodelay
, Уже пояснялось.
PS Раздел « Двухступенчатое ограничение скорости » статьи очень запутанный. Я не понимаю, но это не имеет значения.
Например:
С этой конфигурацией клиент, выполняющий непрерывный поток запросов со скоростью 8 об / с, испытывает следующее поведение.
8 р / с? шутки в сторону? В течение 3 секунд показано 17 запросов, 17/3 = 8?