Persistent HTTP connections && Pipelining

Konstantin Svist fry.kun at gmail.com
Wed Nov 14 04:01:36 MSK 2007


Anton Yuzhaninov wrote:
> On 14.11.2007 2:52, Konstantin Svist wrote:
>> * С keep-alive, с pipelining: новый запрос может быть послан по 
>> уже-существующему соединению. Побочный эффект: несколько запросов 
>> можно послать в одном пакете - но не обязательно.
>>
>
> Утрированный пример.
> На бэкенде апач с MaxClients 2
>
> Фронтен держит две Keep-Alive коннекции до бэкенда.
>
> На фронтенд приоходит почти одновременно три запроса A, B, C
>
> Фронтент с A послает через одну коннекцию, а два запроса B и C 
> pipelin-ит через вторую коннекцию.
>
> A запрос окзался "легким" и быстро освободил первый процесс.
> Запрос B оказался "тяжелыми" и надолого занял 2-й процесс.
>
> В результате запрос C ждет пока до него доберятся занятый второй 
> процесс. хотя 1-й в это время простаивает и мог бы его обработать, 
> если бы фонтенд не использовал pipelining.
>
> Когда бэкенд имеет запас производительности то заметную часть времени 
> процессы апача спят в ожидании accept()
> в этом случае отпрака двух запросов одному процессу через pipelining 
> только увеличит время ответа. Второй запрос лучше послать одному из 
> незанятых процессов.
>
> Если же все процессы заняты (вообще это говорит о том, что сервер 
> перегружен), то выгоднее не послыать этот запрос через pipelining 
> (поскольку мы не знаем какому процессу его лучше послать), а немного 
> подождать и послать запрос тому, кто первый освободится.
>
> Когда фронтенд для подключения к бэкенду не использует Keep-Alive то 
> падание запроса к первому освободившемуся процессу произойдет 
> атоматически (он сделает accept и заберет коннекцию из listen queue). 
> В случае если фонтенд использует Keep-Alive он сам должен 
> организровать очередь запросов и отпрвить запрос из очереди тому 
> процессу, который перым пришлет ответ и таким образом сообщит, что он 
> освободился.
>
А разве сервер обязан ждать пока запрос B обработается до того как 
обработать C?







More information about the nginx-ru mailing list