В чем разница между fastcgi и fpm?

117

Я пытаюсь установить php с fpm на macports. Я где-то читал, что fpm означает диспетчер процессов FastCGI. Означает ли это, что fastcgi и fpm одинаковы? Если они одинаковы, то почему у нас есть два разных варианта macports для php, а именно «php5 + fastcgi» и «php5 + fpm»?

Дипан Чакраварти
источник

Ответы:

94

FPM - это диспетчер процессов для управления FastCGI SAPI (Server API) в PHP.

По сути, он заменяет необходимость в чем-то вроде SpawnFCGI . Он адаптивно порождает потомков FastCGI (то есть запускает больше, если этого требует текущая нагрузка).

В противном случае между ним и FastCGI не так много разницы в работе (конвейер запросов от начала до конца одинаков). Это просто для облегчения реализации.

ircmaxell
источник
8
Ключевым преимуществом php-fpm является то, что один кеш APC может использоваться несколькими процессами. При использовании fcgid кеш APC зависит от процесса. Использование fpm может привести к большой экономии памяти, что позволит вам использовать эту сохраненную память для запуска большего количества процессов и обслуживания большего трафика.
cam8001
25
@ cam8001: это совсем не так. Вы можете указать, SpawnFCGIсколько процессов запускать и количество дочерних PHP для каждого процесса. Таким образом, создание 1 процесса PHP со 100 дочерними элементами - это то же самое, что использование FPM со 100 дочерними элементами ... Однако верно и обратное. Если FPM будет убит (segfault, что угодно), весь ваш воркер умрет. В SpawnFCGI, если один из процессов умирает, остальные могут остаться в живых ... Так что неясно, что один лучше другого. Разные подходы. FPM рекомендуется не по техническим причинам, а потому, что он поддерживается вдоль бокового ядра (в нем фактически) ...
ircmaxell
57

То, что говорит Энтони, абсолютно правильно, но я хотел бы добавить, что ваш опыт, вероятно, покажет намного лучшую производительность и эффективность (не из-за fpm-vs-, fcgiа больше из-за реализации вашего httpd).

Например, у меня была четырехъядерная машина, которая прекрасно работала lighttpdи fcgiжужжала. Я перешел на 16-ядерную машину, чтобы справиться с ростом, и две вещи взорвались: использование ОЗУ и сбои. Я обнаружил, что перезагружаюсь lighttpdкаждые 30 минут, чтобы сайт работал.

Я переключился на php-fpm и nginx, и использование ОЗУ упало с> 20 ГБ до 2 ГБ. Также исчезли ошибки сегментации. Проведя небольшое исследование, я узнал, что lighttpd и fcgi плохо уживаются на многоядерных машинах под нагрузкой, а также в некоторых случаях имеют проблемы с утечкой памяти.

Это из-за того, php-fpmчто лучше fcgi? Не совсем, но то, как вы подключаетесь, php-fpmкажется намного более эффективным, чем то, как вы обслуживаете через fcgi.

spacemonkey
источник
8
Ожидаются ли такие проблемы примерно до (апрель 2017 г.)?
Лорд Ло.
1
Любые обновления о версии lighttpd и fpm, которые вы использовали, рекомендуется, любые обновления упомянутых проблем, которые все еще появляются (июнь 2018 г.), также полезны для сообщества.
Ima
1

Запуск PHP как CGI означает, что вы в основном сообщаете своему веб-серверу расположение исполняемого файла PHP, и сервер запускает этот исполняемый файл.

в то время как

PHP FastCGI Process Manager (PHP-FPM) - альтернативный демон FastCGI для PHP, который позволяет веб-сайту справляться с большими нагрузками. PHP-FPM поддерживает пулы (рабочие, которые могут отвечать на запросы PHP) для достижения этой цели. PHP-FPM быстрее традиционных методов на основе CGI, таких как SUPHP, для многопользовательских сред PHP.

Однако у обоих есть свои плюсы и минусы, и их следует выбирать в соответствии с их конкретным вариантом использования.

Я нашел информацию по этой ссылке для fastcgi vs fpm весьма полезной при выборе обработчика для использования в моем сценарии.

pulkit8
источник