hostprofi.ru
Подобрать хостинг
Термин·буква V

Varnish

краткое определение

Varnish Cache — HTTP-ускоритель (reverse proxy cache) с открытым исходным кодом, кэширующий ответы веб-сервера в оперативной памяти и отдающий их повторным запросам в десятки раз быстрее без обращения к бэкенду.

Varnish Cache — специализированный HTTP reverse proxy, разработанный исключительно для кэширования веб-трафика. В отличие от Nginx или Apache, Varnish не умеет обслуживать статику напрямую с диска или терминировать SSL — он делает одно и делает это быстро: хранит HTTP-ответы в памяти и отдаёт их при повторных идентичных запросах, не обращаясь к бэкенду. Один сервер Varnish способен обрабатывать от 100 000 до 1 000 000 запросов в секунду.

Как работает Varnish

Запрос от клиента попадает на Varnish. Если ответ есть в кэше (cache hit) — Varnish отвечает немедленно из памяти, типичное время ответа составляет 0.1–1 мс против 50–300 мс при обращении к PHP-бэкенду. Если кэша нет (cache miss) — Varnish запрашивает бэкенд (Apache, Nginx, WordPress), сохраняет ответ и отдаёт клиенту.

Поведение Varnish определяет VCL (Varnish Configuration Language) — собственный DSL-язык, компилируемый в C-код. В VCL описываются правила: какие URL кэшировать, на сколько времени (TTL), какие заголовки передавать бэкенду, как инвалидировать кэш через PURGE-запросы. Это даёт гибкость, недоступную статическим конфигурациям.

Для кэширования фрагментов страниц Varnish поддерживает ESI (Edge Side Includes) — директивы в HTML, указывающие, какой блок загрузить из кэша, а какой — с бэкенда. Так новостная лента кэшируется с TTL 60 секунд, а блок личного кабинета всегда берётся из бэкенда.

История

Varnish создал норвежский разработчик Пол-Хеннинг Камп (Poul-Henning Kamp) по заказу норвежской газеты Verdens Gang в 2005–2006 годах — сайт газеты не справлялся с нагрузкой на Squid. Первый публичный релиз Varnish 1.0 вышел в 2006 году. В 2008 году появился VCL и поддержка grace mode (отдача устаревшего кэша при недоступности бэкенда). Varnish 4.0 (2014) принёс переработанную архитектуру потоков и поддержку PURGE. Varnish 6.0 (2018) ввёл HTTP/2 и Varnish Enterprise ответвился как коммерческий продукт с модулями VMOD для динамического кэширования.

Ключевые режимы кэширования

  • TTL (Time To Live) — время жизни объекта в кэше, задаётся через заголовок Cache-Control: max-age=N или в VCL.
  • Grace mode — Varnish отдаёт устаревший кэш (stale), пока обновляет его в фоне, предотвращая thundering herd при массовых запросах.
  • Saint mode — при недоступности бэкенда Varnish временно исключает его из пула и использует другой бэкенд.
  • Purge — принудительная инвалидация конкретного URL через HTTP PURGE-запрос; часто используется CMS при публикации нового материала.

Varnish в контексте хостинга

Varnish ставится перед веб-сервером и снижает нагрузку на базу данных и PHP-интерпретатор. Для WordPress Varnish работает в связке с плагинами типа Varnish HTTP Purge, которые отправляют PURGE при сохранении поста. Для интернет-магазинов ESI позволяет кэшировать каталог целиком, не кэшируя корзину и блок авторизации. На VDS Varnish обычно слушает порт 80, а Nginx — порт 8080; SSL терминирует Nginx или HAProxy на порту 443 перед Varnish.

Hit rate (доля запросов, обслуженных из кэша) — ключевая метрика. Целевое значение для новостных сайтов — 85–95%, для интернет-магазинов — 60–80%. Мониторинг осуществляется командой varnishstat, которая показывает hit/miss/pass в реальном времени.

Varnish vs Nginx proxy_cache

Nginx тоже умеет кэшировать через директиву proxy_cache, но хранит кэш на диске, а не в RAM — это медленнее на 3–10x для горячих данных. Varnish хранит весь кэш в оперативной памяти (configurable до нескольких гигабайт), поэтому при одинаковом hit rate выдаёт меньшую задержку. Для высоконагруженных новостных порталов и e-commerce Varnish предпочтительнее; для небольших проектов Nginx proxy_cache проще в конфигурации.

Другие термины