Автор статьи: Алексей Гончаров, e-commerce  full-stack разработчик, основатель digital агентства Readycode.ru


Я всегда нахожусь в поиске новых технологий для оптимизации скорости сайтов и веб-приложений. Правильный веб-сервер во многом определяет скоростные показатели вашего сайта. В этой статье мы сравним производительность LiteSpeed и Ngnix и выясним, на каком их этих веб-серверов WordPress + Woocommerce показывает наилучший результат. 

Было много сообщений от нишевых и не очень блогов, утверждающих, что LiteSpeed работает на 1200% лучше, чем Ngnix, что LiteSpeed показывает гораздо более сильные результаты при тестах производительности в сравнении с Ngnix. Согласно тестам производительности Litespeed (от разработчиков LiteSpeed) по сравнению с Ngnix он показывает большую разницу в производительности, так что если это окажется правдой, то переход с Ngnix на LiteSpeed будет вполне оправдан. На самом деле, “на 1200%” звучит слишком хорошо, чтобы быть правдой.

Из таких статей я не получил удовлетворительных ответов, а тесты производительности часто были очень односторонними. Моё решение было простым: самостоятельно запустить пару серверов и провести реальное тестирование!

В этой статье я отвечу на следующий вопрос: насколько хорош OpenLiteSpeed в сравнении с Ngnix при использовании в WordPress?

Что такое LiteSpeed?

LiteSpeed — это веб-сервер от компании LiteSpeed Technologies. Веб-сервер позволяет компьютеру или серверу, подключенному к Интернету, размещать и обслуживать сайты.

LiteSpeed известен своей производительностью и совместимостью с Apache, другим очень популярным веб-сервером.

В этой статье мы сосредоточимся на версии LiteSpeed Web Server с открытым исходным кодом, которая называется OpenLiteSpeed.

Некоторые компании, предоставляющие виртуальный хостинг, с большим успехом используют OpenLiteSpeed, но многие крупные хостинг-компании используют Ngnix или Apache.

Что такое Ngnix?

Ngnix (произносится, как «engine-ex») – это тоже open source веб-сервер, который с момента своего первоначального успеха в качестве веб-сервера, теперь также используется в качестве обратного прокси-сервера, кэша HTTP и балансировщика нагрузки. Он используется многими крупными компаниями, такими как Dropbox и Netflix, и становится все более популярным.

Он известен тем, что хорошо обрабатывает статичные файлы, а также имеет специальные модули для кэширования (FastCGI) и работы с PHP (PHP-FPM).

LiteSpeed против Ngnix: Результаты

Для тестирования я создал 2 сервера, оба с 2 ядрами и 4 ГБ оперативной памяти. Так же использовал еще один дополнительный сервер, на котором установил приложение для тестирования нагрузки. На одном сервере я установил Ngnix, а на другом — OpenLiteSpeed. Для некоторых тестов производительности я также включил кэширование FastCGI для Ngnix и для LiteSpeed.

Мои тесты сравнивают OpenLiteSpeed с Ngnix.

Затем я провел следующие тесты на этих сайтах WordPress:

  • Тесты времени на получение первого байта (time to first byte, TTFB) и нагрузки с помощью Sucuri Performance Check.
  • Тест производительности при 1000 пользователях в секунду с использованием Loader.io (с включенным кэшированием)
  • Тест производительности при 50 пользователях в секунду с использованием Loader.io (без кэширования)
  • Тест производительности от 0 до 10.000 пользователей за одну секунду, используя Loader.io (с включенным кэшированием)
  • Тест, который я написал сам, позволяющий добавление, получение и удаление 10000 постов
  • Тест с использованием плагина WordPress Performance Tester
  • Тест с использованием плагина WordPress Benchmark Plugin.

OpenLiteSpeed против Ngnix: TTFB (равенство)

LiteSpeed против Ngnix: Большая битва (тесты производительности, WordPress и OpenLiteSpeed)
Результаты для Ngnix

Результаты тестов TTFB:

NgnixOpenLiteSpeed
Самое быстрое TTFB32 мс34 мс
Самое быстрое в итоге38 мс68 мс
Среднее TTFB372 мс317 мс
Среднее в итоге668 мс550 мс

Ngnix загружается быстрее для самого близкого местоположения, в то время как OpenLiteSpeed работает лучше для всех возможных расположений в среднем.

OpenLiteSpeed против Ngnix: Тест производительности при 1000 пользователях в секунду (с включенным кэшированием — победа Ngnix

Nginx load-test results
Результаты для Ngnix

LiteSpeed vs Nginx: The Big Battle (Benchmarks, WordPress & OpenLiteSpeed) 2
Результаты для OpenLiteSpeed

Используя loader.io, который имитирует запросы пользователей, мы можем получить хорошее представление об эффективности кэширования. В данном случае 1000 пользователей в секунду равно 1000 запросов в секунду.

Метрики (1000 кэшированных пользователей)NgnixOpenLiteSpeed
Средний отклик744 мс1615 мс
Минимальный отклик101 мс102 мс
Максимальный отклик10296 мс11381 мс
Успешные запросы5996453791
Ошибки таймаута016
Сетевые ошибки0346

Ngnix демонстрирует здесь гораздо лучшие результаты, поскольку у него больше запросов и ниже среднее время отклика. 

Ngnix также имеет более стабильное время отклика, с меньшим количеством скачков на графике, и ему удалось успешно обработать 99,9% всех запросов.

У OpenLiteSpeed было несколько сетевых ошибок и таймаутов (время отклика > 10 секунд), и он обработал только 90% от максимально возможного количества запросов.

OpenLiteSpeed против Ngnix: Тест производительности от 0 до 10.000 пользователях (с включенным кэшированием) (победа OpenLiteSpeed)

Но как сравниваются обе платформы, если мы медленно увеличиваем количество пользователей с 0 до 10.000 за одну минуту?

Nginx from 0 to 10.000 users
Ngnix: от 0 до 10.000

OpenLiteSpeed from 0 to 10.000 users
OpenLiteSpeed: от 0 до 10.000

Интересно, что при использовании Ngnix мы видим, что время отклика примерно соответствует росту числа посетителей. Однако в случае с OpenLiteSpeed это число остается неизменным, а после 9000+ пользователей происходит ступенчатое увеличение, что приводит к большому количеству тайм-аутов.

По сути, OpenLiteSpeed работал лучше примерно при 9000 пользователей, что также приводило к большему количеству успешных запросов. Вот обзор всех показателей:

Метрика (0-10000 пользователей)NgnixOpenLiteSpeed
Средний отклик3069 мс2041 мс
Минимальный отклик110 мс103 мс
Максимальный отклик12028 мс16661 мс
Успешные запросы85489111784
Ошибки таймаута03822
Сетевые ошибки00

Давайте посмотрим, что произойдет, если мы отключим кэширование!

OpenLiteSpeed против Ngnix: Тест производительности при 50 пользователях в секунду (с выключенном кэшированием) (победа Ngnix)

При выключенном кэшировании мы получаем совершенно другую картину.

Nginx 50 uncached users
Ngnix: 50 некэшированных пользователей


OpenLiteSpeed 50 uncached users
OpenLiteSpeed: 50 некэшированных пользователей

Ngnix работает намного лучше, чем LiteSpeed, с гораздо большим количеством успешных запросов и меньшим временем отклика.

Метрики (50 некэшированных пользователей)NgnixOpenLiteSpeed
Средний отклик1918 мс3560 мс
Минимальный отклик498 мс1137 мс
Максимальный отклик3069 мс11077 мс
Успешные запросы21711313
Ошибки таймаута00
Сетевые ошибки00

Еще один популярный инструмент для тестирования нагрузки — h2load. Он часто встречается его в блогах. Следующие результаты говорят об этом.

OpenLiteSpeed против Ngnix: h2load (с включенным кэшированием) (победа OpenLiteSpeed)

Я выполнил следующий тест:

h2load -n10000 -c100 -m10 --h1 "https://host.goncharov.press"

По сути, это означает, что нужно выполнить 10.000 запросов со 100 пользователями, которые могут иметь до 10 одновременных потоков. И вот результаты:

Метрики (1000 кэшированных пользователей)NgnixOpenLiteSpeed
Время завершения5.59 секунд4.87 с
Обработано запросов1790,45 запрос/с2052,24 запрос/с
Скорость93,86 Мбайт/с107,79 Мбайт/с

Здесь OpenLiteSpeed работает лучше. 

OpenLiteSpeed против Ngnix: h2load (с выключенном кэшированием) (победа Ngnix)

Но увидим ли мы такую же разницу при отключении кэширования? Давайте посмотрим! Я выполнил следующую команду, которая загружает некэшированные версии сайта.

h2load -n1000 -c10 -m10 --h1 "https://hostg.goncharov?nocache"


И вот результаты:

Метрики (10 некэшированных пользователей)NgnixOpenLiteSpeed
Время завершения24.95 секунд43.54 секунд
Обработано запросов40.09 запрос/с22.97 запрос/с
Скорость1.92 Мбайт/с1001 Кбайт/с


Как и в тесте с Loader.io, Ngnix показывает здесь гораздо лучшие результаты.

Давайте теперь погрузимся в некоторые специфичные для WordPress тесты производительности и посмотрим, как сравниваются оба гиганта.

OpenLiteSpeed против Ngnix: Создание и удаление постов WordPress (победа OpenLiteSpeed)

Тестирование вставки и удаления постов — это простой самописный тест, в которым я создаю, получаю и удаляю 10.000. Для каждого из этих действий я регистрирую время, которое оно заняло.

NgnixOpenLiteSpeed
Вставить 10.000 постов46,939 секунд41,041 секунд
Удалить 10.000 постов44,538 секунд43,170 секунд
Запросить 10.000 постов0,318 секунд0,376 секунд

В этом случае OpenLiteSpeed немного быстрее.

OpenLiteSpeed против Ngnix: Тестирование производительности WordPress (равенство)

Плагин WordPress Performance Tester делает два теста производительности, которые оценивают работу сервера и количество запросов в секунду в WordPress. Это хороший показатель производительности веб-сервера.

NgnixOpenLiteSpeed
Показатель сервера8.2748.109
Запросы в секунду13261304

В этом тесте Ngnix и OpenLiteSpeed работают одинаково Для оценки сервера, чем меньше показатель, тем лучше.

OpenLiteSpeed против Ngnix: WordPress Benchmark Tools (победа OpenLiteSpeed)

Инструмент WordPress Hosting Benchmark — это отличный инструмент, который тестирует производительность вашего процессора, памяти, MySQL, хранилища и сети. Он дает представление о том, насколько хорош ваш хостинг-провайдер, а также о том, насколько эффективно работает стек веб-серверов.

В этом тесте производительности OpenLiteSpeed работает немного лучше, за исключением ввода-вывода небольших файлов.

NgnixOpenLiteSpeed
Операции с большими текстовыми данными8.3 секунд7.8 секунд
Произвольные операции с двоичными данными7.5 секунд7.3 секунд
Возможность записи в файловую систему1179 Мбайт/с1174 Мбайт/с
Скорость копирования и доступа к локальным файлам1047 Мбайт/с1143 Мбайт/с
Тест ввода-вывода небольших файлов990 Мбайт/с698 Мбайт/с
Импорт большого количества данных в базу данных3.5 с3.3 с
Простые запросы к одной таблице1.2 с1 с
Сложные запросы к базе данных по нескольким таблицам5 с4.7 с
Общий балл7.97.9


Итак, мы с вами провели много сравнительных тестов. Пришло время перейти к выводам.


OpenLiteSpeed против Ngnix: скорость WooCommerce

Хотя предыдущие тесты производительности и были сделаны на базовом варианте установк, это не совсем отражает среднестатистический сайт на WordPress. 

Поэтому я решил провести еще один этап тестирования с простым интернет-магазином, который работает на популярной теме WordPress и WooCommerce. Дополнительно я масштабировал сервер, чтобы посмотреть, каким будет эффект (от 1 ядра и 2 ГБ оперативной памяти до 4 ядер и 8 ГБ оперативной памяти, используя замечательные серверы от Timeweb). Итак, что я тестировал?

  • Производительность загрузки для трех уровней с помощью h2load.
  • Время, необходимое для создания/удаления/получения 10.000 постов.
  • Сколько времени требуется для создания 1000 и 10.000 случайных товаров WooCommerce.
  • Время загрузки и запросы MySQL по данным Query Monitor при различных настройках.
  • Время, необходимое для импорта 1000 постов с помощью WP All Import. 

Нагрузочный тест (с включенным кэшированием): Ничья

В этом нагрузочном тесте я выполнил 10000 запросов, вызванных 100 одновременными пользователями, на кэшированной странице веб-сайта. Вот результаты:

СерверЗапросов в секунду
Ngnix на 1 ядре / 2 ГБ2605
OLS на 1 ядре / 2 ГБ1055
Ngnix на 2 ядрах / 4 ГБ1094
OLS на 2 ядрах / 4 ГБ1105
Ngnix на 4 ядрах / 8 ГБ1086
OLS на 4 ядрах / 8 ГБ1103

За исключением самого маленького сервера Ngnix, результаты практически одинаковы. Однако у OpenLiteSpeed TTFB было меньше. При увеличении мощности сервера я также не заметил особого эффекта.

Нагрузочный тест (без кэширования): победа Ngnix

В этом нагрузочном тесте я выполнил 1000 запросов, вызванных 10 одновременными пользователями, на некэшированной странице веб-сайта. Вот результаты:

СерверЗапросов в секунду
Ngnix на 1 ядре / 2 ГБ8.3
OLS на 1 ядре / 2 ГБ4.01
Ngnix на 2 ядрах / 4 ГБ14.97
OLS на 2 ядрах / 4 ГБ8.28
Ngnix на 4 ядрах / 8 ГБ29.25
OLS на 4 ядрах / 8 ГБ16.83

Как и в базовой установке, Ngnix может обрабатывать гораздо больше пользователей без кэширования, и было отмечено явное улучшение производительности для масштабируемых серверов. И снова мы видим возможности кэширования, поскольку некэшированная конфигурация намного медленнее.

Тестирование создания / удаления / получения постов: победа Ngnix

В этом тесте я вставил, запросил и удалил 10.000 постов. Вот результаты:

СерверСоздание (с)Запрос (с)Удаление (с)
Ngnix на 1 ядре / 2 ГБ39.8650.37838.742
OLS на 1 ядре / 2 ГБ59.0840.50558.640
Ngnix на 2 ядрах / 4 ГБ56.6550.37048.120
OLS на 2 ядрах / 4 ГБ52.6990.41359.617
Ngnix на 4 ядрах / 8 ГБ36.8530.36433.128
OLS на 4 ядрах / 8 ГБ50.9060.46341.256

Здесь Ngnix явно выигрывает

В этой тесте Ngnix намного быстрее, чем OpenLiteSpeed, особенно при удалении или вставке постов.

WordPress работает в однопоточном режиме

За исключением некоторой разницы с Ngnix, в целом нет изменений при увеличении мощности сервера, точнее, не они не настолько большие, насколько мы ожидали. Всё потому, что WordPress (и PHP) — однопоточный; один процесс назначается одному потоку. Это означает, что независимо от того, сколько ядер у сервера, один процесс (в данном случае, создание, удаление, получение постов) выполняется одним ядром. Однако при большем количестве ядер вы можете запускать больше процессов одновременно, что обычно приводит к более высокой производительности.

Тесты производительности при создании товаров: Равенство

С помощью WC Smooth Generator я создал 1000, а затем 10.000 товаров и замерил время создания. OpenLiteSpeed обработал 1000 товаров быстрее, в то время как Ngnix обработал  быстрее 10.000 товаров.

Сервер1000 товаров10.000 товаров
Ngnix на 4 ядрах / 8 ГБ00:03:5400:54:19
OLS на 4 ядрах / 8 ГБ00:03:1500:56:42

В фоновом режиме я также провел тест с использованием сервера меньшего размера, но существенного влияния на время создание товаров не было.

Поскольку этот тест занимает гораздо больше времени, он также является хорошим тестом на “долговечность”, другими словами: насколько долго держится данная производительность.

Результаты мониторинга запросов: победа Ngnix

Для нескольких десятков товаров, я заходил на страницу редактирования товара, редактировал один из них, и смотрел метрики в Query Monitor. Query Monitor — это плагин, который помогает улучшать производительность, отслеживать метрики и видеть, какой код в WordPress является медленным и оказывает непосредственное влияние на скорость сайта.

Плагин отслеживает время, необходимое для выполнения PHP, время, необходимое для запроса к базе данных, и сколько оперативной памяти и запросов задействуется в этом процессе.

Тест по умолчанию (17 товаров)

СтраницаЗагрузка PHP (с)Загрузка запроса (с)
Ngnix — Страница товаров0.370.04
OLS — Страница товаров0.820.05
Ngnix — Страница редактирования товара0.370.08
OLS — Страница редактирования товара1.541.17
Загрузка страницы с 17 товарами

Здесь Ngnix показал себя намного лучше, а OLS показал несколько странных значений при редактировании товара. Но какие результаты для 1000 товаров?

Тест 1000 товаров

СтраницаЗагрузка PHP (с)Загрузка запроса (с)
Ngnix — Страница товаров0.270.06
OLS — Страница товаров0.650.08
Ngnix — Страница редактирования товара0.470.04
OLS — Страница редактирования товара0.420.09
Загрузка страницы с 1000 товарами

Опять же, Ngnix был быстрее в запросах и загрузке страниц, за исключением страницы с редактированием товара, на которой OpenLiteSpeed загрузился немного быстрее (хотя запрос был медленнее).

Тест 11000 товаров

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

СтраницаЗагрузка PHP (с)Загрузка запроса (с)
Ngnix — Страница товаров0.480.11
OLS — Страница товаров1.010.25
Ngnix — Страница редактирования товара0.550.34
OLS — Страница редактирования товара1.790.46
Загрузка страницы с 11000 товарами

Опять же, Ngnix здесь справляется лучше, даже после многократного обновления, загрузки страницы и усреднения чисел, чтобы убедиться, что наш результат не случаен. 

Кстати, я так же проделал это действие в рамках мощной конфигурации сервера, поскольку уменьшение мощности сервера не оказывает существенного влияния на результаты.

Результаты тестирование импорта: победа Ngnix

Я импортировал 1000 товаров в WordPress с помощью WP All import и засек время, которое занял импорт. Вот результаты:

СтекПродолжительность импорта
Ngnix00:01:15
OLS00:01:26
Импорт 1000 товаров

Опять же, Ngnix кажется здесь немного быстрее. Это особенно заметно, если импорт содержит уже существующие товары.

LiteSpeed против Ngnix: Показатели близки, но Ngnix, видимо, выиграл.

В моих тестах Ngnix и LiteSpeed показали очень близкие результаты, хотя в примере с интернет-магазином Ngnix справляется лучше.

  • В большинстве тестов разница очень мала, OpenLiteSpeed незначительно быстрее для серверных операций и в ситуациях с кэшированием (за исключением обработки 1000 одновременных пользователей).
  • Ngnix показал себя намного лучше в нагрузочных тестах, когда кэширование было отключено, обрабатывая то же количество запросов и пользователей намного быстрее.

К сожалению, я не могу дать однозначного совета, какой веб-сервер использовать вам: LiteSpeed или Ngnix. Но что делать, если решение принимать всё-таки придётся?

  • Однозначно используйте OpenLiteSpeed, если вы хотите иметь простой в использовании плагин кэширования под WordPress, который удовлетворит все ваши потребности в производительности, а также если вам нужна совместимость с .htaccess. У него так же есть ESI-кэширование (edge side includes), которое можно использовать для кэширования динамических страниц типа каталога, корзины и вишлиста. 
  • Используйте Ngnix, если вам нужна высокая производительность без кэширования и вам нужны конфиги Ngnix. 

Кроме всего вышесказанного, при выборе LiteSpeed или Ngnix следует учитывать еще несколько моментов.

Самый большой плюс использования LiteSpeed в WordPress

Самым большим преимуществом использования Litespeed для WordPress является его родной плагин кэширования LiteSpeed Cache. Это универсальный мультитул под большинство ваших задач по оптимизации скорости WordPress и Woocommerce. В нём есть всё для кэширования, минификации, сжатия, объектный кэш через Redis или Memcached, ESI, оптимизации изображений, CDN, очистки базы данных и многое другое. Вишенка на торте: LiteSpeed Cache — бесплатен. 

К сожалению, у Ngnix нет такого плагина в комплекте, зато есть другие платные и бесплатные альтернативы, такие как WP Rocket, WP Fastest Cache и т.д.

Как видим, сравнение Ngnix и LiteSpeed показало, что Ngnix по результатам тестов — явный победитель в плане производительности. Но вам стоит принимать во внимание тот факт, что каждый сайт — уникален: выбранная тема и плагины могут сильно влиять на производительность сайта, и один и тот же сайт на Ngnix и OLS может работать совершенно по-разному. Даже на уровне субъективных ощущений от использования. На опыту могу сказать, что WordPress и Woocommerce по OLS дают гораздо более приятный “полёт», чем на Ngnix. Что использовать в итоге – решать вам. 

Узнать еще больше актуальных подробностей об использовании Ngnix в различных сценариях можно на онлайн-курсах в OTUS. Ознакомиться с полным списком курсов по всем направлениям можно по ссылке.