¿Cuál es la diferencia entre fastcgi y fpm?

117

Estoy intentando instalar php con fpm en macports. Leí en alguna parte que fpm significa administrador de procesos FastCGI. ¿Eso significa que fastcgi y fpm son iguales? Si son iguales, entonces ¿por qué tenemos dos variantes de macports diferentes para php, a saber, "php5 + fastcgi" y "php5 + fpm"?

Deepan Chakravarthy
fuente

Respuestas:

94

FPM es un administrador de procesos para administrar FastCGI SAPI (Server API) en PHP.

Básicamente, reemplaza la necesidad de algo como SpawnFCGI . Genera los niños FastCGI de forma adaptativa (es decir, lanzar más si la carga actual lo requiere).

De lo contrario, no hay mucha diferencia operativa entre él y FastCGI (la canalización de solicitudes desde el inicio de la solicitud hasta el final es la misma). Está ahí para facilitar su implementación.

ircmaxell
fuente
8
Una ventaja clave de php-fpm es que una caché de APC se puede compartir entre múltiples procesos. Con fcgid, la caché de APC es por proceso. El uso de fpm puede generar grandes ahorros de memoria, lo que le permite usar esa memoria guardada para generar más procesos y brindar más tráfico.
cam8001
25
@ cam8001: eso es completamente falso. Puede establecer SpawnFCGIcuántos procesos generar y el número de hijos PHP por proceso. Entonces, generar 1 proceso PHP, con 100 niños es lo mismo que usar FPM con 100 niños ... Sin embargo, lo contrario es cierto. Si muere FPM (segfault, lo que sea), todo su trabajador muere. En SpawnFCGI, si uno de los procesos muere, el resto puede permanecer vivo ... Así que no es claro que uno sea mejor que el otro. Diferentes aproximaciones. Se recomienda FPM no por razones técnicas, sino porque se mantiene a lo largo del núcleo lateral (en realidad) ...
ircmaxell
56

Lo que Anthony dice es absolutamente correcto, pero me gustaría agregar que su experiencia probablemente mostrará un rendimiento y eficiencia mucho mejores (debido no a fpm-vs- fcgisino más a la implementación de su httpd).

Por ejemplo, tenía una máquina de cuatro núcleos funcionando lighttpd+ fcgitarareando muy bien. Actualicé a una máquina de 16 núcleos para hacer frente al crecimiento, y dos cosas explotaron: uso de RAM y segfaults. Me encontré reiniciando lighttpdcada 30 minutos para mantener el sitio web activo.

Cambié a php-fpm y nginx, y el uso de RAM se redujo de> 20 GB a 2 GB. Segfaults también desapareció. Después de investigar un poco, aprendí que lighttpd y fcgi no se llevan bien en máquinas de múltiples núcleos bajo carga, y también tienen problemas de pérdida de memoria en ciertos casos.

¿Esto se debe a php-fpmser mejor que fcgi? No del todo, pero la forma en que te conectas php-fpmparece ser mucho más eficiente que la forma en que sirves fcgi.

mono espacial
fuente
8
¿Son estos problemas hasta alrededor de (abril de 2017)?
Lord Loh.
1
Se recomienda cualquier actualización sobre la versión de lighttpd y fpm que usó; cualquier actualización de los problemas mencionados que aún aparezcan (junio de 2018) también es útil para la comunidad.
Ima
0

Ejecutar PHP como CGI significa que básicamente le dice a su servidor web la ubicación del archivo ejecutable PHP, y el servidor ejecuta ese ejecutable

mientras

PHP FastCGI Process Manager (PHP-FPM) es un demonio FastCGI alternativo para PHP que permite que un sitio web maneje cargas extenuantes. PHP-FPM mantiene grupos (trabajadores que pueden responder a las solicitudes de PHP) para lograr esto. PHP-FPM es más rápido que los métodos tradicionales basados ​​en CGI, como SUPHP, para entornos PHP multiusuario

Sin embargo, existen ventajas y desventajas para ambos y uno debe elegir según su caso de uso específico.

Encontré información en este enlace para fastcgi vs fpm bastante útil para elegir qué controlador usar en mi escenario.

pulkit8
fuente