Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

Пропоную вашій увазі свої дослідження з питання продуктивності php (а точніше, кращий варіант конкретно для Бітрікс) в різних режимах запуску. Метою не було отримати якісь цифри щодо можливої ​​відвідуваності, а саме порівняти різні варіанти при інших рівних умовах.

GGI - найстаріший спосіб запуску скриптів (в тому числі і php). У цьому випадку на кожен хіт запускається інтерпретатор php як самостійний додаток і йому віддається скрипт для запуску. Скрипт повинен повернути заголовки, потім код html сторінки. Після цього інтерпретатор припиняє свою роботу.

Модуль Apache - в цьому випадку php постійно знаходиться в пам'яті веб сервера, не витрачається час на запуск інтерпретатора.

FastCGI - еволюція CGI інтерфейсу, в цьому випадку php запускається окремим процесом, але після виконання скрипта не припиняє свою роботу.

Чи справді він такий швидкий, цей FastCGI? Перевіримо!

На одній машині встановлений Apache 2.2 + MySQL 5, а також демонстраційний сайт «Бітрікс Бізнес». Кешування компонентів бітрікс відключив щоб випадкове пересозданіе кеша не вплинуло на результати.
Тут я навмисне не акцентую увагу на апаратній частині і конфігурації тому повторюся, завдання не отримати абсолютні величини, а порівняти різні режими роботи php.
Інша машина по локальній мережі створює імітацію навантаження на сервер. Для цього я використовував JMeter.
Він написаний на Java і сам створює пристойну навантаження. тому для чистоти експерименту мені довелося його «відокремити» від сервера.

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

План тестування складався з 6 сторінок, по 2 паралельних запиту. Постарався вибрати найбільш динамічно завантажені сторінки, для зручності дав їм умовні назви по контенту. Не слід асоціювати швидкість віддачі сторінок з однойменними модулями.
Завантажувався тільки динамічний код сторінок без статики, відповідно nginx не використав (подробиці в навчальному курсі).

Отже, все готово, приступаємо до тестування.

Тестування без акселератора php

CGI
Вийшов наступний графік сумарних результатів по всіх сторінках:

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

Синій - середній час віддачі на кожному хіті в мс
Пурпурний - статистичне середнє
Червоний - відхилення від середнього
Зелений - швидкість віддачі сторінок

У підсумку маємо середній час 5,5 секунди на сторінку, швидкість віддачі сторінок - 105 в хвилину.
Зверніть увагу, тут час на сторінку - це час, який реально чекає користувач, а не середнє по всім паралельним запитам (у другому випадку ми отримаємо 105/60 = 1,75 сек на сторінку).

Окремо по сторінках вийшла така діаграма (середній час відповіді):

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

Тут вже результат трохи краще - 122 сторінки в хвилину. І відповідно, діаграма:

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

Зовсім непоганий результат в порівнянні з традиційним CGI: 120 сторінок в хвилину, трохи повільніше, ніж модуль.
діаграма:

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

Але як зміниться картина якщо встановити акселератор php?

Результати тестування з встановленим EAccelerator

CGI - EA
Відомо, що акселератор не працює в CGI режимі тому йому потрібен доступ до загальної пам'яті з усіх процесів. Але в phpinfo є інформація про те, що eaccelerator завантажений і створюється відчуття, що він працює. Давайте перевіримо.

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

108 сторінок в хвилину. Це практично той же результат що і був. діаграма:

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

309 сторінок в хвилину, середній час очікування відповіді 1 секунда. Я б сказав, це вже щось. Ну і відповідно по сторінках:

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

294 сторінки в хвилину, тобто приблизно на 5% повільніше, ніж модуль. Але все одно не йде ні в яке порівняння з традиційним і неквапливим CGI режимом.

Mod_php vs cgi vs fastcgi - або - як вибирати хостера, Поснов андрей (бітрікс, ios програміст)

В середньому по сторінках також простежується невелике відставання від модуля.

А чи є інші проблеми?

Хостери часто використовують CGI тому в цьому випадку набагато зручніше управляти [читати: різати] ресурсами користувачів. І в підсумку отримуємо «незрозумілі помилки».

Хочу згадати ще про один важливий момент: сьогодні php йде одним файлом для CGI і FastCGI режимів, в phpinfo бачимо:

Server API: CGI / FastCGI

А значить слабо представляється можливим на призначеному для користувача рівні з'ясувати, як насправді працює php. З огляду на мізерну документацію по налаштуванню FastCGI дуже може бути, що ви будете введені в оману.

Висновки або «Як же вибрати хостера?»

Якщо ви простий користувач, ймовірно, прокрутили весь технічний вантаж щоб відразу знайти відповідь на питання.

  • Вибирайте CGI режим якщо ваш сайт присвячений східній філософії і час завантаження сторінок відвідувачів сайту не хвилює.
  • FastCGI дає хороші результати по продуктивності, але йому притаманні проблеми CGI режиму, а це постійні помилки сервера «500».
  • В інших випадках рекомендую використовувати php як модуль Apache. Особливо якщо мова йде про виділений сервер або VPS.
  • Обов'язково звертайте увагу на акселератор php. На жаль, багато хостери не приділяють цьому питанню належної уваги.
  • І ось ще важливий момент: чи не вибирайте в якості хостера сусіда по сходовій клітці, часом елементарне невміння налаштувати систему приносить більше проблем, ніж все інше. Вибирайте професіоналів.
  • Рекомендуємо перед довготривалої покупкою хостингу тестувати його нашим скриптом. Ми періодично оновлюємо скрипт з урахуванням нових проблем.

Дивіться самі і робіть висновки. На жаль, користувач починає розуміти важливість «правильного» хостингу тільки після того як зіткнувся з низкою проблем.