Про FastCGI и PHP-FPM

FastCGI (Fast Common Gateway Interface) — это протокол, предназначенный для увеличения производительности CGI (Common Gateway Interface) за счёт переиспользования процессов при обработке веб-запросов. FastCGI устраняет некоторые из основных недостатков традиционного CGI, такие как низкая производительность из-за необходимости создавать новый процесс для каждого запроса.

FastCGI разработан для предоставления более эффективного и масштабируемого интерфейса между веб-сервером и внешними приложениями (на любом ЯП), которые генерируют контент веб-страниц.

Как работает FastCGI

Как работает FastCGI
Изображение взято с https://www.linkedin.com/pulse/decoding-php-request-cycle-nginx-php-fpm-workers-unveiled-shah/

FastCGI как правило работает в режиме демона, что означает, что процессы запускаются один раз и затем остаются в памяти, готовые обрабатывать приходящие запросы. Этот подход значительно уменьшает нагрузку на систему, так как избавляет от необходимости многократно запускать и инициализировать интерпретатор для каждого отдельного запроса. Так-же можно настроить масштабирование.

Демон — это фоновый процесс, который запускается в фоновом режиме и ожидает выполнения определённых задач или обрабатывает повторяющиеся сервисные запросы.

PHP-FPM

PHP-FPM (PHP FastCGI Process Manager) — это реализация менеджера процессов для PHP, которая использует протокол FastCGI.

Архитектура PHP-FPM

Архитектура PHP-FPM

Архитектура PHP-FPM организована с помощью Master Process (Process Manager, PM) и Worker Processes и они играют разные роли.

Master Process (Process Manager)

  • Master Process является основным процессом, который запускается при старте PHP-FPM.
  • Он контролирует создание, уничтожение и мониторинг Worker Prcesses в соответствии с конфигурацией (например, static, dynamic, ondemand).
  • Этот процесс не обрабатывает непосредственно запросы от веб-сервера, а отвечает за управление рабочими процессами .

Worker Processes

  • Worker Processes — это дочерние процессы, создаваемые и управляемые Master Process.
  • Каждый рабочий процесс включает в себя интерпретатор PHP и фактически обрабатывает PHP-скрипты в ответ на запросы от веб-сервера.
  • Эти процессы напрямую получают запрос от сервера минуя Master Process.
  • В рабочем процессе PHP-скрипты компилируются и выполняются, а результаты возвращаются веб-серверу через FastCGI интерфейс.

Следует помнить, что при работе PHP в режиме FastCGI в памяти висит сам php интерпретатор, а не какой-то конкретный php-скрипт.

Реальный пример работы PHP-FPM

Представим, что в наше приложение одновременно приходит 50 клиентов. Сначала они обращаются в наш NGINX, который по факту пробрасывает запросы сквозь себя на PHP-FPM (за исключением запросов за статическими ресурсами/файлами), а дальше PHP-FPM пытается обработать все запросы с помощью своих процессов (воркеров).

Допустим у нас запущено 5 воркеров. В таком случае во время одновременного запроса первые 5 клиентов будут обрабатываться сразу, а остальные 45 становятся в очередь и ждут, когда первые 5 закончат обработку. PHP-FPM позволяет задавать настройки в зависимости от ваших потребностей, будь то динамическое увеличение воркеров для того чтобы клиенты не ждали в очереди или экономия ресурсов с целью ускорения обработки запросов со статическим количеством воркеров.

Полезные ссылки


Андрей Писаревский

Автор: Андрей Писаревский 

PHP | WordPress Team Lead. Имею коммерческий опыт в программировании с 2010 года и экспертизу в полном цикле веб разработки: Frontend, Backend, QA, Server administration, управление крупными командами и Enterprise проектами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *