
У меня есть практически статичный сайт, работающий на Ruby on Rails, который использует кэш обратного прокси-сервера Varnish для экономии обращений к бэкэнду Rails.
Проблема в том, что пользователь может войти на сайт, и когда он это делает, мы используем ESI (edge side includes), чтобы показать пользователю определенные части страницы.
Использование ESI означает, что нам придется отключить сжатие Gzip на бэкэнде Rails (используя Nginx+passenger), иначе Varnish не сможет проанализировать данные, возвращаемые бэкэндом, чтобы запустить обработку ESI.
Мой вопрос: перевешивают ли преимущества использования кэша обратного прокси преимущества сжатия всего вашего контента? Или мне следует попытаться полностью избавиться от ESI и получить лучшее из обоих миров?
решение1
Вы можете получить лучшее из обоих миров, если организуете все следующим образом:
Пользователь -> nginx -> Varnish -> Rails
Включите сжатие gzip от nginx до пользователя. Это самый медленный сегмент, а также самый затратный. Я предполагаю, что ваши экземпляры nginx, Varnish и Rails локальны друг для друга. Вашей локальной пропускной способности должно быть более чем достаточно. Кроме того, не имеет особого смысла использовать gzip только для распаковки и сборки ESI.
решение2
Если пропускная способность не является проблемой, а время загрузки приемлемо без gzip, вам определенно следует оставить gzip отключенным.
Сжатие gzip занимает много ресурсов процессора. Так что, если вас больше волнует процессор, чем пропускная способность, если сайт загружается достаточно быстро, и если ESI вам очень помогает, то определенно система кэширования обратного прокси-сервера имеет больше преимуществ, чем сжатие http-ответов gzip.
В других ситуациях, когда пропускная способность имеет решающее значение, gzip может оказаться важнее, но, похоже, в данном случае это не так.
Наконец, gzip-сжатие может быть выполнено некоторыми обратными прокси-серверами. Это отличная возможность, поскольку обратные прокси-серверы обычно не используют много ресурсов ЦП (если они находятся на отдельном сервере). Это экономит бэкенду много циклов ЦП, а также экономит пропускную способность, но на данный момент, и если я правильно помню, Varnish не поддерживает gzip-сжатие.