Re: Улучшение ngx_http_limit_req_module

Pavel V. pavel2000 на ngs.ru
Вт Фев 2 16:08:37 UTC 2016


Здравствуйте, Валентин.

> Невозможно добавить или убрать ограничение, не повлияв на работу остальных.

В моей схеме можно добавить дополнительное тестовое ограничение, которое не
сможет приводить к отклонению запроса, а значит не повлияет на подсчет запросов
в остальных зонах.

>> В моей схеме можно добавить новую зону в тестовом режиме в дополнение к уже
>> настроенным ограничениям. Не понимаю, как добавление новой тестовой зоны сможет
>> повлиять на уже настроенные ограничения.

> Если директива приводит к отклонению запроса, то он не будет учтен во всех
> зонах. Если мы сделаем режим таким, что при этом запрос будет учтен, но не
> будет отклонен, то это не даст нам возможности оценить работу директивы,
> поскольку всё будет работать несколько не так, как если бы dry-run был выключен
> и не позволит оценить реальное влияние директивы на количество пропущенных
> запросов.

Тестовое ограничение не может приводить к отклонению запроса, значит запрос
может быть отклонен только другой, не тестовой директивой.

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

Если другие, не тестовые директивы, не отклоняют запросы, то их подсчет в
тестовой зоне ведется и будет соответствовать реальной картине потока запросов.

Если другие, не тестовые директивы, отклоняют запросы, а тестовая зона не
отклоняет - значит тестируемая зона имеет менее жесткие ограничения, что
является для нас метрикой допустимости перевода её в боевой режим.

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

> Если мы будем действовать также, как без режима dry-run, но только пропускать
> запрос, то это повлияет на работу сервера парадоксальным образом - более
> жесткое ограничение в режиме dry-run будет приводить к пропусканию сервером
> большего количества запросов, чем при его отсутствии.

Другие, не тестовые директивы, могут отклонить запрос.

Я вижу применение например следующим:

limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;  #perip
limit_req_zone $server_name zone=two:10m rate=10r/s;        #perserver

limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s dry-run;  #test zone

location / {
      limit_req zone=test; # rate = 1 r/s, dry run
      limit_req zone=one;  # rate = 2 r/s
      limit_req zone=two;  # rate = 100 r/s
}

Цель добавления зоны test -  увидеть, какое количество запросов будет
задержано/отклонено, если мы уменьшим rate с 2r/s до 1r/s в зоне one.

Я думаю, что вполне понятно то, что если в контексте есть ограничение с зоной
one с rate=2r/s, то добавление ограничения с тестовой зоной test с rate=3r/s не
покажет "количества ограничений", но это и не ожидается и не требуется.


-- 
С уважением,
 Pavel                          mailto:pavel2000 at ngs.ru



Подробная информация о списке рассылки nginx-ru