Gena Makhomed Wrote:
-------------------------------------------------------
> Каким образом скорость соединения с клиентом
> влияет на время *блокировки* воркера nginx ?
>
> nginx работает с сетью в неблокирующем режиме.
Да, вы правы, медленный клиент не блокирует воркер, но компрессия ответа в Nginx, практически не влияет на скорость его работы, проверил в ab, разница на уровне погрешности.
> > 2. Да, в php-fpm обычно параллельно работают много воркеров, но эти
> воркеры
> > держат коннекты к MySQL, Redis и другим ресурсам, по этому
> освободить воркер
> > РНР, означает освободить коннекты, к которым может выстроится
> очередь других
> > РНР воркеров.
>
> Тогда уже придется делать больше воркеров nginx, чтобы они могли
> часть своего времени потратить на компрессию ответов от бекенда.
>
> > Скорость компрессии ответа в РНР будет медленней, потому что РНР
> должен
> > получить весь буфер вывода сжать его, очистить весь буфер и записать
> в него
> > сжатые данные, из-за этого в РНР это работает медленней, плюс
> небольшой
> > оверхед на вызове функций врапера zlib.
>
> А в nginx компрессия gzip разве работает каким-то другим способом?
>
> В ответе будет заголовок Transfer-Encoding: chunked
>
> и не будет заголовка Content-Length: - потому что в момент начала
> отправки сжатого ответа его полный размер неизвествен воркеру nginx.
Одно из немногих преимуществ компрессии на бекенде, это возможность отдать правильный Content-Length, для нас это довольно важно чтобы мобил клиенты могли правильно показывать прогресс бар загрузки, но думаю модуль кеширования Nginx, может самостоятельно вычислить размер тела ответа и сохранить в кеше правильный Content-Length.