Представьте себе, что вы только что опубликовали сообщение в своем блоге, твиттнули об этом и наблюдаете, как некоторые популярные пользователи Twitter делают ретвитты. И сотни людей начинают посещать ваш блог.
Ваше волнение от такого большого количества посетителей постепенно сменяется отчаянием, так как все большее количество пользователей сообщает о проблемах в работе веб-сайта. Отображается ошибка соединения с базой данных.
Или, предположим, вы упорно трудились, чтобы привлечь интерес к вашему стартапу. Однажды, совершенно неожиданно, какая-то знаменитость пишет в Twitter о том, как сильно она любит ваш продукт. Поклонники этой знаменитости сразу же начинают переходить по ссылке. Многие из них подумали, что домен не отвечает, или когда они пытаются зарегистрироваться на пробную версию продукта, выдается сообщение о превышении лимита времени на загрузку страницы. Несмотря на все ваши извинения в Twitter, многие посетители уже не будут проявлять такого интереса к вашему блогу или продукту. Таким образом, вы потеряете большую часть потока посетителей, вызванного первоначальным твиттом.
Подобные сценарии являются довольно распространенными. В своей практике я неоднократно замечал, что если контент становится популярным в социальных сетях, то увеличивается и доля мобильных устройств, через которые обеспечивается доступ к этому контенту. Это объясняется прежде всего тем, что многие люди для доступа к Twitter и другим социальным сетям используют мобильные устройства, а не приложения персональных компьютеров. Многие из этих мобильных пользователей получают доступ к Интернету с помощью медленного подключения к Wi-Fi сети в многолюдном общественном месте. Поэтому единственным выходом из такой ситуации будет увеличение скорости загрузки вашего веб-сайта, что обеспечит пользователям комфортные условия работы.
В этой статье я познакомлю вас с ускорителем веб-приложений под названием Varnish. Это бесплатный и довольно простой продукт, который позволяет сохранить работоспособность веб-сайта при одновременном переходе на него большого количества людей.
Основные преимущества.
Для большинства веб-сайтов, даже тех, чье содержимое ежедневно обновляется, характерен переход большого количества посетителей к одному и тому же контенту. Изображения, CSS и JavaScript, которые не очень часто обновляются — они также как и контент сохраняются в базе данных при помощи блог-платформы или системы управления контентом (CMS) — сохраняют неизменным механизм обслуживания пользователей.
Посетители, переходящие в блог из Twitter, скорее всего будут видеть контент по-разному. Это касается не только изображений, JavaScript и CSS, но и материалов, созданных с помощью PHP и запросов к базе данных, прежде чем они будут представлены в качестве страницы в браузере пользователя. Каждый запрос для публикации в блоге обращается не только к веб-серверу, который обслуживает файл (например, Apache), но и к PHP скриптам, подключенным к базе данных и которые управляют таблицами базы данных.
Количество допустимых подключений к базе данных и число Apache процессов, которые могут одновременно работать, всегда ограничено. Чем больше будет количество посетителей, тем меньше памяти будет доступно и тем медленнее будет выполнятся каждый запрос. В конечном счете, перед пользователями начнут появляться ошибки подключения к базе данных или возникнет ощущение, что веб-сайт завис и страницы не загружаются. Причина такого поведения в том, что сервер пытается удовлетворить все запросы.
Именно в подобных ситуациях на помощь приходит HTTP кэш, например, такой как Varnish. Как уже было отмечено ранее, большое количество одновременно направленных запросов из браузеров пользователей перегружают веб-сервер. Таким образом, целесообразно было бы направить запросы сначала в кэш. Если запрашиваемая страница уже находится в кэше, то она подается непосредственно из памяти, минуя при этом Apache или базы данных. Если страница ещё кэширована, то осуществляется традиционная передача запроса на Apache, после чего Apache создает и обслуживает страницу, которая затем будет храниться в кэше. В дальнейшем, при появлении соответствующего запроса, данная страница будет вызываться из кэша.
Процесс обслуживания страницы из памяти происходит намного быстрее чем обслуживание из диска с помощью Apache. Кроме того, вызов страницы никогда не должен быть связан с PHP или базой данных. Следование этому принципу позволит избежать необходимости обработки трафика, которая требует подключения к базе данных или других действий. Например, давайте вернемся к нашему второму сценарию со стартапом, который прорекламировала знаменитость. Большинство людей, которые перешли по ссылке, просмотрят только несколько страниц веб-сайта. И эти страницы могут быть в кэше и могут обслуживаться из памяти. Те немногие пользователи, которые решили выполнить подписку обнаружат, что регистрационная форма достаточно быстро и хорошо работает. Это объясняется тем, что серверный код и соединение с базой данных не перегружено людьми, которые переходят из Twitter.
Как же все это работает?
Представленная ниже диаграмма показывает, как может быть обслужено сообщение в блоге, когда все запросы идут на веб-сервер Apache. В этом примере показано пять браузеров, которые запрашивают одну и ту же страницу, с использованием PHP и MySQL.
Каждый HTTP запрос обслуживается Apache — изображения, CSS, JavaScript и HTML файлы. Если файл — это PHP, то он анализируется PHP. Если контент требуется вызвать из базы данных, то производится соединение с базой данных, посылаются SQL запросы, а страница прежде чем будет представлена в браузере через Apache, компонуется из возвращенных данных.
Если поместить Varnish перед Apache, то диаграмма уже будет выглядеть следующим образом:
Если страница и запрошенные активы уже находятся в кэше, то Varnish обслуживает их из памяти — Apache, PHP и MySQL никогда не будет задействованы. Если браузер запрашивает еще не кэшированный контент, то Varnish передает запрос в Apache, чтобы он мог выполнять алгоритм действий, подробно описанный выше. Ключевым моментом является то, что Apache должен сделать эту работу только один раз. Результат сохраняется в памяти, и когда будет сделан второй запрос на этот контент всю работу уже будет выполнять Varnish.
Данный инструмент имеет и другие преимущества. В Varnish терминологии, при настройке Apache в качестве веб-сервера, вы настраиваете “бэк-енд”. Varnish позволяет настроить несколько бэк-ендов. Таким образом, вы можете запустить два веб-сервера — например, с помощью Apache для PHP-страниц во время обслуживания статических ресурсов (например, CSS-файлов) из Nginx. Вы можете выполнить соответствующую настройку в Varnish, который перенаправит запрос на нужный сервер. В этом уроке мы рассмотрим самый простой случай использования.
С чего лучше всего начать?
Varnish достаточно легко установить и настроить. Вам понадобится корневой или sudo
(системное администрирование) доступ к серверу для выполнения требуемой вам установки. Таким образом, ваш сайт должен быть размещен на виртуальном частном сервере (VPS) или тому подобное. На сегодняшний день получить место на VPS сервере можно за достаточно небольшие деньги. Varnish — это одна из главных причин выбрать VPS, а не общий хостинг.
В некоторых CMS размещены плагины, которые работают с Varnish или которые позволяют интегрировать его в панель управления — обычно для того, чтобы упростить работу с кэшем. Вы можете добавить Varnish в любую CMS систему или на любой статический веб-сайт, без особой интегра …
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров