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

Maxim Dounin mdounin на mdounin.ru
Пн Дек 19 08:27:20 UTC 2011


Hello!

On Sun, Dec 18, 2011 at 10:00:51PM +0200, Gena Makhomed wrote:

> On 14.12.2011 18:24, Maxim Dounin wrote:
> 
> >E.g. типичная ситуация для хостинга, когда лимиты хочется на
> >каждый $host (чтобы один атакуемый сайт не мог съесть все
> >ресурсы), и на ip (чтобы с одного ip-адреса, вздремнув на ^R,
> >нельзя было съесть все ресурсы):
> >
> >    limit_req<per-host>;
> >    limit_req<per-ip>;
> >
> >Если атакуют $host, то всё хорошо.
> >
> >Если ^R, то проблема: легко "выедается" лимит на $host (хотя
> >запросы реально не обслуживаются), и тем самым нужный хост
> >фактически блокируется.
> >
> >В данном конкретном случае - проблема легко решается сменой
> >порядка применения лимитов: сначала per-ip, потом per-host.
> >
> >Вопрос: есть ли в реальной жизни задачи, где проблема так *не*
> >решается?
> >
> >(С теоретической точки зрения - понятно, что такие задачи есть.
> >Интересуют сколько-нибудь относящиеся к реальной жизни примеры.)
> 
> выше предполагается, что все запросы имеют примерно одинаковый вес.
> в рельной жизни - запросы к backend`у бывают как очень легкими,
> которые отрабатывают за десятые/сотые доли секунды, так и очень
> тяжелыми, обработка которых на backend`е занимает несколько секунд
> или даже несколько десятков секунд.
> 
> в haproxy есть очень изящное решение:
> 
> maxconn <maxconn>
> maxqueue <maxqueue>
> 
> это почти идеальное решение для выравнивания нагрузки на backend,
> так чтобы никакой $host не занял 100% ресурсов backend`а,
> и в то же время, чтобы не было 503 ошибок при небольшом
> и временном всплеске нагрузки на какой-то $host.
> например:
> 
> maxconn 1
> maxqueue 128
> 
> или
> 
> maxconn 1
> maxqueue 1024
> 
> с помощью
> 
> limit_req<per-host>;
> 
> такого плавного выравнивания нагрузки получить нельзя,
> потому что backend или будет перегружен "тяжелыми" запросами,

С помощью limit_req "такого плавного выравнивания получить 
нельзя", потому что он для этого не предназначен.

А по теме есть что сказать?

Maxim Dounin



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