Автор статьи: Алексей Гончаров, 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 (равенство)
Результаты тестов TTFB:
Ngnix | OpenLiteSpeed | |
Самое быстрое TTFB | 32 мс | 34 мс |
Самое быстрое в итоге | 38 мс | 68 мс |
Среднее TTFB | 372 мс | 317 мс |
Среднее в итоге | 668 мс | 550 мс |
Ngnix загружается быстрее для самого близкого местоположения, в то время как OpenLiteSpeed работает лучше для всех возможных расположений в среднем.
OpenLiteSpeed против Ngnix: Тест производительности при 1000 пользователях в секунду (с включенным кэшированием — победа Ngnix
Используя loader.io, который имитирует запросы пользователей, мы можем получить хорошее представление об эффективности кэширования. В данном случае 1000 пользователей в секунду равно 1000 запросов в секунду.
Метрики (1000 кэшированных пользователей) | Ngnix | OpenLiteSpeed |
Средний отклик | 744 мс | 1615 мс |
Минимальный отклик | 101 мс | 102 мс |
Максимальный отклик | 10296 мс | 11381 мс |
Успешные запросы | 59964 | 53791 |
Ошибки таймаута | 0 | 16 |
Сетевые ошибки | 0 | 346 |
Ngnix демонстрирует здесь гораздо лучшие результаты, поскольку у него больше запросов и ниже среднее время отклика.
Ngnix также имеет более стабильное время отклика, с меньшим количеством скачков на графике, и ему удалось успешно обработать 99,9% всех запросов.
У OpenLiteSpeed было несколько сетевых ошибок и таймаутов (время отклика > 10 секунд), и он обработал только 90% от максимально возможного количества запросов.
OpenLiteSpeed против Ngnix: Тест производительности от 0 до 10.000 пользователях (с включенным кэшированием) (победа OpenLiteSpeed)
Но как сравниваются обе платформы, если мы медленно увеличиваем количество пользователей с 0 до 10.000 за одну минуту?
Интересно, что при использовании Ngnix мы видим, что время отклика примерно соответствует росту числа посетителей. Однако в случае с OpenLiteSpeed это число остается неизменным, а после 9000+ пользователей происходит ступенчатое увеличение, что приводит к большому количеству тайм-аутов.
По сути, OpenLiteSpeed работал лучше примерно при 9000 пользователей, что также приводило к большему количеству успешных запросов. Вот обзор всех показателей:
Метрика (0-10000 пользователей) | Ngnix | OpenLiteSpeed |
Средний отклик | 3069 мс | 2041 мс |
Минимальный отклик | 110 мс | 103 мс |
Максимальный отклик | 12028 мс | 16661 мс |
Успешные запросы | 85489 | 111784 |
Ошибки таймаута | 0 | 3822 |
Сетевые ошибки | 0 | 0 |
Давайте посмотрим, что произойдет, если мы отключим кэширование!
OpenLiteSpeed против Ngnix: Тест производительности при 50 пользователях в секунду (с выключенном кэшированием) (победа Ngnix)
При выключенном кэшировании мы получаем совершенно другую картину.
Ngnix работает намного лучше, чем LiteSpeed, с гораздо большим количеством успешных запросов и меньшим временем отклика.
Метрики (50 некэшированных пользователей) | Ngnix | OpenLiteSpeed |
Средний отклик | 1918 мс | 3560 мс |
Минимальный отклик | 498 мс | 1137 мс |
Максимальный отклик | 3069 мс | 11077 мс |
Успешные запросы | 2171 | 1313 |
Ошибки таймаута | 0 | 0 |
Сетевые ошибки | 0 | 0 |
Еще один популярный инструмент для тестирования нагрузки — h2load. Он часто встречается его в блогах. Следующие результаты говорят об этом.
OpenLiteSpeed против Ngnix: h2load (с включенным кэшированием) (победа OpenLiteSpeed)
Я выполнил следующий тест:
h2load -n10000 -c100 -m10 --h1 "https://host.goncharov.press"
По сути, это означает, что нужно выполнить 10.000 запросов со 100 пользователями, которые могут иметь до 10 одновременных потоков. И вот результаты:
Метрики (1000 кэшированных пользователей) | Ngnix | OpenLiteSpeed |
Время завершения | 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 некэшированных пользователей) | Ngnix | OpenLiteSpeed |
Время завершения | 24.95 секунд | 43.54 секунд |
Обработано запросов | 40.09 запрос/с | 22.97 запрос/с |
Скорость | 1.92 Мбайт/с | 1001 Кбайт/с |
Как и в тесте с Loader.io, Ngnix показывает здесь гораздо лучшие результаты.
Давайте теперь погрузимся в некоторые специфичные для WordPress тесты производительности и посмотрим, как сравниваются оба гиганта.
OpenLiteSpeed против Ngnix: Создание и удаление постов WordPress (победа OpenLiteSpeed)
Тестирование вставки и удаления постов — это простой самописный тест, в которым я создаю, получаю и удаляю 10.000. Для каждого из этих действий я регистрирую время, которое оно заняло.
Ngnix | OpenLiteSpeed | |
Вставить 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. Это хороший показатель производительности веб-сервера.
Ngnix | OpenLiteSpeed | |
Показатель сервера | 8.274 | 8.109 |
Запросы в секунду | 1326 | 1304 |
В этом тесте Ngnix и OpenLiteSpeed работают одинаково Для оценки сервера, чем меньше показатель, тем лучше.
OpenLiteSpeed против Ngnix: WordPress Benchmark Tools (победа OpenLiteSpeed)
Инструмент WordPress Hosting Benchmark — это отличный инструмент, который тестирует производительность вашего процессора, памяти, MySQL, хранилища и сети. Он дает представление о том, насколько хорош ваш хостинг-провайдер, а также о том, насколько эффективно работает стек веб-серверов.
В этом тесте производительности OpenLiteSpeed работает немного лучше, за исключением ввода-вывода небольших файлов.
Ngnix | OpenLiteSpeed | |
Операции с большими текстовыми данными | 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.9 | 7.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.865 | 0.378 | 38.742 |
OLS на 1 ядре / 2 ГБ | 59.084 | 0.505 | 58.640 |
Ngnix на 2 ядрах / 4 ГБ | 56.655 | 0.370 | 48.120 |
OLS на 2 ядрах / 4 ГБ | 52.699 | 0.413 | 59.617 |
Ngnix на 4 ядрах / 8 ГБ | 36.853 | 0.364 | 33.128 |
OLS на 4 ядрах / 8 ГБ | 50.906 | 0.463 | 41.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:54 | 00:54:19 |
OLS на 4 ядрах / 8 ГБ | 00:03:15 | 00:56:42 |
В фоновом режиме я также провел тест с использованием сервера меньшего размера, но существенного влияния на время создание товаров не было.
Поскольку этот тест занимает гораздо больше времени, он также является хорошим тестом на “долговечность”, другими словами: насколько долго держится данная производительность.
Результаты мониторинга запросов: победа Ngnix
Для нескольких десятков товаров, я заходил на страницу редактирования товара, редактировал один из них, и смотрел метрики в Query Monitor. Query Monitor — это плагин, который помогает улучшать производительность, отслеживать метрики и видеть, какой код в WordPress является медленным и оказывает непосредственное влияние на скорость сайта.
Плагин отслеживает время, необходимое для выполнения PHP, время, необходимое для запроса к базе данных, и сколько оперативной памяти и запросов задействуется в этом процессе.
Тест по умолчанию (17 товаров)
Страница | Загрузка PHP (с) | Загрузка запроса (с) |
---|---|---|
Ngnix — Страница товаров | 0.37 | 0.04 |
OLS — Страница товаров | 0.82 | 0.05 |
Ngnix — Страница редактирования товара | 0.37 | 0.08 |
OLS — Страница редактирования товара | 1.54 | 1.17 |
Здесь Ngnix показал себя намного лучше, а OLS показал несколько странных значений при редактировании товара. Но какие результаты для 1000 товаров?
Тест 1000 товаров
Страница | Загрузка PHP (с) | Загрузка запроса (с) |
---|---|---|
Ngnix — Страница товаров | 0.27 | 0.06 |
OLS — Страница товаров | 0.65 | 0.08 |
Ngnix — Страница редактирования товара | 0.47 | 0.04 |
OLS — Страница редактирования товара | 0.42 | 0.09 |
Опять же, Ngnix был быстрее в запросах и загрузке страниц, за исключением страницы с редактированием товара, на которой OpenLiteSpeed загрузился немного быстрее (хотя запрос был медленнее).
Тест 11000 товаров
Здесь постепенно мы видим результаты наличия большого количества товаров в нашей базе данных, что приводит к увеличению времени запроса.
Страница | Загрузка PHP (с) | Загрузка запроса (с) |
---|---|---|
Ngnix — Страница товаров | 0.48 | 0.11 |
OLS — Страница товаров | 1.01 | 0.25 |
Ngnix — Страница редактирования товара | 0.55 | 0.34 |
OLS — Страница редактирования товара | 1.79 | 0.46 |
Опять же, Ngnix здесь справляется лучше, даже после многократного обновления, загрузки страницы и усреднения чисел, чтобы убедиться, что наш результат не случаен.
Кстати, я так же проделал это действие в рамках мощной конфигурации сервера, поскольку уменьшение мощности сервера не оказывает существенного влияния на результаты.
Результаты тестирование импорта: победа Ngnix
Я импортировал 1000 товаров в WordPress с помощью WP All import и засек время, которое занял импорт. Вот результаты:
Стек | Продолжительность импорта |
---|---|
Ngnix | 00:01:15 |
OLS | 00:01:26 |
Опять же, 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. Ознакомиться с полным списком курсов по всем направлениям можно по ссылке.