У світі оптимізації веб-продуктивності швидкість має значення. Користувачі очікують, що веб-сайти завантажуватимуться миттєво, а пошукові системи віддають перевагу сайтам, що швидко завантажуються. Саме тут на допомогу приходить Varnish – потужний HTTP-прискорювач, розроблений для значного підвищення швидкості та масштабованості веб-сайтів. Але що таке Varnish і як він може допомогти покращити продуктивність HTTP?

Що таке Varnish?

Varnish (також відомий як Varnish Cache) – це високопродуктивний прискорювач веб-додатків, який часто називають сервером кешування зворотного проксі. Він знаходиться між вашими користувачами і веб-сервером, зберігаючи копії відповідей HTTP (наприклад, HTML-сторінок, зображень або скриптів), щоб повторні запити могли обслуговуватися набагато швидше.

На відміну від традиційних веб-серверів, таких як Apache або NGINX, Varnish спеціально розроблений для кешування та швидкої доставки контенту. Його зазвичай використовують веб-сайти з високим трафіком, медіа-компанії та платформи електронної комерції, які потребують блискавичної доставки контенту.

Як працює Varnish?

Varnish кешує HTTP-відповіді в пам’яті. Коли користувач запитує сторінку:

  1. Перший запит: Varnish перенаправляє запит на внутрішній сервер (наприклад, Apache або NGINX).

  2. Бекенд генерує відповідь і надсилає її до Varnish.

  3. Varnish зберігає (кешує) відповідь у пам’яті.

  4. Потім Varnish надає цю відповідь користувачеві.

  5. Наступні запити на той самий контент обслуговуються безпосередньо з кешу, повністю оминаючи бекенд.

Це зменшує навантаження на сервер і значно прискорює доставку контенту.

Основні переваги використання Varnish

  • Покращений час завантаження: Varnish обслуговує кешовані сторінки за мілісекунди, що значно підвищує швидкість завантаження сторінок.

  • Зменшення навантаження на бекенд: обробляючи велику частину трафіку з кешу, Varnish звільняє ваші веб-сервери для обробки більш складних, динамічних запитів.

  • Висока масштабованість: Varnish здатен обробляти тисячі запитів на секунду, що робить його ідеальним рішенням для веб-сайтів з високим трафіком.

  • Гнучка конфігурація: Використовуючи вбудовану мову конфігурації Varnish (VCL), ви можете точно налаштувати кешування, очищення та доставку контенту.

  • Покращений користувацький досвід: Швидше завантаження сторінок означає, що користувачі будуть щасливішими, а показник відмов знизиться.

Як використовувати Varnish для покращення продуктивності HTTP

Ось спрощений підхід до початку роботи з Varnish:

1. Встановлення Varnish

Varnish можна встановити на більшість дистрибутивів Linux за допомогою менеджера пакетів. Наприклад

sudo apt install varnish # Debian/Ubuntu
sudo yum install varnish # CentOS/RHEL

2. Налаштування Varnish

Вам потрібно вказати Varnish на ваш внутрішній сервер і визначити правила кешування у файлі VCL, зазвичай розташованому в /etc/varnish/default.vcl.

Приклад фрагмента:

backend default {
.host = "127.0.0.1";
.port = "8080";
}

Це вказує Varnish перенаправляти запити на ваш веб-сервер, що працює на порту 8080.

3. Оновлення конфігурації порту

За замовчуванням Varnish слухає порт 6081, який є нестандартним портом для HTTP-трафіку. У виробничих середовищах Varnish зазвичай налаштовують на прослуховування порту 80, який є стандартним HTTP-портом, і налаштовують веб-сервер (наприклад, Apache або Nginx) на використання іншого порту, як правило, 8080. Це дозволить Varnish обробляти вхідні HTTP-запити через порт 80, кешувати вміст і перенаправляти запити на веб-сервер через порт 8080.

Приклад:

  1. Зміна порту прослуховування Varnish
    Відкрийте конфігураційний файл Varnish, який зазвичай знаходиться в /etc/varnish/default.vcl, і встановіть порт прослуховування на 80:

    # /etc/varnish/default.vcl

    # Слухати на порту 80 (стандартний порт HTTP)
    backend default {
    .host = “127.0.0.1”;
    .port = “8080”; # Ваш веб-сервер буде слухати на порту 8080
    }

  2. Налаштування веб-сервера (Apache/Nginx) на порт 8080
    Якщо ви використовуєте Apache, ви можете змінити директиву Listen у файлі /etc/apache2/ports.conf, щоб він слухав порт 8080:

    Слухати 8080

    Для Nginx налаштуйте блок сервера на прослуховування порту 8080:

    server {
    слухати 8080;
    ім'я_сервера example.com;
    # Інші конфігурації
    }
  3. Перезапуск Varnish і веб-сервера
    Після внесення цих змін перезапустіть Varnish і веб-сервер, щоб застосувати нові конфігурації:

    sudo systemctl restart varnish
    sudo systemctl restart apache2 # Або nginx

Тепер Varnish оброблятиме вхідні запити через порт 80 і перенаправлятиме їх на ваш веб-сервер через порт 8080, де буде згенеровано і подано контент.

4. Налаштування поведінки кешування

Varnish дозволяє налаштовувати кешування вмісту за допомогою мови конфігурації Varnish (Varnish Configuration Language, VCL). VCL дозволяє тонко керувати поведінкою кешування, включаючи виключення певного вмісту з кешу, обробку файлів cookie та встановлення правил очищення.

Приклад 1: Виключення вмісту з кешу

Ви можете виключити певні сторінки або ресурси з кешу за допомогою умов у вашому VCL-файлі. Наприклад, ви можете не кешувати динамічні сторінки або конфіденційні дані користувачів, такі як кошики для покупок або профілі користувачів.

sub vcl_recv {
if (req.url ~ "^/cart" || req.url ~ "^/user-profile") {
return (pass); # Пропустити кешування для сторінок кошика або профілю
}
}

У цьому прикладі

  • Сторінки з URL-адресами, що містять /cart або /user-profile, не будуть кешуватися і передаватимуться безпосередньо на сервер бекенда для динамічної генерації.

Приклад 2: Кешування вмісту на основі певних файлів cookie

Ви можете кешувати вміст на основі певних файлів cookie, що корисно для персоналізації контенту. Наприклад, якщо ви хочете кешувати вміст тільки для зареєстрованих користувачів з певним файлом cookie, ви можете змінити логіку кешування наступним чином:

sub vcl_recv {
if (req.http.Cookie ~ "session_id") {
return (hash); # Кеш тільки для зареєстрованих користувачів
}
}

Цей приклад:

  • Перевіряє, чи містить запит cookie session_id. Якщо він присутній, Varnish буде кешувати вміст для зареєстрованих користувачів і ігнорувати кеш для тих, хто не має cookie.

Приклад 3: Встановлення правил очищення

Ви можете захотіти очистити певний кешований вміст після того, як він стане застарілим (наприклад, після оновлення статті). Це можна зробити за допомогою команди purge.

sub vcl_hit {
if (obj.status == 200 && req.url ~ "/news/") {
# Очищаємо кешовану новину після її оновлення
return (purge);
}
}

Цей приклад:

  • Очищає кешований вміст будь-якої новини при її оновленні, гарантуючи, що користувачі завжди бачитимуть останню версію.

5. Моніторинг та оптимізація

Щоб переконатися, що Varnish працює оптимально, важливо регулярно відстежувати його продуктивність і аналізувати частоту звернень до кешу. Varnish надає різні інструменти, такі як varnishstat, varnishlog та Varnish Administration Console (VAC ) для моніторингу продуктивності.

Приклад 1: Використання varnishstat для метрик

varnishlog надає ключові метрики для аналізу продуктивності Varnish, такі як частота звернень до кешу, використання пам’яті та час відгуку бекенда. Ви можете використовувати його, щоб відстежувати, наскільки добре працює ваша конфігурація кешування.

varnishstat

Ця команда покаже вам різноманітну статистику, зокрема

  • cache_hit: Кількість звернень до кешу (запитів, що обслуговуються з кешу).

  • cache_miss: Кількість пропусків кешу (запитів, перенаправлених на бекенд).

  • backend_conn: Кількість з’єднань з бекенд-сервером.

Ви можете використовувати ці метрики, щоб оцінити, наскільки ефективною є ваша стратегія кешування, і скоригувати її за необхідності для підвищення продуктивності.

Приклад 2: Використання varnishlog для детального логування

varnishlog надає докладні логи кожного запиту і його взаємодії з Varnish. Це корисно для усунення несправностей і розуміння того, чому певні запити обслуговуються з кешу або перенаправляються на бекенд.

varnishlog

Ця команда надасть вам детальний лог, що показує:

  • Чи були запити обслужені з кешу або передані до бекенду.

  • Потрапляння в кеш або пропуски для певних ресурсів.

  • Події очищення та інші взаємодії з кешем.

Приклад 3: Використання Varnish Administration Console (VAC)

Консоль адміністрування Varnish (VAC) – це веб-інтерфейс, який допомагає вам керувати і контролювати ваш екземпляр Varnish. VAC надає статистику в реальному часі, дані журналів та інформацію про кеш у зручному графічному інтерфейсі.

  • Ви можете отримати доступ до VAC, перейшовши за адресою http://your_server_ip:6082 (порт за замовчуванням для VAC).

  • Використовуйте VAC для відстеження продуктивності кешу, оптимізації коду VCL і точного налаштування стратегії кешування на основі побачених метрик.

Варіанти використання Varnish

  • Медіа-сайти: Швидка передача статичних ресурсів, як-от зображень або новин, на високій швидкості.

  • Платформи електронної комерції: Прискорення списків товарів або сторінок категорій.

  • Новини та публікації: керування сплесками трафіку під час важливих новинних подій.

  • Прискорення API: Кешування важких для читання кінцевих точок API для зменшення навантаження на бекенд.

Висновок

Varnish – це потужне рішення для будь-якої веб-інфраструктури, що вимагає високої продуктивності та масштабованості. Розвантажуючи повторювані HTTP-запити з бекенда і блискавично доставляючи кешований контент, Varnish допомагає підвищити швидкість роботи сторінок, зменшити навантаження на сервер і покращити взаємодію з користувачем.

Якщо ваш сайт обробляє значний обсяг трафіку або ви просто прагнете підвищити продуктивність і надійність, інтеграція Varnish у ваш стек є стратегічним кроком вперед.