[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Расжать сжатое с помощью Nginx
Arh
Некоторые тут мерились письками что у них высоконагруженные проекты laugh.gif

Можно ли на стороне Nginx (может lua умеет? или сам Redis) расжимать сжатые данные, которые лежат в Redis?

Решал ли кто такую задачу?

Если представить ситуацию:
Два сервера.
Один это связка Nginx+Redis.
Второй это какой то бэкэнд, который сэтит в redis все свои страницы. Страниц получается много.
Есть клиенты, которые поддерживают сжатие, можно хранить сжатые данные и их же выплёвывать клиенту.
Но так же есть небольшая часть клиентов не поддерживающих сжатие. Из за таких приходиться хранить ещё и несжатые дубли, которые весят примерно в 4 раза больше. То есть вместо одного сжатого мегабайта, получается 5 мегабайт из сжатых и не сжатых данных. В 5 раз больше Карл!

Натыкался на gunzip.
Цитата
Модуль ngx_http_gunzip_module — это фильтр, распаковывающий ответы с “Content-Encoding: gzip” для тех клиентов, которые не поддерживают метод сжатия “gzip”. Модуль будет полезен, когда данные желательно хранить сжатыми для экономии места и сокращения затрат на ввод-вывод.


Честно сказать ещё не тестил. Если получится, расскажу как всегда, но может есть решение без боли и слёз?




_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
В общем можно разжимать с помощью lua.

Что то типа такой логики.
content = redis:get(uri); -- Сжатые данные из редиса

-- Если клиент не поддерживает сжатие, нужно распаковать ответ
if (ngx.var.HTTP_ACCEPT_ENCODING == nil or string.match(ngx.var.HTTP_ACCEPT_ENCODING, 'gzip')) then
local zlib = require 'zlib';
content = zlib.inflate()(content); -- Распаковка
end;

-- Вывод
ngx.say(content);


Для этого нужна библиотека zlib и модуль lua-zlib.


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.