Varnish чи Nginx FastCGI – яке кешування краще для WordPress?

Varnish або Nginx FastCGI

Коли ми говоримо про швидке завантаження сайтів WordPress, ми обов’язково враховуємо кешування. Нерідко вона грає вирішальну роль. Грамотно оптимізований сторінки кеш здатний істотно прискорити завантаження сторінок для відвідувачів, знижуючи навантаження на сервер. Це справді безпрограшний варіант! Проте чи всі рішення для сторінкового кешування однаково корисні. Простий пошук за запитом “caching” в каталозі WordPress.org виводить тисячі результатів. Причому плагіни далеко не єдиний варіант для реалізації кешування на сайті. Найчастіше плагіни працюють не так добре, як серверні рішення – наприклад, Varnish або Nginx FastCGI.

У цій статті ми порівняємо кешування Varnish і Nginx FastCGI, щоб зрозуміти, яке краще. Також ми протестуємо WordPress без кешування та додамо кешуючий плагін. Я обрав Simple Cache, оскільки, як і слідує з назви, його найпростіше налаштувати.

Наш стек виглядає так:

Varnish чи Nginx FastCGI

Varnish протів Nginx

Перш ніж ми перейдемо до тестування, давайте торкнемося кожної технології та зрозуміємо, чому нам варто її використати.

Varnish Cache – це open source фронтенд-акселератор. Він встановлюється на веб-сервер для кешування вмісту відповідей. Згідно з офіційною документацією, він здатний прискорити доставку контенту у 300-1000 разів – залежно від архітектури.

Головна функція Nginx – робота як веб-сервер. Він пропонує зворотне проксування, кешування, медіа-стрімінг та навіть балансування навантаження. З роками Nginx істотно виріс, починаючи зі звичайного веб-сервера, що пропонує максимальну стабільність та продуктивність. Сьогодні ми налаштуємо веб-сервер так, щоб він передавав запити до PHP-FPM. Кешування FastCGI (протокол, який використовується для зв’язку між Nginx та PHP-FPM) ми налаштуємо так, щоб відповіді від PHP-FPM зберігалися у вигляді статичних HTML-файлів; до них безпосередньо звертатиметься Nginx при наступних запитах.

Як бачите, функціонал Nginx та Varnish різний. Varnish спеціально створений для кешування, тоді як Nginx – це веб-сервер із можливістю використання вбудованого кешування. Також для роботи Varnish потрібен веб-сервер, такий як Apache або Nginx.

Як ми порівнюватимемо результати кешування?

ApacheBench – інструмент командного рядка, розроблений Apache Software Foundation та спочатку створений для тестування продуктивності Apache.

Всі тести в даній статті будуть виконуватись з використанням одних і тих самих параметрів, за винятком тестування WordPress без кешу. Чому так? Надсилання такої великої кількості одночасних запитів до PHP та MySQL призведе лише до збільшення середнього часу відповіді, що навряд чи можна назвати грамотним відображенням продуктивності PHP.

ab -n 10000 -c 100 https://siteunderload.com/

Тут ми імітуємо 10000 запитів із одночасним виконанням 100 запитів. Це означає, що ApacheBench відправлятиме в цілому 10000 запитів партіями по 100 за раз. Для версії без кешування я використовуватиму 20 одночасних запитів.

У результаті ми отримаємо наступні результати:

Varnish чи Nginx FastCGI

У цій статті ми розглядатимемо переважно показники Requests per second та Connection Times. Кожен тест буде виконано загалом 10 разів – ми візьмемо середнє значення для порівняння.

Ми тестуватимемо лише HTTPS-версію сайту, оскільки сьогодні вона максимально поширена.

Серверний стек

Всі тести будуть проводитися з одним і тим же серверним стеком, що включає в себе:

  • DigitalOcean 2GB ($10/месяц)
  • Ubuntu 20.04
  • PHP 7.4.14
  • Nginx 1.18.0
  • MariaDB 10.4.17
  • Varnish 6.2.1
  • WordPress 5.6, Twenty Twenty-One

Varnish мы полностью отключим, когда он не требуется для текущего набора тестов. Nginx будет использоваться для завершения HTTPS-запросов, поскольку Varnish не способен этого сделать. В итоге получаем следующую конфигурацию:

Nginx:443 > Varnish:80 > Nginx:8080

Зверніть увагу, що Nginx у нас працює як проксі-сервер для завершення HTTPS. Є й інші проксі-сервери для виконання того ж завдання, але я вибрав Nginx, щоб мінімізувати кількість різних компонентів.

Ми будемо тестувати чотири різні сценарії:

  • WordPress – Без кешування
  • Simple Cache – Кешування через WordPress-плагін
  • FastCGI Cache – Nginx
  • Varnish – Varnish с Nginx для завершення HTTPS

Пропускна здатність – кількість запитів за секунду (Requests Per Second)

Як і очікувалося, WordPress без кешування працює дуже погано, оскільки є вузьке місце – сервер бази даних. Просте виключення сервера бази даних із рівняння за допомогою сторінки кешування дає майже 10-кратний приріст кількості запитів. Varnish ще трохи покращує ситуацію, гарантуючи, що запити не оброблятимуться засобами PHP. Однак Varnish сильно відстає від Nginx, якщо говорити про чисту пропускну здатність (запитів за секунду) – можливо, через додатковий крок у вигляді завершення HTTPS з боку Nginx. Використання одного Nginx дозволяє досягати оптимальної пропускної спроможності.

Середній час відповіді

Велика кількість запитів на секунду (Requests Per Second) не має жодного значення, якщо ці запити виконуються повільно. Тому важливо також вимірювати час відповіді. Середній час відповіді – це загальний час, який потрібно на виконання запиту.

Коли сервер перебуває під великим навантаженням, середній час відповіді зазвичай збільшується. Пов’язано це з тим, що сервер може обробляти лише певну кількість одночасних підключень – як правило, через вузькі місця в пам’яті або в ЦП. Якщо їх кількість стає більшою, всі додаткові підключення ставляться у чергу і обробляються в міру доступності ресурсів. Якщо запити знаходяться в черзі занадто довго, вони закінчуються тайм-аутом.

Як правило, що менше різних ділянок у життєвому циклі запиту, то менше буде середній час відповіді. Ось чому кешування Nginx FastCGI працює найкраще – адже тут використовується статичний файл з диска (який, у свою чергу, з високою ймовірністю буде кешований у пам’яті внаслідок застосування Linux Page Cache). Запит з WP-сайту без кешування буде пропущений через Nginx, PHP та сервер баз даних у бекенді. З плагіном кешування ви торкнетесь тільки Nginx і PHP. При кешуванні сторінок через Nginx FastCGI Cache або Varnish ви торкнетесь тільки Nginx або Varnish.

Varnish Nginx FastCGI

Висновок

Якщо порівнювати Varnish із Nginx FastCGI Cache, то Nginx тут явний переможець, що дає високу продуктивність. Він не тільки здатний обробляти більше запитів за секунду, але ще й передає кожен запит у середньому на 59 мс швидше.

Проте продуктивність – не єдина міркування. Як щодо легкості налаштування? У цьому випадку плагіни WordPress виходять на перше місце (за винятком W3 Total Cache, який має дуже громіздку панель налаштувань). Так, кешування Nginx FastCGI досить просто налаштувати, але воно вимагає sudo прав на сервері. Varnish, з іншого боку, набагато складніше налаштувати, частково через вимоги до HTTPS-термінації.

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

Багато компаній покладаються виключно на Nginx у питаннях кешування.

Прокоментувати

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *