Re: несколько fastcgi серверов

Gena Makhomed gmm at csdoc.com
Sun Aug 31 17:58:17 MSD 2008


On Sunday, August 31, 2008 at 16:01:52, Alex Vorona wrote:

>> К> Если какой-то fastcgi сервер решил что он уже перегружен
>> К> (слишком много запросов он еще не ответил), то он может
>> К> послать nginx обратно ошибку (например 503) и тогда nginx
>> К> его исключит на следуюшие N секунд как я задал в fail_timeout.

>> если fastcgi-сервер решил, что он перегружен - он может временно
>> не принимать новых запросов (не делать accept на server socket).

например, на backend`е крутится в prefork-режиме 64 worker`а,
если они все заняты - новые запросы ожидают в очереди сокета.

AV> если не делать accept - будет расти backlog и всё,
AV> запросы не будут перенаправляться на другие бекенды.

зачем перенаправлять запросы на другие backend`ы,
если там примерно такая же ситуация с нагрузкой?

AV> Как я понимаю, хочется же дать знать nginx'у,
AV> что больше запросов на этот бекенд пока не надо посылать.

в результате еще больше вырастет нагрузка на остальные backend`ы,
они также с ней не смогут справиться и перейдут в состояние "failed".

через короткий промежуток времени живых backend`ов вообще не останется.
все клиенты будут получать на свои запросы 503 ошибку. DOS-атака удалась.

AV> Выдача ошибки, по которой nginx пойдёт к следующему бекенду и забудет
AV> про перегруженней бекенд на нужное время - вполне мне кажется решением.

это может быть решением, если один запрос обрабатывается 20-30 секунд,
и у сервера есть в наличии большое количество простаивающих backend`ов

если backend`ы single-threaded, - для этого случая есть модуль nginx-upstream-fair
необработанные клиентские запросы будут ожидать, пока освободится какой-то backend.

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list