ПРОЕКТЫ 


  АРХИВ 


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: freebsd+nginx+php-fpm


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: freebsd+nginx+php-fpm
  • From: Andrei Nigmatulin <andrei.nigmatulin@xxxxxxxxx>
  • Date: Thu, 18 Jun 2009 21:39:22 +0400
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:subject:date :user-agent:references:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:message-id; bh=LTPDf8+QvQfnBgsa2C6WVGTYHspt7jn9RgSig68StSY=; b=KRXagRbBCcjgHhOSkCxk0MjTczjatni4j/fU/ZJnBbajShnR+Zt2Evwfxf0rQepC1i Rz6yOWJMsorSTuZQxCAW7Jw1GgWpTwLgOzNR/zE9dJSBbDoQrqIp+mLyL6PRYy6JVN/a fwtZtcwh+tZ7IaD8ZELK9SRHGyq8pvofJue9Q=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:subject:date:user-agent:references:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :message-id; b=X/oN3Whk1/cz29Cv2jpcX0bKjqCNuzVOgWcUSDL03ZR6lBIZqHeWxetAhfMuDEN4j3 RQ2MXYQd0lFZoj3fvej9jUmEjsEcpp0jwsUM1CRKeEySuD0+ugQvmZCiDH4jPhRd33eZ YTfk6JjICiX935YFGZAuNBxGxlo8zgGFZNNaw=
  • In-reply-to: <332080436.20090618192914@xxxxxxxxx>
  • References: <4A3A268C.3050207@xxxxxxx> <200906181843.14255.andrei.nigmatulin@xxxxxxxxx> <332080436.20090618192914@xxxxxxxxx>

On Thursday 18 June 2009 20:29, Gena Makhomed wrote:
> On Thursday, June 18, 2009 at 17:43:14, Andrei Nigmatulin wrote:
> >> overhead в случае unix sockets меньше,
> >> поэтому они должны быть быстрее чем tcp.
>
> AN> Мне тоже интуитивно кажется, что они должны быть быстрее. Хочется
> увидеть AN> конкретные цифры. Правильный бенчмарк, который все расставит по
> местам.
>
> конкретные цифры можно увидеть с помощью бенчмарка http://www.netperf.org/
>
> >> AN> Во-вторых, при переполнении listening queue
> >> AN> в случае unix sockets клиент будет получать ошибку 502
> >>
> >> listening queue как раз и предназначена для сглаживания всплесков.
> >> 502 ошибку будут получать только те клиенты, которых backend сервера
> >> уже гарантированно не успеет обслужить, поэтому сразу возвращает ошибку.
> >>
> >> администратору всего лишь следует
> >> адекватно настроить размер listening queue.
>
> AN> Все дело в силе всплесков и плотности потока запросов.
> AN> Можно и 10000 поставить и этого не хватит в момент затупления базы.
>
> в момент "затупления базы" и переполнения listening queue -
> backend фактически не работоспособен. лучше честно вернуть
> 502 ошибку, чем пытаться имитировать какую-то деятельность.

Это для вашей конкретной ситуации может быть лучше. Не вижу чем это лучше для 
меня, например.

> у nginx`а тогда будет шанс отправить запрос на резервный backend,
> отправить устаревший закешированный ответ, или каким-то другим
> способом провести восстановление после сбоя backend`а.

Тогда оставьте в покое listening queue. Отправлять запрос на резервный backend 
надо через fastcgi_connect_timeout. Иначе непонятен смысл - вы не 
беспокоитесь за судьбу уже зависших в listening queue соединений, но 
беспокоитесь за те, которые его переполнят.

> AN> Я исхожу из практических соображений и опыта.
>
> я исхожу из теоретических соображений и опыта.
>
> AN> А вы видели хоть одного администратора, который знает как правильно
> AN> расчитать размер listening queue, исключая подбор значений
> экмпериментально ?
>
> разве это так сложно? len( listening queue ) == wait_time / response_time
> wait_time - сколько времени средний клиент захочет ждать ответ от сервера
> response_time - среднее время обработки одного запроса backend`ом сервера
>
> например, в случае wait_time == 20 sec, response_time == 0.020 sec
> размер listening queue для этого backend`а будет равен 1024.
> для гарантии можно этот параметр увеличить в полтора-два раза.
>
> но при len( listening queue ) == 10000, response_time == 0.020 sec
> и при заполнении listening queue - запросы будут проводить в ней
> по 200 секунд. и *каждый* клиент будет ~ 200 секунд ждать ответ.

И где тут учитываются всплески ? Обслуживать поток запросов с постоянной 
плотностью просто и скучно. Да и на практике такое редко встретишь.

> >> AN> тогда как tcp поддерживает retransmission и соответственно,
> >> AN> более устойчив к всплескам (кратковременному, непериодическому
> >> AN> увеличению) кол-ва запросов.
> >>
> >> feature "Retransmission of lost packets" работает
> >> уже после того, как было установлено соединение.
>
> AN> По крайней мере в случае linux сервера это не так.
> AN> Клиентский syn просто игнорируется, если listening queue полный.
>
> $subj. а в случае linux это будет "wasting of resources" сервера,
> потому что вместо ответа "да" или "нет" frontend будет получать
> от backend`а нечеткий ответ "может быть", и будет повторять попытки.

Значит, listening queue на бекенде можно тюнить, а кол-во соединений в nginx 
нельзя ? Посчитайте по формулам и установите сколько надо, не будет никакого 
resource wasting.

> фактически это будет еще одна, достаточно неэффективная,
> listening queue, реализованная внутри frontend`а сервера.
> неэффективная из-за постоянных повторных попыток подключения.

Ну поскольку вы предлагаете в качестве альтернативы все избыточные запросы 
отправлять на второй backend, то непонятно, чем пассивная очередь ожидающих 
установления соединений может быть хуже чем такое же количество активных 
соединений до второго backend.


-- 
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take


 




Copyright © Lexa Software, 1996-2009.