gzip_to_cache

Валентин Бартенев vbart at nginx.com
Tue Feb 17 23:18:25 UTC 2015


On Tuesday 17 February 2015 18:00:49 S.A.N wrote:
> Валентин Бартенев Wrote:
> -------------------------------------------------------
> > nginx - это такой веб-сервер, с помощью которого можно измерить 
> > производительность ab, но не наоборот.
> 
> :)
> Вот по этому, компрессию лучше производить в Nginx, в кеше сохранять сжатый
> ответ.
> 

Как было уже правильно замечено, компрессию все же лучше производить:

 1. Как можно раньше, чтобы сократить издержки на передачу ответа в nginx;

 2. Там, где размер ответа заранее известен, а это чаще всего бэкенд;

 3. Вне рабочих процессов nginx, поскольку занимаясь сжатием, последний
    не может в этот момент заниматься своей основной задачей, а именно
    обрабатывать события на соединениях.

Конечно, у задачи сжатия перед кэшированиям тоже есть свои юзкейсы, но
её реализация не так проста, как может показаться.  Скорее всего для этого 
придется переписать весь механизм кэширования или добавлять еще один,
другого уровня.

Кэш в nginx работает на уровне между сокетом и протокольным upstream-модулем.
И в кэш сохраняется сырой ответ от бэкенда, до какой либо обработки, т.е.
если это, например, FastCGI, то в кэше будут лежать соответствующие фреймы
(или records, как они называются в спецификации), которые нельзя так просто 
сжать целиком, а затем отдать клиенту.  Если это http, то там могут лежать 
чанки, которые, опять же, нельзя просто взять и сжать.

Все это большая работа, требующая значительное количество человеко-часов.

--
Валентин Бартенев


Подробная информация о списке рассылки nginx-ru