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

Валентин Бартенев ne на vbart.ru
Ср Дек 14 15:39:19 UTC 2011


On Wednesday 14 December 2011 18:22:26 Maxim Dounin wrote:
> Давай для начала распишем последствия обычного "последовательного"
> применения лимитов, чтобы было понятно что так нельзя.  Или,
> наоборот, можно, но с какими ограничениями.
> 
> Что касается принципа, то он мне не нравится: нам либо нужно всё
> это делать держа локи (deadlock expected), либо имеем race между
> проверкой и обновлением (и, опять же, локи придётся брать два
> раза, что тоже не очень хорошо).
> 

В limit_conn у нас также локи берутся дважды, и тут, на первый взгляд,
всё можно сделать по тому же принципу.

Опять же, всё упирается в то, хотим ли мы считать отклоненные запросы или
не хотим.

"Счёт" только еще можно разделить на два уровня:
 - обновление времени последнего запроса;
 - увеличение очереди.

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

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

Меньший rate -> более жесткие меры - IMHO, вот так быть не должно.

--
Валентин Бартенев


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