Welcome! Log In Create A New Profile

Advanced

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

Валентин Бартенев
February 02, 2016 11:50AM
On Tuesday 02 February 2016 22:08:37 Pavel V. wrote:
> Здравствуйте, Валентин.
>
> > Невозможно добавить или убрать ограничение, не повлияв на работу остальных.
>
> В моей схеме можно добавить дополнительное тестовое ограничение, которое не
> сможет приводить к отклонению запроса, а значит не повлияет на подсчет запросов
> в остальных зонах.
>
> >> В моей схеме можно добавить новую зону в тестовом режиме в дополнение к уже
> >> настроенным ограничениям. Не понимаю, как добавление новой тестовой зоны сможет
> >> повлиять на уже настроенные ограничения.
>
> > Если директива приводит к отклонению запроса, то он не будет учтен во всех
> > зонах. Если мы сделаем режим таким, что при этом запрос будет учтен, но не
> > будет отклонен, то это не даст нам возможности оценить работу директивы,
> > поскольку всё будет работать несколько не так, как если бы dry-run был выключен
> > и не позволит оценить реальное влияние директивы на количество пропущенных
> > запросов.
>
> Тестовое ограничение не может приводить к отклонению запроса, значит запрос
> может быть отклонен только другой, не тестовой директивой.
>
> Если состояние тестируемой зоны показывает необходимость отклонения
> запроса этой зоной, то запрос в этой тестовой зоне не учитывается независимо от
> того, будет ли отклонен запрос другими зонами или нет. В остальных зонах запрос
> учитывается согласно окончательному решению по отклонению или пропуску запроса,
> на которое тестируемая зона не влияет.
>
> Если другие, не тестовые директивы, не отклоняют запросы, то их подсчет в
> тестовой зоне ведется и будет соответствовать реальной картине потока запросов.
>
> Если другие, не тестовые директивы, отклоняют запросы, а тестовая зона не
> отклоняет - значит тестируемая зона имеет менее жесткие ограничения, что
> является для нас метрикой допустимости перевода её в боевой режим.
>
> Перевод в боевой режим может только уменьшить число запросов, поступающих на
> учет нетестовые зоны, что является ожидаемым поведением в силу более жесткого
> ограничения во включаемой зоне.
>
[..]

Да, и это влияние на учет запросов в других зонах может сказаться на
поведении.

Скажем вот в такой конфигурации:

location /one {
limit_req zone=soft; # rate=100r/s
limit_req zone=hard; # rate=1r/s
}

location /two {
limit_req zone=soft; # rate=100r/s
}

Переключение limit_req zone=hard из режима dry-run в основной по вашей
схеме может привести к тому, что в location /two начнет попадать существенно
больше запросов.

Этот эффект может быть нежелателен. И если из данного, искусственного
примера, его можно прогнозировать, то в типичном случае, когда в один
location объединены ограничения по различным факторам, спрогнозировать
может быть трудно, а 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.
>

А вот и не получится увидеть. 1r/s в режиме dry-run может отклонить
существенно меньше запросов, чем в обычном режиме. Произойти это может
из-за того, что часть запросов, которые могли бы попасть под ограничение
в zone=test будут отклонены в зонах one и two.

Работа ограничений в зонах one и two изменится при выключении dry-run в
зоне test.


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

Зависит от критерия, по которому производится ограничение.

--
Валентин Бартенев
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Улучшение ngx_http_limit_req_module

Pavel V. February 01, 2016 04:50AM

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

Maxim Dounin February 01, 2016 08:26AM

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

Pavel V. February 01, 2016 12:04PM

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

Maxim Dounin February 01, 2016 01:18PM

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

Pavel V. February 01, 2016 06:46PM

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

Валентин Бартенев February 02, 2016 06:26AM

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

Pavel V. February 02, 2016 08:24AM

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

Валентин Бартенев February 02, 2016 09:00AM

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

Pavel V. February 02, 2016 11:10AM

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

Валентин Бартенев February 02, 2016 11:50AM

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

Pavel V. February 02, 2016 01:32PM

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

Валентин Бартенев February 02, 2016 02:06PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 169
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready