Сравнение Apache mod_php, fcgid, proxy_fcgi + php-fpm и различных MPM для блога на WordPress.

apache_logo
Платформа WordPress довольно популярна при создании собственных сайтов и блогов. В этой статье я проведу стресс-тестирование собственного сайта на WordPress с целью выяснить какой из режимов работы Apache позволит выжать максимум производительности.

В качестве тестового стенда выступает бомж-дроплет(мой любимый) от DigitalOcean:
1 CPU, 512 MB оперативы и SSD диск на 20 GB.

На сервер установлены Apache 2.4.10, PHP 5.6.20 и MySQL 14.14 Distrib 5.5.49.
Opcache включен в PHP по умолчанию и был донастроен в соответствии с реалиями сервера.
MySQL был также донастроен. Используемый движок – InnoDB. Конфигурация MySQL от теста к тесту не менялась.
Помимо прочих настроек в Apache был включен mod_disk_cache. Этот модуль просто мастхев для большинства сайтов на WordPress, в особенности для моего, где контент меняется редко.

Нагрузочное тестирование проводилось при помощи утилиты JMeter. JMeter был поднят на соседнем дроплете в том же датацентре. Постепенно изменяя количество потоков, посылающих запросы на сайт, подбиралось оптимальное их количество, показывающее максимальное количество обработанных запросов в секунду. GET-запросы были направлены ко всем страницам сайта.

У Apache был протестирован классический mod_php в связке с prefork MPM и только с ним, т.к. mod_php не поддерживает мультипоточность. Также были протестированы модули fcgid и proxy_fcgi + php-fpm в связке со всеми доступными MPM(prefork, worker, event). Сторонний модуль fastcgi(libapache2-mod-fastcgi) не был протестирован, т.к. при работе с ним запросы по каким-то причинам не кешировались в Apache.
В качестве контрольного теста вместо Apache был настроен и протестирован Nginx с включенным fastcgi_cache, обрабатывающий запросы при помощи php-fpm.

Результаты тестирования:

HTTPD PHP MPM Запросов / сек.
Apache mod_php prefork 2610
Apache fcgid prefork 2400
Apache fcgid worker 2460
Apache fcgid event 2520
Apache proxy_fcgi + php-fpm prefork 2670
Apache proxy_fcgi + php-fpm worker 2700
Apache proxy_fcgi + php-fpm event 2850
Nginx php-fpm 2600

Комментарии к результатам тестирования:
1) Все запросы к сайту обрабатывались с использованием кеша(100% HIT).
2) Помимо кеша, огромную пропускную способность обеспечило также нахождение утилиты стресс-тестирования JMeter в том же датацентре. В реальности запросы конечно же могут приходить из разных точек планеты – имейте это в виду.
3) Несмотря на то, что Apache показал лучшую пропускную способность, порядка 2% запросов из числа обработанных отбивались с ошибкой 403 Forbidden. Также разброс во времени обработки запросов был достаточно велик – от миллисекунд до порядка одной минуты.
4) Несмотря на среднюю пропускную способность в тестах, Nginx показал себя я наилучшей стороны – ни один из запросов не отбился с ошибками, а время обработки запроса не превышало 10 секунд.

Выводы:
1) Если вы по каким то причинам привязаны к Apache, связка proxy_fcgi + php-fpm + event MPM обеспечит максимальную производительность на подобном сайте.
2) Если вы не привязаны к конкретному HTTPD, используйте Ngnix. Помимо стабильной работы, он имеет преимущества перед Apache в плане обработки запросов из реального мира.

Leave a Reply

Your email address will not be published. Required fields are marked *