Re: Реализация multiple limit_req

Maxim Dounin mdounin на mdounin.ru
Ср Дек 14 14:22:26 UTC 2011


Hello!

On Wed, Dec 14, 2011 at 06:05:01PM +0400, Валентин Бартенев wrote:

> 
> Не алгоритм, а принцип работы:
> 
>  - Ищем лимит, который отклоняет запрос;
>  - if found
>     -- Отклоняем запрос.
>  - else 
>     -- Учитываем запрос во всех лимитах;
>     -- Ищем лимит, который устанавливает наибольший delay;
>     -- if max delay == 0
>         --- Пропускаем запрос.
>     -- else
>         --- Задерживаем запрос на max delay.
> 
> Хорошо?

Давай для начала распишем последствия обычного "последовательного" 
применения лимитов, чтобы было понятно что так нельзя.  Или, 
наоборот, можно, но с какими ограничениями.

Что касается принципа, то он мне не нравится: нам либо нужно всё 
это делать держа локи (deadlock expected), либо имеем race между 
проверкой и обновлением (и, опять же, локи придётся брать два 
раза, что тоже не очень хорошо).

Maxim Dounin



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