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