Qual'è la differenza tra fastcgi e fpm?


117

Sto cercando di installare php con fpm su macports. Ho letto da qualche parte che fpm significa gestore dei processi FastCGI. Significa che fastcgi e fpm sono uguali? Se sono uguali, allora perché abbiamo due diverse varianti di macports per php, ovvero "php5 + fastcgi" e "php5 + fpm"

Risposte:


94

FPM è un process manager per gestire FastCGI SAPI (Server API) in PHP.

Fondamentalmente, sostituisce la necessità di qualcosa come SpawnFCGI . Genera i figli FastCGI in modo adattivo (ovvero se ne lancia di più se il carico corrente lo richiede).

Altrimenti, non c'è molta differenza operativa tra questo e FastCGI (la pipeline della richiesta dall'inizio alla fine è la stessa). Serve solo per semplificare l'implementazione.


8
Un vantaggio chiave di php-fpm è che una cache APC può essere condivisa tra più processi. Con fcgid, la cache APC è per processo. L'utilizzo di fpm può comportare un notevole risparmio di memoria, che consente di utilizzare la memoria salvata per generare più processi e servire più traffico.
cam8001

25
@ cam8001: non è completamente vero. Puoi impostare il SpawnFCGInumero di processi da generare e il numero di figli PHP per processo. Quindi generare 1 processo PHP, con 100 bambini è la stessa cosa che usare FPM con 100 bambini ... Tuttavia, è vero il contrario. Se FPM viene ucciso (segfault, qualunque cosa), tutto il tuo lavoratore muore. In SpawnFCGI, se uno dei processi muore, il resto può rimanere in vita ... Quindi non è chiaro che l'uno è meglio dell'altro. Approcci diversi. FPM è consigliato non per ragioni tecniche, ma perché è mantenuto lungo il core laterale (in realtà) ...
ircmaxell

56

Quello che dice Anthony è assolutamente corretto, ma vorrei aggiungere che la tua esperienza probabilmente mostrerà prestazioni ed efficienza molto migliori (non dovute a fpm-vs- fcgima più all'implementazione del tuo httpd).

Ad esempio, avevo una macchina quad-core che funzionava lighttpd+ fcgicanticchiava bene. Sono passato a una macchina a 16 core per far fronte alla crescita e due cose sono esplose: utilizzo della RAM e segfault. Mi sono ritrovato a riavviare lighttpdogni 30 minuti per mantenere attivo il sito web.

Sono passato a php-fpm e nginx e l'utilizzo della RAM è sceso da> 20 GB a 2 GB. Anche i segfaults sono scomparsi. Dopo aver fatto qualche ricerca, ho imparato che lighttpd e fcgi non vanno d'accordo su macchine multi-core sotto carico e hanno anche problemi di perdita di memoria in alcuni casi.

Ciò è dovuto al php-fpmfatto di essere migliore di fcgi? Non del tutto, ma il modo in cui ti agganci php-fpmsembra essere molto più efficiente di come servi fcgi.


8
Questi problemi sono fino a circa (aprile 2017)?
Lord Loh.

1
Si consiglia qualsiasi aggiornamento sulla versione di lighttpd e fpm che hai utilizzato, qualsiasi aggiornamento dei problemi menzionati che ancora compaiono (giugno 2018) è utile anche per la comunità.
Ima

0

Eseguire PHP come CGI significa che in pratica comunichi al tuo server web la posizione del file eseguibile PHP e il server esegue quell'eseguibile

mentre

PHP FastCGI Process Manager (PHP-FPM) è un demone FastCGI alternativo per PHP che consente a un sito Web di gestire carichi pesanti. PHP-FPM mantiene i pool (worker che possono rispondere alle richieste PHP) per ottenere questo risultato. PHP-FPM è più veloce dei metodi tradizionali basati su CGI, come SUPHP, per ambienti PHP multiutente

Tuttavia, ci sono pro e contro per entrambi e si dovrebbe scegliere in base al loro caso d'uso specifico.

Ho trovato informazioni su questo collegamento per fastcgi vs fpm molto utili nella scelta del gestore da utilizzare nel mio scenario.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.