Quelle est la différence entre fastcgi et fpm?

117

J'essaye d'installer php avec fpm sur macports. J'ai lu quelque part que fpm signifie gestionnaire de processus FastCGI. Cela signifie-t-il que fastcgi et fpm sont identiques? S'ils sont identiques, alors pourquoi avons-nous deux variantes de macports différentes pour php, à savoir "php5 + fastcgi" et "php5 + fpm"

Chakravarthie profonde
la source

Réponses:

94

FPM est un gestionnaire de processus pour gérer le FastCGI SAPI (Server API) en PHP.

Fondamentalement, cela remplace le besoin de quelque chose comme SpawnFCGI . Il engendre les enfants FastCGI de manière adaptative (ce qui signifie en lancer plus si la charge actuelle l'exige).

Sinon, il n'y a pas beaucoup de différence de fonctionnement entre celui-ci et FastCGI (le pipeline de requêtes du début à la fin est le même). C'est juste là pour faciliter sa mise en œuvre.

ircmaxell
la source
8
L'un des principaux avantages de php-fpm est qu'un cache APC peut être partagé entre plusieurs processus. Avec fcgid, le cache APC est par processus. L'utilisation de fpm peut entraîner d'importantes économies de mémoire, ce qui vous permet d'utiliser cette mémoire enregistrée pour générer plus de processus et servir plus de trafic.
cam8001
25
@ cam8001: ce n'est absolument pas vrai. Vous pouvez définir SpawnFCGIle nombre de processus à générer et le nombre d'enfants PHP par processus. Donc engendrer 1 processus PHP, avec 100 enfants, c'est la même chose que d'utiliser FPM avec 100 enfants ... Cependant, l'inverse est vrai. Si FPM est tué (segfault, peu importe), tout votre travailleur meurt. Dans SpawnFCGI, si l'un des processus meurt, le reste peut rester en vie ... Il n'est donc pas clair que l'un est meilleur que l'autre. Différentes approches. FPM est recommandé non pas pour des raisons techniques, mais parce qu'il est maintenu le long du noyau (en fait) ...
ircmaxell
57

Ce qu'Anthony dit est tout à fait correct, mais j'aimerais ajouter que votre expérience montrera probablement de bien meilleures performances et efficacité (en raison non pas de fpm-vs- fcgimais plus de la mise en œuvre de votre httpd).

Par exemple, j'avais une machine quadricœur en marche lighttpd+ qui fcgibourdonnait bien. Je suis passé à une machine à 16 cœurs pour faire face à la croissance, et deux choses ont explosé: l'utilisation de la RAM et les défauts de segmentation. Je me suis retrouvé à redémarrer lighttpdtoutes les 30 minutes pour maintenir le site Web en place.

Je suis passé à php-fpm et nginx, et l'utilisation de la RAM est passée de> 20 Go à 2 Go. Segfaults a également disparu. Après avoir fait quelques recherches, j'ai appris que lighttpd et fcgi ne s'entendent pas bien sur les machines multicœurs sous charge, et ont également des problèmes de fuite de mémoire dans certains cas.

Est-ce parce php-fpmque c'est mieux que fcgi? Pas entièrement, mais la façon dont vous vous connectez php-fpmsemble être beaucoup plus efficace que la façon dont vous servez via fcgi.

spacemonkey
la source
8
Y a-t-il de tels problèmes jusqu'à environ (avril 2017)?
Lord Loh.
1
Toute mise à jour sur la version de lighttpd et fpm que vous avez utilisée est recommandée, toute mise à jour des problèmes mentionnés apparaissant toujours (juin 2018) est également utile pour la communauté.
Ima
1

Exécuter PHP en tant que CGI signifie que vous indiquez essentiellement à votre serveur Web l'emplacement du fichier exécutable PHP, et le serveur exécute cet exécutable

tandis que

PHP FastCGI Process Manager (PHP-FPM) est un autre démon FastCGI pour PHP qui permet à un site Web de gérer des charges épuisantes. PHP-FPM maintient des pools (travailleurs capables de répondre aux requêtes PHP) pour accomplir cela. PHP-FPM est plus rapide que les méthodes traditionnelles basées sur CGI, telles que SUPHP, pour les environnements PHP multi-utilisateurs

Cependant, il y a des avantages et des inconvénients aux deux et il faut choisir selon leur cas d'utilisation spécifique.

J'ai trouvé des informations sur ce lien pour fastcgi vs fpm très utiles pour choisir le gestionnaire à utiliser dans mon scénario.

pulkit8
la source