No video

Webserver benchmark: сравнение производительности Nginx Unit, PHP-FPM и Apache

  Рет қаралды 4,474

Ускорение Сайтов :: Метод Лаб

Ускорение Сайтов :: Метод Лаб

Күн бұрын

В этом видео мы столкнём лбами самые популярные сервера для работы с PHP.
В сравнении участвуют: Nginx Unit 1.7, PHP-FPM, Apache 2.4 с mod_php.
Для всех претендентов этого benchmark созданы максимально равные условия, используются общие настройки PHP и количество процессов.
Система: Ubuntu 18.04.
Профессиональное ускорение сайтов: www.methodlab....
Тестирование скорости сайтов: xn--80aanaoicz...--p1ai/
Сервис оптимизации картинок: www.fotorubka.ru/
Группа "Ускорение сайтов" в VK: sitespe...
Метод Лаб в VK: methodlab
Метод Лаб в Facebook: / methodlab.ru
Метод Лаб в Twitter: / sitespeedup benchmark nginx unit php-fpm

Пікірлер: 26
@NickLavlinsky
@NickLavlinsky 5 жыл бұрын
Вторая серия уже вышла: kzfaq.info/get/bejne/Y9Fpe81pp5fYaYE.html
@ValentinBartenev
@ValentinBartenev 5 жыл бұрын
В данном тесте по большей части фактически 4 раза протестировали производительность PHP. По сравнению с работой интерпретатора, все остальное занимает незначительное количество времени. Пытаться же выяснить разницу в сетевой части с помощью утилиты "ab", которая для обработки соединений использует всего один поток с select() и заведомо работает с соединениями медленнее - дело бессмысленное. Для правильного измерения эффективности сетевой части сервера - клиент должен обладать на порядок большей производительностью, дабы не вносить искажений и своих собственных задержек в тест. В противном случае можно наткнуться на смешные аномалии. Я в своей практике видел как включение (!) access_log-ов в nginx увеличивало (!) RPS в тесте. Детальное изучение той аномалии показало, что включение записи в лог на каждый запрос подтормаживает обработку запроса ровно настолько, насколько требуется чтобы медленный "ab" успел прислать следующий запрос и таким образом рабочий процесс nginx не успевал провалиться в ядро ждать на epoll_wait(), что в результате оказывалось эффективнее даже не смотря на дополнительный вызов write(). Все сервера прекрасно работают когда соединений не больше 100 - это не представляет какой-либо сложности, плюс-минус несколько процентов не играют роли и могут быть особенностью конкретного теста и настроек, особенностью комбинации поведений клиента и сервера по работе с соединениями. Но что толку, если когда к вам придет 1000+ пользователей ваш сервер ляжет? Именно в этом фишка Unit-а с точки зрения производительности, что в отличие от остальных ему без разницы 16 соединений или 100000+. Производительность Unit-а не просаживается с ростом числа соединений. Наглядный пример: itnext.io/performance-comparison-between-nginx-unit-and-uwsgi-python3-4511fc172a4c Что касается unix-сокетов, то Unit нет большой необходимости ставить за локальным nginx-ом. Он сам прекрасно умеет работать с сетью, а поэтому ему дополнительный слой локального проксирования и unix-сокеты не нужны (хотя рудиментарная поддержка их есть, см: github.com/nginx/unit/issues/61 ). Поэтому эта задача не в приоритете. Начальная поддержка TLS уже есть, добавится HTTP/2, разные настройки и Unit практически не будет уступать nginx-у по сетевым возможностям.
@NickLavlinsky
@NickLavlinsky 5 жыл бұрын
Валентин, спасибо за комментарий от разработчика и классные продукты. Насчет количества соединений - понял, попробуем такой вариант тоже. По поводу ab в данном случае позвольте не согласиться. Производительность ab как раз на порядок превышает потребности этого теста. Например, при запуске простых запросов к статике легко даёт 60-80k RPS. Если будет время, то проведём тесты и с более скоростными нагрузками (типа Яндекс.Танк). По сокетам понятно - использование Unit предполагается на выделенной машине для бекенда, без варианта "всё в одном".
@ValentinBartenev
@ValentinBartenev 5 жыл бұрын
@@NickLavlinsky Простой тест: вместо ab возьмите wrk ( github.com/wg/wrk ). Если он даст те же результаты, то значит действительно ab достаточно в данном случае и я напрасно беспокоился. То, что ab может выдать при желании на хорошей системе и 80k RPS - я не сомневаюсь, но это не обязательно показатель. Скажем у одного клиента задержка 10 микросекунд между установкой соединения и отправкой данных, а у другого 100 микросекунд и это будет вносить погрешность вне зависимости от того сколько мы прогоняем запросов за секунду времени. Вопрос лишь во влиянии этой задержки на общий результат. К тому же из-за однопоточности реальная конкурентность по отправке и обработке данных в ab выходит 1.
@NickLavlinsky
@NickLavlinsky 5 жыл бұрын
@@ValentinBartenev ОК, потестим wrk.
@NickLavlinsky
@NickLavlinsky 5 жыл бұрын
@@ValentinBartenev Уже тестируем с wrk, будет вторая серия.
@mistertroll0000
@mistertroll0000 5 жыл бұрын
Шикарный тест. Респект! Спасибо. Мы как раз большую часть проектов на php-fpm перевели с unix-сокетами.
@NickLavlinsky
@NickLavlinsky 5 жыл бұрын
Не забывайте, что есть и вторая часть: kzfaq.info/get/bejne/Y9Fpe81pp5fYaYE.html
@mistertroll0000
@mistertroll0000 5 жыл бұрын
@@NickLavlinsky Да, я посмотрел конечно обе части, спасибо. Хочется ещё тест по потреблению памяти между апачём и fpm в различных конфигурациях. И, какие-нибудь рекомендации по тому как настраивать конфиг фпм, например у меня около 100 сайтов, из них есть относительно нагруженные, есть не нагруженные. Я пока всем поставил pm = dynamic pm.max_children = 14 pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 6 pm.max_requests = 150 памяти свободной ещё есть, (available) примерно 10 гигов. Надо ли повышать количество, или не надо? Всё вроде шустро и так выполняется. В чём отличие max-spare-servers и max-children? Как сделать какое-то уведомление если серверу надо больше процессов, и т.п.?
@user-jz1qb5he1x
@user-jz1qb5he1x 5 жыл бұрын
Здорово! Побольше подобного материала!
@user-xj2xs3mz9v
@user-xj2xs3mz9v 5 жыл бұрын
Спасибо за интересные материалы. До этого мне ничего не было известно про Nginx Unit и стало интересно. Сразу выяснилось, что с недавних пор под ним можно запускать node.js (пишу под ноду). И это мне не до конца понятно. Зачем Nginx будет перенаправлять запрос на Nginx Unit, который запустит node.js, если Nginx может сразу перенаправлять на node.js? Поясните пожалуйста, если Вас не затруднит.
@NickLavlinsky
@NickLavlinsky 5 жыл бұрын
Здесь всё просто: вы заменяете свой http-сервер из ноды Unit'ом. Получаете быстрый масштабируемый сервер с динамической конфигурацией с поддержкой TLS, HTTP/2 и других вещей из коробки. Кроме того, если у вас будут части системы на другом языке, их также можно запустить через Unit.
@ValentinBartenev
@ValentinBartenev 5 жыл бұрын
В конце-концов nginx можно будет из этой связки просто убрать. А Node.js сама по себе очень плохо масштабируется. С Unit-ом можно настроить необходимое количество процессов, кроме того, он будет управлять запуском приложения. В дальнейшем, когда в Unit-е появится функциональность для проксирования, Node.js сможет запрашивать через него другие ресурсы, как это требуется в микросервисной архитектуре. Будет обеспечена функциональность Service Mesh.
@user-xj2xs3mz9v
@user-xj2xs3mz9v 5 жыл бұрын
@@ValentinBartenev если грубо выражаться - Nginx Unit совмещает функционал Nginx и pm2 (в контексте ноды) с возможностью запуска серверов приложений на разных языках? в хорошо конечно будет использовать один Nginx Unit вместо зоопарка инструментов
@ValentinBartenev
@ValentinBartenev 5 жыл бұрын
@@user-xj2xs3mz9v В общем да. В будущем он будет ещё обеспечивать функционал Envoy. Более-менее подробно рассказывал в своем докладе на БИФ2018: yadi.sk/i/yczMbKccJ7Ujkg
@NickLavlinsky
@NickLavlinsky 5 жыл бұрын
Готова вторая версия теста, с уточнениями и доработками, скоро на канале!
@AnglerAdmin
@AnglerAdmin 5 жыл бұрын
Какие изменения вносились в конфиг Апача?
@NickLavlinsky
@NickLavlinsky 5 жыл бұрын
Да никаких особенных, кроме количества процессов (используется MPM prefork). Если интересует что-то конкретное - пишите.
@user-jz1qb5he1x
@user-jz1qb5he1x 5 жыл бұрын
Никак не могу найти причину. Nginx нагружает процессор на 100% при 25 посетителях на сайте по тесту loadimpact. Конфигурация VPS 1 CPU 2.4 GHZ, 1GB RAM 30GB SSD. На чистую Debian 9 c стандартными репозиториями установлена панель Vestacp с минимальным набором: Nginx+php-fpm+Mysql. Все конфиги по дефолту. Движок сайта DLE тоже из коробки. На что обратить внимание? Так ведь не должно быть? Сайт дико тупит при 10-25 одновременных посетителях. Помогите пожалуйста разобраться, перешел с шаред хостинга. А стало еще хуже чем было.
@NickLavlinsky
@NickLavlinsky 5 жыл бұрын
Это значит, что вы что-то совсем неправильно делаете. Можете снять профиль нагрузки с помощью perf и тогда будет понятно, что именно тормозит.
@user-rw2de4el1r
@user-rw2de4el1r 5 жыл бұрын
Я начинающий, не могу понять одну вещь. Если nginx быстрее чем Apache то почему Apache вообще используется? Есть ли у Apache преимущества перед nginx?
@NickLavlinsky
@NickLavlinsky 5 жыл бұрын
Во-первых, он не такой уж медленный. Скорее прожорливый по ресурсам. Во-вторых, у Апача есть куча модулей. В-третьих, он может быть сервером приложения php, perl, python, ruby и т.д. Наконец, по историческим причинам.
@gobpblueex
@gobpblueex 2 күн бұрын
Он гибче настраивается
@naillatypov1
@naillatypov1 5 жыл бұрын
Спс за тест. А пробовали патч от cloudflare - blog.cloudflare.com/optimizing-tls-over-tcp-to-reduce-latency/ ? Есть смысл? Если да - то будет преимущество в десятках или сотнях миллисекундах для TTFB ? )
@NickLavlinsky
@NickLavlinsky 5 жыл бұрын
Да, как-то пробовал. В тестах особого эффекта не видел в масштабах загрузки всего сайта. Какое будет преимущество никто заранее не скажет: это зависит от многих факторов: BW, RTT, PLR, версия TLS, браузер и т. д.
@jura1ism
@jura1ism Жыл бұрын
надо сравнивать Nginx c PHP-FPM и Apache с PHP-FPM. тест некорректен.
Webserver benchmark: сравнение Nginx Unit, PHP-FPM и Apache - Часть 2 (дополненная)
9:55
Ускорение Сайтов :: Метод Лаб
Рет қаралды 1,9 М.
Please Help Barry Choose His Real Son
00:23
Garri Creative
Рет қаралды 23 МЛН
나랑 아빠가 아이스크림 먹을 때
00:15
진영민yeongmin
Рет қаралды 3,7 МЛН
The Joker kisses Harley Quinn underwater!#Harley Quinn #joker
00:49
Harley Quinn with the Joker
Рет қаралды 18 МЛН
Защита от DoS-атак с помощью Nginx
22:32
Ускорение Сайтов :: Метод Лаб
Рет қаралды 13 М.
APACHE VS NGINX. Что выбрать? Сравнение двух популярных HTTP серверов.
17:49
Optimizing nginx and PHP-FPM - from Beginner to Expert to Crazy | Arne Blankerts
1:06:10
International PHP Conference
Рет қаралды 24 М.
Быстрый анализ серверной скорости сайта
40:22
Ускорение Сайтов :: Метод Лаб
Рет қаралды 1,8 М.
Nginx + ModSecurity 3.0 - собираем и настраиваем с нуля
38:26
Ускорение Сайтов :: Метод Лаб
Рет қаралды 5 М.
Apache vs NGINX
7:53
IBM Technology
Рет қаралды 287 М.
Please Help Barry Choose His Real Son
00:23
Garri Creative
Рет қаралды 23 МЛН