PHP, на сегодняшний день, это одна из самых популярных платформ для создания Web приложений. Нет смысла в очередной раз упоминать о многочисленных монстрах современного интернет, основой которых служит PHP.
PHP — достаточно производительная платформа (если сравнивать с альтернативными решениями, хотя все очень зависит от реализации), к тому же является масштабируемой (опять же, если реализация не хромает). Вопрос
В этой статье мы рассмотрим общие практики и советы при построении нагруженных систем на основе PHP.
Связка с Web сервером
Существует несколько способов связать PHP с Web сервером:
CGI
CGI — стандартный протокол для запуска приложений в связке с Web сервером. Суть его заключается в следующем:
- Запрос приходит к Web серверу
- Сервер запускает php-cgi
- Исполняется основное приложение и генерируется HTTP ответ
- Ответ передается Web серверу и php-cgi процесс уничтожается
Этот подход весьма ресурсоемкий, т.к. приходится создавать процессы php-cgi при каждом запросе.
FastCGI
FastCGI — обертка для CGI, которая сохраняет все его возможности. Отличием от CGI является более экономное использование ресурсов и, следовательно, выигрышь в
SAPI
Этот подход заключается в том, что PHP компилирается в модуль Web сервера и т.о., становится его частью. Этот подход является наиболее производительным, т.к. экономит ресурсы на отдельных процессах PHP. Минусом этого подхода является то, что не многие Web серверы поддерживают этот метод. Одним из них является Apache, который сам по себе является очень тяжеловесным решением.
Исходя из этого, наиболее оптимальным решением для крупных систем является использование протокола FastCGI. Это удобное, гибкое и производительное решение.
Прекомпилирование и оптимизация
PHP — это интерпретатор, поэтому при каждом запросе Ваше приложение постоянно интерпретируется и компилируется. Это может быть весьма ощутимым, когда Ваше приложение содержит много кода и подключаемых файлов.
Существует несколько технологических решений этой проблемы:
eAccelerator
Это одно из самых популярных решений, которое помимо хранения кеша компилированного кода еще и выполняет базовую
APC
Помимо кеширования промежуточного кода, APC предоставляет еще и функционал по доступу к разделяемой памяти (что является очень эффективным средством для кеширования).
Zend Platform
Это многофункциональное платное решение от Zend. Помимо кеширования кода и
Настройка PHP
Первое и самое главное — собирайте только те модули, которые действительно нужны для Вашего приложения.
Есть ряд стандартных параметров PHP о которых стоит упомянуть:
- memory_limit — не стоит устанавливать этот параметр слишком большим. Если Ваша страница съедает по 512 Мб памяти во время генерации, то Вам стоит задуматься об архитектурных изменениях. Значения в 32…64Мб должно быть достаточно.
- display_errors = Off и error_log = /var/log/php — это скорее обязательное требование для продуктивнрй среды, чем совет. Эти настройки отключают вывод ошибок на экран и собирают их в лог файл.
- upload_max_filesize и post_max_size — максимальный размер загружаемых файлов и POST запросов — удостоверьтесь, что эти параметры не крупнее, чем требуется для Вашего приложения. Если Вы не используете загрузку — выключите ее: file_uploads = Off
- zlib.output_compression = Off и zlib.output_compression_level = -1 — включите компрессию контента. На первый взгляд компрессия будет расходовать дополнительные ресурсы процессора, но она позволяет добиться существенно меньших размеров ответа (ощутимо для посетителя). К тому же, компрессия на бекендах позволяет экономить ресурсы фронтенд-серверов.
Я что-то забыл? Что я забыл?
Сканирование сети дало свои плоды ! Изолента, хорошие люди подсказали...
Стоит вспомнить фразу - "Видал, какую машину изобрели!" (Иван Васильевич) Внешние жесткие диски в екатеринбурге - умные люди кинули ссылку.
Комментариев нет:
Отправить комментарий