wizard varnish что это
Полировщик для веб-сайта. Знакомимся с кеширующим прокси Varnish
Содержание статьи
Немного о проекте
Varnish представляет собой кеширующий «обратный» (reverse) прокси‑сервер и акселератор HTTP. Принцип его работы в общем стандартен для такого класса программ. Он получает запрос, обрабатывает его и сразу выдает ответ, если он присутствует в кеше; если нет, то обращается к веб‑серверу за результатом. Ответ помещается в кеш. Varnish написан с нуля для норвежской газеты Verdens Gang. Версия 1.0 появилась в 2006 году, в 2014-м представлен релиз 4.0. Основной код доступен под BSD-подобной лицензии, но есть и коммерческие модули.
Проект сразу привлек себе внимание весьма громкими заявлениями автора, одного из разработчиков FreeBSD Пола‑Хеннинга Кампа (Poul-Henning Kamp) о том, что все (с намеком на Squid) сделано неправильно. И действительно, Varnish выделяет современный дизайн, эффективно использующий возможности современных многопроцессорных систем (Sqiud научился работать с SMP чуть позже с версии 3.2). Многопоточность реализована с помощью стандартных потоков POSIX, их количество регулируется. Это одна из причин, почему Varnish не очень хорошо работает в Windows. Каждый запрос обрабатывается в отдельном потоке. Причем с версии 4.0 за получение запроса от пользователя и передачу запроса серверу отвечают разные потоки, что еще более повысило производительность. Varnish поддерживает технологию ESI (Edge Side Includes), позволяющую разбивать веб‑страницу на части и запрашивать их отдельно. Кеш может хранить любую информацию. В итоге Varnish отлично подходит для кеширования динамического контента.
Для хранения данных (кеша, журналов операций) используется виртуальная память. Управлением того, что выгружается на диск, занимается ОС. Здесь авторы Varnish справедливо считают, что разработчики ОС свое дело знают, а дублирование только ухудшает производительность.
В отличие от Squid, который изначально больше ориентировался на кеширование клиентских запросов, Varnish был разработан и оптимизирован именно в качестве ускорителя HTTP и ничего другого больше не умеет. Мы не найдем здесь поддержку остальных протоколов (FTP, SMTP и прочие), не увидим возможности прямого прокси — кеширования веб‑страниц для экономии внешнего трафика (Varnish «привязывается» к бэкендам). Естественно, отличаются и возможности по конфигурированию.
Язык конфигурации Varnish Configuration Language (VCL) — динамический, скрипт сам по себе по сути является отдельным плагином. Код транслируется в С (можно сразу писать встраиваемый код на С), после чего инструкции компилируются в библиотеку и подгружаются в память. Можно вносить изменения в конфигурацию на лету. Инструкции в VCL позволяют кешировать только определенные запросы, снижая нагрузку при генерации динамических объектов, блокировать доступ к определенным каталогам и скриптам, подменять заголовки и многое другое. Есть и механизм проверки работоспособности бэкендов (замер времени ответа, счетчик неудачных проверок и так далее), возможность перезаписи и перенаправления (rewrite) запросов. Вообще, такой подход позволяет производить с HTTP-трафиком практически любые манипуляции, которые можно ограничить только собственным воображением. Поддерживается балансировка нагрузки (round robin, random и DNS, Client IP). Возможности расширяются при помощи модулей, называемых VMOD (Varnish MODules). Проект предоставляет необходимую документацию, позволяющую написать такой модуль самостоятельно. Часть модулей уже включены в стандартную поставку, некоторые доступны в виде концепта или находятся в разработке.
Проект уже предоставляет большое количество модулей
Сегодня Varnish используют такие веб‑сервисы, как Facebook, Twitter, Vimeo и Tumblr.
Установка и базовая настройка Varnish
Официально рекомендуется установка Varnish на современных версиях x64-битных Linux, FreeBSD или Solaris. Пакеты можно найти в дополнительных репозиториях (вроде EPEL или Ubuntu Universe) большинства дистрибутивов Linux и портах *BSD-систем. Сам проект предоставляет репозитории и подробные инструкции для Red Hat, Debian, Ubuntu и FreeBSD. В большинстве случаев следует использовать именно репозиторий разработчика, так как в нем находится более свежая версия продукта. Возможна работа и в Windows (через Cygwin), но оптимизация под *nix-системы не гарантирует максимальной производительности результата. На сайте доступны две версии Varnish — 3.x и 4.x, обе являются стабильными, но поддержка линейки 3.x будет прекращена в первой половине 2015 года. Кстати, код достаточно хорошо написан, поэтому исправлений вносится мало (например, 3-я ветка, появившаяся в июне 2011-го, содержала всего шесть версий), можно не бояться использовать свежие релизы. Стандартно Varnish ставится перед веб‑сервером и кеширует запросы. В нагруженных системах иногда используют более сложный вариант, когда вначале запрос принимает легкий веб‑сервер (nginx, lighttpd), который умеет быстро отдавать определенные страницы. При необходимости этот сервер через Varnish обращается к основному HTTP-серверу, генерирующему контент. Varnish при наличии информации в кеше отдает ее оттуда.
Для примера установим Varnish в Ubuntu 14.04 LTS в качестве фронтенда Apache. В других дистрибутивах отличия только в расположении конфигурационных файлов и особенностях пакетных систем.
Вот, собственно, и все. После установки Varnish стартует и что‑то там кеширует. Займемся конфигурированием. Установки параметров запуска демона производятся в файле /etc/default/varnish. Первоначально он сконфигурирован с некоторыми параметрами. Если открыть файл, то увидим внутри три готовые настройки: minimal, c VCL и advanced.
Файл /etc/default/varnish
По умолчанию активирован второй режим. При этом сервер принимает подключения на порт 6081, для администрирования используется localhost:6082, а бэкенд определяется в VCL. Для кеширования выделяется 256 Мб памяти. Настроим так, чтобы Varnish слушал 80-й порт, кешируя запросы HTTP-сервера, расположенного на этой же машине. Комментируем настройки второго варианта и в качестве шаблона будем использовать advanced, как более наглядный.
Linuxoid
OpenSource forever
Знакомимся с кэширующим прокси Varnish
Обработка большого числа запросов может быть весьма тяжелой задачей забирающей ресурсы веб-сервера. Чтобы снять нагрузку используют фронтэнд в качестве которого может выступать легкие nginx/lighttpd или кэширующий прокси-сервер. Во втором качестве очень популярен Squid, он универсален, но не всегда оптимален. Но именно в этой задаче его более эффективно заменяет Varnish.
Немного о проекте
Varnish(varnish-cache.org) представляет собой кеширующий “обратный” (reverse) прокси-сервер и акселератор HTTP. Принцип его работы вообщем стандартен для такого класса программ. Он получает запрос, обрабатывает его и сразу выдает ответ если он присутствует в кэше, если нет то обращается к веб-серверу за результатом. Ответ помещается в кэш. Varnish написан с нуля для норвежской газеты Верден Gang. Версия 1.0 появилась в 2006 году, в 2014 представлен релиз 4.0. Основной код доступен под BSD-подобной лицензии, но есть и коммерческие модули.
Появившись проект сразу привлек себе внимание весьма громкими заявлениями своего автора и одного из разработчиков FreeBSD Пол-Хеннинга Кампа (Poul-Henning Kamp), о том что все, что есть (с намеком на Squid) сделано не правильно. И действительно Varnish выделяет современный дизайн эффективно использующий возможности современных многопроцессорных систем (Sqiud научился работать с SMP чуть позже с версии 3.2). Многопоточность реализована с помощью стандартных потоков POSIX, их количество регулируется. Это одна из причин почему Varnish не очень хорошо работает в Windows. Каждый запрос обрабатывается в отдельном потоке. Причем с версии 4.0 за получение запроса от пользователя и передача запроса серверу отвечают разные потоки, что еще более повысило производительность. Varnish поддерживает технологию ESI (Edge Side Includes) позволяющую разбивать веб-страницу на части и запрашивать их отдельно. Кэш может хранить любую информацию. В итоге Varnish отлично подходит для кэширования динмамического контента.
Для хранения данных (кэша, журналов операций) используется виртуальная память, управлением того что выгружается на диск занимается ОС. Здесь авторы Varnish справедливо считают, что разработчики ОС свое дело знают, а дублирование только ухудшает производительность.
В отличие от Squid который изначально больше ориентировался на кэширование клиентских запросов, Varnish был разработан и оптимизирован именно в качестве ускорителя HTTP и ничего другого больше не умеет. Мы не найдем здесь поддержку остальных протоколов (FTP, SMTP и прочие), не увидим возможности прямого прокси — кэширования веб-страниц для экономии внешнего трафика (Varnish «привязывается» к бэкэндам). Естественно отличается и возможности по конфигурированию.
Язык конфигурации Varnish Configuration Language (VCL) — динамический, скрипт сам по себе по сути является отдельным плагином. Код транслируется в С (можно сразу писать встраиваемый код на С), после чего инструкции компилируются в библиотеку и подгружаются в память. Можно вносить изменения в конфигурацию «на лету». Инструкции в VCL позволяют: кэшировать только определенные запросы, снижая нагрузку при генерации динамических объектов, блокировать доступ к определенным каталогам и скриптам, подменять заголовки и многое другое. Есть и механизм проверки работоспособности бэкендов (замер времени ответа, счетчик неудачных проверок и т.д.), возможность перезаписи и перенаправления (rewrite) запросов. Вообще такой подход позволяет производить с HTTP трафиком практически любые манипуляции, которые можно ограничить только собственным воображением. Поддерживается балансировка нагрузки несколько алгоритмов (round robin, random и DNS, Client IP). Возможности расширяются при помощи модулей, называемых VMOD (Varnish MODules). Проект предоставляет необходимую документацию позволяющих написать такой модуль самостоятельно. Часть модулей (varnish-cache.org/vmods) уже включены в стандартную поставку, некоторые доступны в виде концепта или находятся в разработке. Проект уже предоставляет большое количество модулей
Сегодня Varnish используют такие веб-сервисы как Facebook, Twitter, Vimeo и Tumblr.
Установка и базовая настройка Varnish
Официально рекомендуется установка Varnish на современных версиях x64 битных Linux, FreeBSD или Solaris. Пакеты можно найти в дополнительных репозитариях (вроде EPEL или Ubuntu Universe) большинства дистрибутивов Linux и портах *BSD систем. Сам проект предоставляет репозитарии и подробные инструкции для Red Hat, Debian, Ubuntu и FreeBSD. В большинстве случаев следует использовать именно репозитарий разработчика, так как в нем находится более свежая версия продукта. Возможна работа и в Windows (через Cygwin), но оптимизация под *nix системы не гарантируют максимальную производительность результата. На сайте доступны две версии Varnish 3.x и 4.x, обе являются стабильными, но поддержка линейки 3.x будет прекращена в первой половине 2015 года. Кстати код достаточно хорошо написан, поэтому исправлений вносится мало (например 3 ветка появившаяся в июне 2011 содержала всего 6 версий) можно не боятся использовать свежие релизы. Стандартно Varnish ставится перед веб-сервером кэшируя запросы. В нагруженных системах иногда используют более сложный вариант, когда вначале запрос принимает легкий веб-сервер (nginx, lighttpd), который умеет быстро отдавать определенные страницы. При необходимости этот сервер, через Varnish обращается к основному HTTP-серверу генерирующему контент. Varnish при наличии информации в кэше отдает ее оттуда.
Для примера установим Varnish в Ubuntu 14.04 LTS в качестве фронтэнда Apache. В других дистрибутивах отличия только в расположении конфигурационных файлов и особенностях пакетных систем.
Вот собственно и все. После установки Varnish стартует и что-то там кэширует. Займемся конфигурированием.
Установки параметров запуска демона производится в файле /etc/default/varnish. Первоначально он сконфигурирован с некоторыми параметрами. Если открыть файл, то увидим внутри три готовые настройки: minimal, c VCL и advanced. Файл /etc/default/varnish
По умолчанию активирован второй режим. При этом сервер принимает подключения на порт 6081, для администрирования используется localhost:6082, а бэкэнд определяются в VCL. Для кэширования выделяется 256 Мб памяти. Настроим так чтобы Varnish слушал 80 порт, кэшируя запросы HTTP сервера расположенного на этой же машине. Комментируем настройки 2 варианта и в качестве шаблона будем использовать Advanced, как более наглядный.
Это основные установки. С остальными можно познакомиться в файле или в документации проекта.
Перестраиваем Apache, чтобы он слушал 8080 порт. В зависимости от текущих установок это можно сделать в разных файлах, в общем идея выглядит так:
Минимальные установки готовы. Перезапускаем Varnish:
Проверяем при помощи netstat слушается ли порт и доступен ли веб-сервер.
Продвинутые настройки
Это самый простой пример и как видим заставить Varnish кэшировать запросы очень легко, но он пока не «разбирается» и не вмешивается в трафик. Познакомившись с VCL можно расширить базовые возможности. Параметров которые можно настроить очень много и чтобы их описать потребуется книга. VCL это язык программирования в котором найдем все что присуще — переменные, функции, комментарии и т.п. Вариантов использования много и сходу их освоить не получится. В качестве отправной точки можно рекомендовать документацию проекта, в частности Varnish Book(varnish-software.com/static/book). Также в Сети уже есть достаточно шаблонов(github.com/mattiasgeniar/varnish-3.0-configuration-templates) под разные ситуации подготовленных самими пользователями. Они являются хорошим подспорьем по изучению возможностей VCL.
Varnish способен работать с несколькими HTTP-серверами (бэкендами). Каждый определяется аналогично примеру выше:
После чего можно строить правила указывая сервера по имени.
Если бэкенды равнозначны и используются только для распределения нагрузки, то достаточно сообщить об этом Varnish с помощью директивы “director”:
Можно также использовать случайный выбор – для этого вместо “round-robin” необходимо прописываем “random”.
Возможна реализация и более сложных алгоритмов. Но для этого нужно познакомиться с возможностями VCL файлов.
В default.vcl мы увидим несколько именованных блоков (функций). По умолчанию параметры внутри отсутствуют, вот именно с их помощью и производится тонкая настройка кэширования. Кое-что можно установить не вникая в работу приложений на веб-сервере, в более сложных случаях потребуется глубокий анализ выдаваемых страниц (проект предоставляет некоторые утилиты о которых дальше).
Разберем некоторые из них. Порядок вызова функций наглядно показан в разделе [VCL Basics](varnish-software.com/static/book/VCL_Basics.html), некоторые вопросы конфигурирования есть в [документации](varnish-cache.org/docs).
Списки ACL позволяют упралявть доступом к определенным URL или вручную распределять или обрабатывать запросы некоторых клиентов. Создадим правило которое включает все локальные узлы.
Как видим разрешается инвертирование при помощи «!» т.е. 192.168.1.10 не попадает под правило. Теперь к этому списку можем обратиться при помощи конструкции (client.ip
local)
Функция vcl_recv вызывается при получении запроса и перед проверкой данных в кэше. Именно здесь можно модифицировать запрос, удалить Cookie, произвести нормализацию, выбрать бэкэнд в зависимости от запроса и т.д.
По умолчанию Varnish не кэширует запросы с установлены Cookie. Для статических страниц, лучше активировать такую возможность, для этого просто вырезаем Cookie. Также для примера запретим доступ к файлам cron.php и install.php для всех узлов кроме локальных и скажем Varnish, чтобы он перенаправлял все запросы к update.php сразу на бэкэнд.
Это конечно не все что можно сделать. Используя req.http.User-Agent можем распределять бэкенды в зависимости от браузера/устройства клиента. Подробнее (varnish-cache.org/docs/trunk/users-guide/devicedetection.html).
Функция return в случае с vcl_recv может принимать аргументы: lookup — указывает на необходимость поиска в кэше, pass — сразу отправляет запрос на бэкэнд. Последнее как видим позволяет избежать кэширования определенных типов файлов, например медиа или постоянно обновляющегося контента.
Некоторые функции вызывают пустыми, просто чтобы пропустить определенную проверку указав нужный код возрата. Кроме указанных выше возможны варианты — deliver, fetch, hash, pipe, error, restart, retry.
Функция vcl_hash позволяет определить уникальность запроса, который будет кэшироваться. По умолчанию хэш формируется на основании URL и IP/имени сервера. В большинстве случаев этого достаточно, но в некоторых ситуациях этого нехватает и возможно потребуется изменение правил. Например, для определения уникальности используют Сookie.
Функция vcl_error позволяет генерировать контент не обращаясь к веб-серверу, используется для выдачи сообщений об ошибках и редиректа.
Далее в зависимости от ситуации запрос обрабатывается vcl_fetch, vcl_pass и vcl_miss. В 4.0 они заменены более удобные функции vcl_backend_fetch и vcl_backend_response, которые вызываются перед передачей запроса серверу и после получения ответа, соотвественно.
В следующем примере мы убираем выставление cookie для файлов изображений, а также задаем время жизни кэшированного содержимого для этих файлов в 1 час.
И перед отправкой полученных от бэкэнда данных вызывается функция vcl_deliver. В простейшем случае она пустует, то есть ответ передается без изменений. Но здесь можно при желании модифицировать заголовки. Для примера просто удалим все упоминания о Varnish:
Это конечно далеко не все возможности, но нужно идти дальше.
Управление Varnish
Работой Varnish можно управлять и отслеживать результат. Для этого в поставке идет несколько утилит начинающихся с varnish*. Все они описаны в разделе «Appendix A: Varnish Programs» Varnish Book. Основной утилитой является varnishadm. Именно с ее помощью производится администрирование, просмотр статуса и ошибок, загрузка модулей «на лету». Принцип работы очень прост. Вызываем:
После чего появится приглашение Varnish CLI. Чтобы получить список команд следует ввести «help». Список команд varnishadm
Команд не много (23), значение большинства понятно из названия. Подробности по каждой можно получить введя «help команда«. Например, группа команд vcl.* позволяют просматривать и управлять загрузкой, выгрузкой модулей. Смотрим список модулей:
Команды param.show и param.set позволяют просматривать и изменять параметры сервиса, panic.show и panic.clear — отображать и очищать ошибки, ban и ban.list — указывать страницы не подлежащие кэшированию. И так далее.
Две команды varnishtop и varnishhist очень помогают при первоначальной настройки т.к. позволяют просмотреть список наиболее частно встречающихся параметров (URL, идентификаторы, статус и т.д.). Первая утилита выводит их в виде top, вторая как гиксограму. При запросе можно использовать регулярные выражения, поэтому потеряться в большом количестве страниц невозможно. Например, просмотрим список наиболее запрашиваемых URL и заголовки:
Еще три очень полезных утилиты позволяющие просмотреть статистику (varnishstat), и информацию в журналах (varnishlog и varnishncsa). Скрипт varnishtest дает возможность проверить работу кэша Varnish.
Для тех кто не хочет разбираться с командной строкой разработчик предлагают веб-интерфейс Varnish Administration Console (varnish-software.com/resources/vac-demo) — очень удобный инструмент предлагающий произвести все описанные операции и получать статистику в наглядном виде. Интерфейс Varnish Administration Console
Правда есть минус — доступен он только в коммерческой версии Varnish Plus.
Бесплатное ПО пока не богато вариантами. Плагины поддерживающие Varnish есть в системах мониторинга Collectd, Nagios, Cacti и других. Список известных проектов можно найти на сайте (varnish-cache.org/utilities).
!
Вывод
Varnish это очень гибкая программа позволяющая управлять кэшированием трафика с веб-ресурсов. Большие возможности подразумевают большое количество настроек. Поэтому некоторое время придется затратить на их изучение и подгонку под конкретные условия. Но результат того стоит.
Varnish Cache. Как это работает и как использовать его на вашем сайте WordPress
Главное меню » Блог-платформа wordpress » Varnish Cache. Как это работает и как использовать его на вашем сайте WordPress
На первый взгляд, кеширование может показаться очень сложной темой: мы не будем лгать, в большинстве случаев это так! Но хорошая новость в том, что мы здесь, чтобы помочь.
Все системы кеширования работают по одному принципу:
Кэширование – это процесс хранения данных во временном хранилище, которое называется кеш.
Все идет нормально. Сложность проявляется, когда мы пытаемся определить единицу хранения, над которой работает наш процесс кэширования. Кэширование может принимать различные формы и использовать различные аспекты нашего веб-сайта.
Вот краткий список различных типов кэширования, которые мы можем определить:
В этой статье мы сосредоточимся на последнем типе кэширования и, в частности, на одном из самых популярных обратных прокси-серверов HTTP: Varnish cache.
Понимание обратных прокси HTTP
Вообще говоря, «Прокси» – это сервер, размещенный между Интернетом и пользователем (или сетью пользователей, такой как ЛВС). Прокси-сервер предназначен для фильтрации запросов, отправленных пользователем на определенную веб-страницу, следуя определенному правилу.
Классическим примером прокси-сервера (также называемого прямым прокси-сервером ) является тот, который реализован несколькими компаниями, желающими заблокировать доступ сотрудников к некоторому контенту в Интернете (например, веб-сайты социальных сетей).
С другой стороны, обратный прокси-сервер – это сервер, размещенный между Интернетом и веб-сервером компании. Обратный прокси-сервер – это точка входа всех запросов, направленных на веб-сайт компании: его задача – отфильтровать эти запросы до того, как они достигнут сайта.
Наиболее используемые обратные прокси на рынке:
Некоторые из них, такие как Apache httpd, NGINX, Lighttpd и IIS, также являются веб-серверами, но могут выступать в качестве обратных прокси.
Почему вы должны использовать обратный прокси на вашем сайте?
Ответ прост: есть несколько преимуществ использования обратного прокси. Давайте посмотрим их кратко:
Мы собираемся развить этот последний пункт в следующей главе.
Что такое кеш Varnish?
Теперь, когда вы знаете, что такое обратный прокси-сервер, вы готовы погрузиться в магию Varnish Cache!
Varnish действует как обратный прокси-сервер HTTP-кеша, и иногда вы также можете видеть его как интерфейсный ускоритель. Это не автономное решение, потому что для него нужен выделенный веб-сервер, такой как NGINX или Apache.
Вы можете использовать Varnish для кеширования как динамического, так и статического контента: это эффективное решение для увеличения не только скорости вашего сайта, но и производительности вашего сервера. По словам его разработчиков :
«Это может ускорить доставку в 300–1000 раз, в зависимости от вашей архитектуры».
Каковы преимущества использования Varnish Cache?
Как уже упоминалось, первое преимущество Varnish – это повышение скорости действующего сайта и сервера.
Это происходит благодаря ряду факторов:
Как работает Varnish Cache?
Varnish обрабатывает все входящие запросы, прежде чем они попадут на серверную часть вашего веб-сервера: его кэш обслуживает весь веб-трафик и по умолчанию обновляется каждые две минуты (или другой срок службы, если вы решите).
Если запрос не кэшируется, Varnish перенаправляет запрос на серверную часть веб-сервера и кэширует результат, как мы уже видели в параграфе общего обратного прокси-сервера.
Кэшированные запросы затем сохраняются в памяти: с этого момента получение и доставка их клиентам будет намного быстрее.
Чтобы указать конфигурацию, политики кэширования и другие правила, Varnish использует язык VCL ( язык конфигурации Varnish ).
Благодаря этому языку и его изменениям вы можете обрабатывать каждый запрос по-разному. Например, вы можете перенаправить определенные запросы в конкретный бэкэнд или попросить Varnish действовать по-разному в зависимости от свойств входящего запроса или его вывода.
Еще одно интересное поведение Varnish заключается в том, что благодаря встроенному инструменту, называемому бэкэнд-опросом, кэшированное содержимое может продолжать обслуживаться, даже если веб-сервер недоступен.
Опрос бэкэнда опрашивает сервер с частотой, которую вы можете гибко настроить: если Varnish обнаружит время простоя, он продолжит обслуживать кэшированный контент в течение периода, называемого льготным временем (которое также можно настраивать).
Дополнительная информация о командах конфигурации доступна в документации Varnish.
Как использовать Varnish Cache на вашем сайте WordPress?
Миллионы сайтов WordPress используют Varnish Cache.
После того, как Varnish установлен и настроен на вашем веб-сервере, вы готовы дать указание WordPress взаимодействовать с ним и очищать Varnish Cache каждый раз, когда изменяется содержимое в кэше.
Для этого вы можете использовать плагин WordPress: одним из наиболее установленных (и лучше поддерживаемых) является Proxy Cache Purge.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.