ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



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 mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.