Nginx - То, какова nodelay опция, делает при ограничении запросов?

IMAP является другим протоколом и использует различные порты, чем HTTP. Стандартные порты для IMAP равняются 143 и 993 для безопасного IMAP.

Если у Вас есть проблемы при соединении, я подозреваю, что брандмауэр/маршрутизатор блокирует порт (порты) IMAP.

11
задан 14 March 2011 в 20:48
5 ответов

Документация здесь имеет объяснение, которое походит на то, что Вы хотите знать:

Директива указывает зону (зона) и максимальные возможные пакеты запросов (пакет). Если уровень превышает спрос, обрисованный в общих чертах в зоне, запрос отложен, так, чтобы запросы были обработаны в заданной скорости

Из того, что я понимаю, запросы по пакету будут отложены (займите больше времени и ожидайте, пока они не могут быть поданы), с nodelay опции задержка не используется и избыточные запросы, отклонены с 503 ошибками.

Это сообщение в блоге (archive.org) дает хорошее объяснение, как ограничение уровня работает над nginx:

Если Вы похожи на меня, Вы, вероятно, задаетесь вопросом, какого черта разорванный действительно означает. Вот прием: замените слово 'пакет' 'блоком' и предположите, что каждому пользователю дают блок с 5 маркерами. Каждый раз, когда они превышают уровень 1 запроса в секунду, они должны заплатить маркер. После того как они потратили все свои маркеры, им дают сообщение об ошибке HTTP 503, которое по существу стало стандартом для, ‘отступают, человек!’.

11
ответ дан 2 December 2019 в 21:43

Я не понял, что в первый раз, когда я читал введение от [1 131] 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.

enter image description here

Как https://www.nginx.com/blog/rate-limiting-nginx / зарегистрированный ( я настоятельно рекомендую читать статью сначала (кроме раздел Two-Stage Rate Limiting)), это поведение решает одну проблему. Какой?:

В нашем примере, 20-й пакет в очереди ожидает 2 секунды, которые будут переданы, в которой точке ответ на него больше не мог бы быть полезен для клиента.

Проверка проект, который я сделал, эти 40th запрос, получает ответ в 1s, в то время как другой 40th получает ответ в 4s.

Это может лучше всего использовать возможность сервера: передает обратно ответы, максимально быстрые, все еще сохраняя x r/s ограничение данному клиенту/IP.

, Но там также стоится здесь. Стоимость будет:

, Если у Вас есть многие клиенты, ставящие в очередь на сервере скажем, клиент A, B и C.

Без [1 113], запросы подаются в порядке, подобном [1 114].
С [1 115], порядок, более вероятно, будет AAABBBCCC.

<час>

я хотел бы подвести итог статьи https://www.nginx.com/blog/rate-limiting-nginx / здесь.

, Прежде всего, самая важная конфигурация x r/s.

  1. x r/s только, избыточные запросы сразу отклоняются.

  2. x r/s + burst, избыточные запросы ставятся в очередь.

1. по сравнению с [1 122], стоимость - то, что на стороне клиента, запросы с очередями поднимают возможности позже reuqests, который будет иметь шанс того, чтобы быть подаваемым.

, Например, 10r/s burst=20 по сравнению с [1 124], эти 11th запрос, как предполагается, сразу отклоняется при последнем условии, но теперь это ставится в очередь и будет подаваться. Эти 11th запрос поднимает 21th шанс запроса.

  1. x r/s + burst + nodelay, уже объяснил.
<час>

P.S. раздел Two-Stage Rate Limiting статьи очень сбивает с толку. Я не понимаю, но это, кажется, не имеет значения.

, Например:

С этой конфигурацией на месте, клиент, который делает непрерывный поток запросов в 8 r/s, испытывает следующее поведение.

8 r/s? серьезно? Существует 17 запросов в течение 3 секунд, показанных в изображении, 17 / 3 = 8?

1
ответ дан 2 December 2019 в 21:43

Я вижу это следующим образом:

  1. Запросы будут обрабатываться как можно быстрее, пока не будет превышена скорость зоны. Скорость зоны "средняя", поэтому, если ваша скорость 1r / s и пакетная 10 , вы можете получить 10 запросов в 10-секундном окне.

  2. После того, как скорость зоны будет превышено:

    a. Без nodelay дальнейшие запросы вплоть до пакета будут задерживаться.

    b. С nodelay дальнейшие запросы вплоть до пакета будут обслуживаться как можно быстрее.

  3. После превышения пакета сервер будет возвращать ответ с ошибкой до тех пор, пока окно всплеска истекает например для скорости 1 об / с и пакета 10 клиенту нужно будет ждать до 10 секунд следующего принятого запроса.

6
ответ дан 2 December 2019 в 21:43

Ntọala ahụ na-akọwa ma arịrịọ ga-egbu oge ka ha kwekọọ na ọnụego achọrọ ma ọ bụ na a ga-ajụ ha naanị ... ma ọ bụrụ na ọnụọgụ ahụ na-ejedebe ọnụego ahụ ma ọ bụ ibu ọrụ gafere onye ahịa.

nodelay ugbu a

A ga-edozi arịrịọ ngwa ngwa o kwere mee; a ga-ajụ arịrịọ ọ bụla ezitere na njedebe a kapịrị ọnụ site na koodu edobere dị ka limit_req_status

nodelay abiaghi (aka egbu oge)

A ga-edozi arịrịọ na ọnụego dabara na oke a kapịrị ọnụ. Ya mere, dịka ọmụmaatụ ma ọ bụrụ na e setịpụrụ ọnụego 10 req / s, arịrịọ ọ bụla ga - edozi na> = .1 (1 / ọnụego) sekọnd, si otú a na-agaghị ekwe ka ọnụego gafere, mana ikwe ka arịrịọ ahụ kwadoo. Ọ bụrụ na arịrịọ zuru ezu iji laghachi na bọket ahụ (nke ga-egbochi njedebe njikọta otu oge), mgbe ahụ a ga-ajụ ha yana koodu edobere dị ka limit_req_status .

The gory details are here: https://github.com/nginx/nginx/blob/master/src/http/modules/ngx_http_limit_req_module.c#L263 ebe ezi uche dị na ya mgbe njedebe na-agafebeghị ma ugbu a, igbu oge ga-etinye aka na arịrịọ ahụ. Ngwa nke nodelay ọ kachasị site na ntuziaka na-abata ebe a: https://github.com/nginx/nginx/blob/master/src/http/modules/ngx_http_limit_req_module.c # L495 na-akpata uru nke igbu oge n'elu ka ọ bụrụ 0 na-akpalite onye nchịkwa ahụ ka ọ laghachi ozugbo a ga-ahazigharị ya ọzọ).

3
ответ дан 2 December 2019 в 21:43

TL; DR: Параметр nodelay полезен, если вы хотите установить ограничение скорости, не ограничивая допустимый интервал между запросами.

Мне было трудно переваривать другие ответы , а затем я обнаружил новую документацию от Nginx с примерами ответов на этот вопрос: https://www.nginx.com/blog/rate-limiting-nginx/

Вот подходящая часть. Дано:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

location /login/ {
  limit_req zone=mylimit burst=20;
  ...
}

Параметр пакета определяет, сколько запросов клиент может сделать в превышение нормы, заданной зоной (с нашей выборкой mylimit зона, ограничение скорости составляет 10 запросов в секунду или 1 на каждые 100 миллисекунды). Запрос, поступивший раньше, чем через 100 миллисекунд. после того, как предыдущий помещается в очередь, и здесь мы устанавливаем размер очереди равен 20.

Это означает, что с заданного IP-адреса поступает 21 запрос. одновременно NGINX перенаправляет первый на вышестоящий сервер группа немедленно и ставит оставшиеся 20 в очередь. Тогда это пересылает запрос из очереди каждые 100 миллисекунд и возвращает 503 в клиент только если входящий запрос делает количество поставленных в очередь запросов превышает 20.

Если вы добавляете nodelay:

location /login/ {
  limit_req zone=mylimit burst=20 nodelay;
  ...
}

С параметром nodelay, NGINX по-прежнему выделяет слоты в очереди. в соответствии с параметром пакета и устанавливает настроенную скорость ограничение, но не за счет пересылки запросов в очереди. Вместо этого, когда запрос приходит «слишком рано», NGINX пересылает его. немедленно, пока в очереди есть доступный слот. Он помечает этот слот как «занятый» и не освобождает его для использования другим запрос, пока не пройдет соответствующее время (в нашем примере после 100 миллисекунд).

10
ответ дан 2 December 2019 в 21:43

Теги

Похожие вопросы