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