Пропоную вашій увазі свої дослідження з питання продуктивності php (а точніше, кращий варіант конкретно для Бітрікс) в різних режимах запуску. Метою не було отримати якісь цифри щодо можливої відвідуваності, а саме порівняти різні варіанти при інших рівних умовах.
GGI - найстаріший спосіб запуску скриптів (в тому числі і php). У цьому випадку на кожен хіт запускається інтерпретатор php як самостійний додаток і йому віддається скрипт для запуску. Скрипт повинен повернути заголовки, потім код html сторінки. Після цього інтерпретатор припиняє свою роботу.
Модуль Apache - в цьому випадку php постійно знаходиться в пам'яті веб сервера, не витрачається час на запуск інтерпретатора.
FastCGI - еволюція CGI інтерфейсу, в цьому випадку php запускається окремим процесом, але після виконання скрипта не припиняє свою роботу.
Чи справді він такий швидкий, цей FastCGI? Перевіримо!
На одній машині встановлений Apache 2.2 + MySQL 5, а також демонстраційний сайт «Бітрікс Бізнес». Кешування компонентів бітрікс відключив щоб випадкове пересозданіе кеша не вплинуло на результати.
Тут я навмисне не акцентую увагу на апаратній частині і конфігурації тому повторюся, завдання не отримати абсолютні величини, а порівняти різні режими роботи php.
Інша машина по локальній мережі створює імітацію навантаження на сервер. Для цього я використовував JMeter.
Він написаний на Java і сам створює пристойну навантаження. тому для чистоти експерименту мені довелося його «відокремити» від сервера.
План тестування складався з 6 сторінок, по 2 паралельних запиту. Постарався вибрати найбільш динамічно завантажені сторінки, для зручності дав їм умовні назви по контенту. Не слід асоціювати швидкість віддачі сторінок з однойменними модулями.
Завантажувався тільки динамічний код сторінок без статики, відповідно nginx не використав (подробиці в навчальному курсі).
Отже, все готово, приступаємо до тестування.
Тестування без акселератора php
CGI
Вийшов наступний графік сумарних результатів по всіх сторінках:
Синій - середній час віддачі на кожному хіті в мс
Пурпурний - статистичне середнє
Червоний - відхилення від середнього
Зелений - швидкість віддачі сторінок
У підсумку маємо середній час 5,5 секунди на сторінку, швидкість віддачі сторінок - 105 в хвилину.
Зверніть увагу, тут час на сторінку - це час, який реально чекає користувач, а не середнє по всім паралельним запитам (у другому випадку ми отримаємо 105/60 = 1,75 сек на сторінку).
Окремо по сторінках вийшла така діаграма (середній час відповіді):
Тут вже результат трохи краще - 122 сторінки в хвилину. І відповідно, діаграма:
Зовсім непоганий результат в порівнянні з традиційним CGI: 120 сторінок в хвилину, трохи повільніше, ніж модуль.
діаграма:
Але як зміниться картина якщо встановити акселератор php?
Результати тестування з встановленим EAccelerator
CGI - EA
Відомо, що акселератор не працює в CGI режимі тому йому потрібен доступ до загальної пам'яті з усіх процесів. Але в phpinfo є інформація про те, що eaccelerator завантажений і створюється відчуття, що він працює. Давайте перевіримо.
108 сторінок в хвилину. Це практично той же результат що і був. діаграма:
309 сторінок в хвилину, середній час очікування відповіді 1 секунда. Я б сказав, це вже щось. Ну і відповідно по сторінках:
294 сторінки в хвилину, тобто приблизно на 5% повільніше, ніж модуль. Але все одно не йде ні в яке порівняння з традиційним і неквапливим CGI режимом.
В середньому по сторінках також простежується невелике відставання від модуля.
А чи є інші проблеми?
Хостери часто використовують CGI тому в цьому випадку набагато зручніше управляти [читати: різати] ресурсами користувачів. І в підсумку отримуємо «незрозумілі помилки».
Хочу згадати ще про один важливий момент: сьогодні php йде одним файлом для CGI і FastCGI режимів, в phpinfo бачимо:
Server API: CGI / FastCGI
А значить слабо представляється можливим на призначеному для користувача рівні з'ясувати, як насправді працює php. З огляду на мізерну документацію по налаштуванню FastCGI дуже може бути, що ви будете введені в оману.
Висновки або «Як же вибрати хостера?»
Якщо ви простий користувач, ймовірно, прокрутили весь технічний вантаж щоб відразу знайти відповідь на питання.
- Вибирайте CGI режим якщо ваш сайт присвячений східній філософії і час завантаження сторінок відвідувачів сайту не хвилює.
- FastCGI дає хороші результати по продуктивності, але йому притаманні проблеми CGI режиму, а це постійні помилки сервера «500».
- В інших випадках рекомендую використовувати php як модуль Apache. Особливо якщо мова йде про виділений сервер або VPS.
- Обов'язково звертайте увагу на акселератор php. На жаль, багато хостери не приділяють цьому питанню належної уваги.
- І ось ще важливий момент: чи не вибирайте в якості хостера сусіда по сходовій клітці, часом елементарне невміння налаштувати систему приносить більше проблем, ніж все інше. Вибирайте професіоналів.
- Рекомендуємо перед довготривалої покупкою хостингу тестувати його нашим скриптом. Ми періодично оновлюємо скрипт з урахуванням нових проблем.
Дивіться самі і робіть висновки. На жаль, користувач починає розуміти важливість «правильного» хостингу тільки після того як зіткнувся з низкою проблем.