У меня есть веб-приложение на основе PHP, работающее на сервере Apache, которое имеет значительный объем обработки php в серверной части. Поскольку общая производительность низкая, я работал над улучшением производительности приложения. Сначала я следовал таким методам, как кэширование на стороне клиента, включение gzip, минимизация js-css, которые позволили значительно повысить производительность.
Чтобы еще больше улучшить производительность, я хотел попробовать улучшить уровень сервера. Поэтому я попытался сравнить производительность приложения, разместив его на серверах Apache и Nginx.
- Версия Nginx - 1.0.15;
- Версия Apache - 2.2.15;
- версия php - 5.4.38;
В Apache я использовал Apache + mod-php, а в Nginx я использовал Nginx + php-fpm для этого сравнения. Как объяснялось в большинстве учебных пособий, я настроил количество работников Nginx равным количеству ядер в моем процессоре. Я использовал jmeter для проведения стресс-тестирования, и ниже приведены графики, которые я мог из него сгенерировать.
На всех этих графиках ось X - это каждый отправленный мной запрос, а ось Y - миллисекунды для получения ответа на каждый запрос.
Доступ к странице входа
Отправить страницу входа
Доступ к домашней странице
Я смог выполнить тестирование до 100 одновременно работающих пользователей, вошедших в систему в течение 1 секунды, потому что после этого он начал отбрасывать запросы в обеих настройках сервера.
В Nginx было небольшое улучшение производительности по сравнению с Apache, но это не было существенным отличием, когда стоило изменить всю архитектуру моего сервера с Apache на Nginx. И когда я наблюдаю за использованием ресурсов сервера, я не вижу большой разницы между Nginx и Apache.
Когда я прошел другие сравнения, которые сделали люди, я обнаружил, что они утверждают, что Nginx намного быстрее в параллельных доступах, таких как следующие графики.
http://www.eschrade.com/wp-content/uploads/2014/01/event-mpm-nginx.gif
Но я не смог наблюдать каких-либо существенных различий в производительности Nginx по сравнению с Apache даже при 100 одновременных доступах в течение 1 секунды.
Ниже приведены мои вопросы.
- Предполагается ли, что Nginx + php-fpm выполняет серверные операции намного быстрее, чем Apache + mod-php из-за эффективного использования памяти и других ресурсов?
- Рекомендуется ли только Nginx для статической защиты сервера, а не для сайтов с интенсивной работой сервера?
- Есть ли лучший способ настройки Nginx для повышения производительности?