Persistent HTTP connections && Pipelining
Konstantin Svist
fry.kun at gmail.com
Wed Nov 14 05:01:10 MSK 2007
Kostya Alexandrov wrote:
> Совершенно верно ты понял, это надстройка над кип алайв.
>
> Pipelining имеет смысл только в том случае если
> 1. ты шлеш (лигика приложения требует/позволяет, броузеры так делают и
> т.п.) новые запросы не дождавшись ответа
> 2. тебе не критичен порядок ответов.
>
> Отсюда он НЕ сможет сильно разгрузить бекенд сам по себе, если
> поддержка его формальна.
> Например в случае с апачем как бекендом толку особого небудет.
А я как раз пытаюсь разгрузить количество соединений (из-за проблемы с
моим брандмауером, в основном) - не разгрузить бекенд. Для разгрузки
бекенда у меня сейчас squid сидит.
Сервер, кстати, не Apache.
> В случае проксирующего софта, иметь pipelined конекшен с бекендом и НЕ
> pipelined с клиентом нельзя.
> т.к. без спецальных подкидываний, и поддержки чего то типа реквест
> айди на бекенде определить какой ответ
> кому отдать невозможно. Т.е. можно только если каждое кипаливное
> соединение клиента с ngnix проксируется
> в одно кипаливное соединение с бекендом.Однако имеет полный смысл если
> клиент устанавливает киип алайв
> соединение, и шлет следующий запрос послать его бекенду в том же сокете.
Если думать о прокси как клиент/сервер (со стороны клиента, сервер; со
стороны сервера, клиент), то кажется что должно быть возможно. Другое
дело что будет тяжело держать id каждого запроса..
А если клиент устанавливает keep-alive, использует ли nginx keep-alive к
обращению к серверу? Или всё-таки делает отдельные запросы? Если уже
поддерживает, то мне клиент надо лупасить :)
> Konstantin Svist wrote:
>> Anton Yuzhaninov wrote:
>>>>
>>>> Pipelining - это способ еще больше ускорить обработку
>>>> запросов, потому что клиент может отправить несколько
>>>> запросов "пачкой" не дожидаясь завершения обработки
>>>> предыдущего запроса перед отправкой следующего,
>>>> тогда backend вообще не будет простаивать
>>>> в ожидании нового запроса от frontend`а
>>>> после обработки предыдущего.
>>>>
>>>
>>> Как это выглядит с точки зрения фронтенда:
>>>
>>> сейчас как только получен запрос от клиента, посылается запрос на
>>> бэкенд
>>>
>>> если делать pipelining то фронтенд должен будет подождать еще один
>>> запрос (немного увелилчивая response time для первого), потом
>>> послать оба зпроса разом.
>>
>> Ничего подобного. Насколько я понимаю:
>> * pipelining только имеет смысл когда используется keep-alive.
>> * Без keep-alive: каждый запрос приходит в отдельном соединении
>> (параллельно).
>> * С keep-alive, без pipelining: новый запрос приходит только когда
>> предыдущий запрос вернулся (поочерёдно).
>> * С keep-alive, с pipelining: новый запрос может быть послан по
>> уже-существующему соединению. Побочный эффект: несколько запросов
>> можно послать в одном пакете - но не обязательно.
>>
>> Или может я что-то не так понял..?
>>
>>
>>
>>
>
>
More information about the nginx-ru
mailing list