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