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

Vladimir Latyshev latysheff at gmail.com
Mon Jun 15 13:33:26 MSD 2009


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

Как известно, 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;

Но этот вариант не устраивает, так как медленные соединения заблокируют
доступ остальным, а апач будет по сути простаивать.
Что еще можно придумать? Подозреваю, что я не первый задаюсь этим вопросом и
решение уже существует :)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20090615/366bbdb6/attachment.html>


More information about the nginx-ru mailing list