ПРОЕКТЫ 


  АРХИВ 


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]

Ограничение соединений с backe nd


  • To: nginx-ru@xxxxxxxxx
  • Subject: Ограничение соединений с backe nd
  • From: Vladimir Latyshev <latysheff@xxxxxxxxx>
  • Date: Mon, 15 Jun 2009 13:33:26 +0400
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=J3R/HSPkwSuUzCFWkAPVFTJrWs/GlwEq9yEAgUMCzCE=; b=KUZTvXAi5dNSEgK3/rjZ9Wu35cQT+Wr+Gm2pI05aPp0wSHKHUUd2GcNL9MeC/kSYd3 QowsZZFCCEuz4oEQayXOoLvg/U2eu7dJB7pmjg1yQgH1GuYmHiXXkA6ZMgkCb6caxYNr a35xbBjic6jejOr7t9eldiVMJA6QX1UNOMzEw=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=VEJpd04cNJw1HEFQh3ZAn0fZkCZ3dMHKmS/RMf981fqp9oCdV0hRY3+jD/s3/OM+aD C/X4Pne4ijJrH9GTT16E7gdh12REMosIqrl6iRq1cf65WsvgZ5xNNl40Ij0FhBrrBRW1 lvTxgUDvtdsE81AzAbilI9iqyNCovcb2MQ31Y=

В архиве нашел подобную тему, но решение неясно.

Как известно, apach'у плохеет при большом количестве соединений. Предположим, нагрузочным тестированием выявлено, что некий сервис на apache+php тянет 100 одновременных обращений, а при большей нагрузке - ложится. MaxClients ставим на сотню, но лишние соединения все равно приходят, висят в очереди (ListenBacklog), и де-факто получаем для всех 100% клиентов слишком долгое ожидание. Как побороть это в апаче - так и не придумал. Хочется сделать так, чтобы те, кому "повезло" получали ответ быстро сразу, а остальные - вежливый отлуп (еще быстрее, хехе).

Возможно ли с помощью nginx ограничить глобально число активных соединений с бэкэндом при использовании директивы proxy_pass, а всем "лишним" выдавать некую статику?
Можно попробовать выкрутиться так:

limit_zone conn $myvar 100k;
set $myvar 1; # константа, то есть ограничение для всех (глобально)
limit_conn conn 100;
error_page  503 =200 /sorry.html;

Но этот вариант не устраивает, так как медленные соединения заблокируют доступ остальным, а апач будет по сути простаивать.
Что еще можно придумать? Подозреваю, что я не первый задаюсь этим вопросом и решение уже существует :)


 




Copyright © Lexa Software, 1996-2009.