Varnish: кэширование в облаках

Владимир | | Hosting.

varnish cloudcontrol

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

Об одной из таких особенностей речь и пойдёт в этой статье. Надеюсь, кому-нибудь эта информация поможет при переезде 😉

Небольшое вступление

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

К первой группе относятся сервисы вроде AWS (Amazon Web Services). Особенностью тут является то, что вы арендуете сервера, которые будете сами настраивать. Т.е. вам нужно будет, как минимум, установить и настроить веб сервер. При этом можно использовать готовые и настроенные базу данных (Amazon RDS), балансировщик (Elastic Load Balancing), CDN (CloudFront) и другие сервисы. За счёт этого общее количество работ по созданию инфраструктуры уменьшается.

Ко второй группе отнесём сервисы, которые предоставляют полностью настроенную и готовую к работе платформу. Вы только выкладываете приложение. Сюда относятся CloudControl, PhpFog, Heroku и т.п. Кстати, все перечисленные выше используют сервисы AWS.

Я хочу остановиться именно на второй группе сервисов, т.к. как показывает практика, некоторые особенности их работы желательно очень хорошо понимать 🙂

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

Естественно, могут возникнуть самые разные проблемы, связанные с настройками apache, php и работой в облаке, но эти моменты можно выяснить до переезда. Довольно подробная информация есть в документации сервисов.

Гораздо интереснее ситуация с начислением оплаты

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

Дело вот в чём. Большинство сервисов используют архитектуру, показанную на рисунке.

varnish apache cloudcontrol

Запрос посетителя сначала обрабатывается Varnish'ом (это обратный HTTP прокси). Если он не находит ответ в своём кэше, то запрос передается дальше Apache'у, который вызывает PHP и формирует ответ.

Фокус в том, что запросы, на которые ответил Varnish, не тарифицируются вообще. Кроме того, Varnish обеспечивает минимально возможное время ответа. Но для его использования нужно выполнить ряд требований.

1) Для страниц, которые можно кэшировать нужно сформировать заголовок Cache-Control. Например, так:

header('Cache-Control: public, max-age=10000');

Varnish не будет угадывать, можно ли кэшировать страницу или нет. Ему нужно однозначно разрешить это сделать и указать время хранения кэша.

2) Cookies. Если вы стартуете сессию для каждого посетителя, то Varnish предполагает, что вы это делаете для того, чтобы каким-то образом персонифицировать контент и кэшировать его не будет. Хотя есть исключения из этого правила. Обычно cookies, имена которых начинаются с двух символов подчеркивания, игнорируются. Такие cookies часто используют сервисы вроде Google Analytics. Вообще Varnish позволяет гибко настраивать правила обработки cookies, но доступа к его конфигу у вас не будет, поэтому этот момент лучше продумать заранее.

3) Статические файлы (css, js, картинки) желательно перенести на CDN. Они, конечно, тоже будут кэшироваться, но размер кэша не бесконечный, а отдавать их через apache на облачном хостинге получается дорого.

Примечание. Подробнее о принципах работы Varnish'а можно почитать в официальной документации.

Общие впечатления от работы с CloudControl

В целом сервис мне понравился. Напоминает shared хостинг, только другого уровня 🙂
Стоимость, конечно, выше чем у обычного хостинга, но тут нужно учитывать стоимость администрирования, ведь, по сути, они предоставляют в аренду платформу, а не только «железо».
С другой стороны, если настройка сервера для вас не проблема, то особенного выигрыша в переезде на облако не будет. Рассчитывать на 100% отказоустойчивость облаков тоже не стоит. Проблем, скорее всего, будет меньше, чем на обычном хостинге, но они тоже случаются.

В любом случае, выбор за вами 😉 Успехов!

P.S. Если есть вопросы или хотите поделиться собственным опытом, оставляйте комментарии, я с удовольствием отвечу!

Интересно почитать:

Разработка программного обеспечения

  • C shared хостингом сравнивать некорректно, так как Варнишь не просто проксирует, но и выбирает прокси которые ближе к пользователю. За счёт этого максимально сокращается время ответа. Так что он фактически является и CDN.
    p.s. Я могу путать, так как знаком с этим облаком лишь теоретически, со слов друга активно использующего его на практике.

    • Я сравнивал с shared хостингом только в том смысле, что нет доступа к конфигу apache и php (так же как и varnish'а). По остальным параметрам (возможность выдерживать нагрузки, управление ресурсами и т.п.) cloud конечно нельзя сравнивать с shared хостингом.