масштабирование с использованием memcached для хранения сжатого файла - PullRequest
1 голос
/ 17 сентября 2009

У меня есть веб-сервис, который предоставляет исходный файл javascript для браузеров. Файл javascript компилируется php в режиме реального времени с некоторыми включениями файлов. Полученный файл меняется только несколько раз в день. Перед загрузкой в ​​браузер он загружается apache.

Я бы хотел использовать memcached для обслуживания его из памяти, чтобы избежать загрузки дисков и процессоров файлов и повторения gzip.

Мой вопрос: как я могу сжать и сохранить файл javascript в memcached и обслуживать его (из php)?

Мне кажется, что если файл не находится в хранилище, я должен получить файл с помощью include, извлечь выходной буфер, сжать его и сохранить в memcached. Я прав? Есть ли какие-нибудь заголовки, которые я должен добавить к выводу, или что-то еще, что я должен сделать, чтобы результат был совместим с файлом gzipped, который в настоящее время обслуживает мой apache?

Обновление: я не упомянул, что файл имеет несколько вариантов, управляемых параметром url, которые приводят к включению различных файлов def. Каждый из вариантов довольно статичен, как описано выше.

Ответы [ 2 ]

5 голосов
/ 18 сентября 2009

Лучше всего, если вы используете соответствующие инструменты для задач, для которых они были разработаны.

В вашем случае у вас есть медленно меняющийся файл, который будет обрабатываться статически. Под этим я подразумеваю, что он не зависит от запроса, но одинаков для каждого запроса в течение срока его действия.

Для этого используйте хороший кеширующий веб-сервер или установите балансировщик кэша / нагрузки перед вашими серверами. Подойдет Squid, Varnish или NginX. Фактически, любой из них может обслуживать статический файл так же быстро, как memcached. Просто убедитесь, что вы сами распаковали файл и подали его так.

memcached побеждает любой из них по скорости записи, а не по обслуживанию. так что это лучший ответ для контента, который изменяется с параметрами запроса, поэтому он должен генерироваться и истекать постоянно (и перекрываться).

Поскольку вы будете архивировать и записывать файл только несколько раз, время архивирования и записи не имеет значения. После этого многие уровни кеша обеспечат вам наилучшую производительность.

Также обратите внимание, что поскольку mencached не является веб-сервером, его кеш не настолько «близок» к клиенту, как надлежащий веб-кеш, сводя на нет любое гипотетическое преимущество в производительности чтения

3 голосов
/ 18 сентября 2009

Возможно, правильным решением является использование собственного встроенного кэширования Apache на самих ваших веб-серверах.

В конце концов, это не так, как есть много различных вариантов, или что оно часто меняется. Не было бы (я думаю) большого успеха, если бы каждый сервер в вашей ферме время от времени генерировал свою собственную копию.

Кэширование Apache учитывает заголовок «Expires» и т. Д. В выводе, поэтому достаточно просто включить его для этих URI и вывести соответствующие заголовки.

«Преимущество» memcached заключается в том, что ваши memcached серверы образуют пул, который выглядит как один кеш и может использоваться всеми вашими веб-узлами; это не очень важно, если у вас есть только очень небольшое количество предметов (в этом случае кажется, что у вас есть один или только несколько).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...