Qual é a diferença entre fastcgi e fpm?

117

Estou tentando instalar o php com o fpm em macports. Eu li em algum lugar que fpm significa gerenciador de processos FastCGI. Isso significa que fastcgi e fpm são iguais? Se eles são iguais, então por que temos duas variantes de macports diferentes para php, a saber "php5 + fastcgi" e "php5 + fpm"

Deepan Chakravarthy
fonte

Respostas:

94

FPM é um gerenciador de processos para gerenciar o FastCGI SAPI (Server API) em PHP.

Basicamente, ele substitui a necessidade de algo como SpawnFCGI . Ele gera os filhos FastCGI de forma adaptativa (significando iniciar mais se a carga atual exigir).

Caso contrário, não há muita diferença operacional entre ele e o FastCGI (o pipeline de solicitação do início ao fim é o mesmo). Ele está lá apenas para facilitar a implementação.

ircmaxell
fonte
8
Uma vantagem chave do php-fpm é que um cache APC pode ser compartilhado por vários processos. Com o fcgid, o cache APC é por processo. Usar o fpm pode resultar em grande economia de memória, o que permite que você use essa memória salva para gerar mais processos e atender a mais tráfego.
cam8001
25
@ cam8001: isso não é totalmente verdade. Você pode definir em SpawnFCGIquantos processos gerar e o número de filhos do PHP por processo. Portanto, gerar 1 processo PHP com 100 filhos é a mesma coisa que usar FPM com 100 filhos ... Porém, o inverso é verdadeiro. Se o FPM for morto (segfault, qualquer que seja), todo o seu trabalhador morre. Em SpawnFCGI, se um dos processos morre, o resto pode permanecer vivo ... Portanto, não é claro que um é melhor que o outro. Abordagens diferentes. O FPM é recomendado não por razões técnicas, mas porque é mantido ao longo do núcleo lateral (nele, na verdade) ...
ircmaxell
56

O que Anthony diz está absolutamente correto, mas eu gostaria de acrescentar que sua experiência provavelmente mostrará um desempenho e eficiência muito melhores (devido não ao fpm-vs-, fcgimas mais à implementação do seu httpd).

Por exemplo, eu tinha uma máquina quad-core funcionando lighttpd+ fcgizumbindo muito bem. Fiz upgrade para uma máquina de 16 núcleos para lidar com o crescimento e duas coisas explodiram: uso de RAM e falhas de segurança. Eu comecei a reiniciar a lighttpdcada 30 minutos para manter o site ativo.

Mudei para php-fpm e nginx, e o uso de RAM caiu de> 20 GB para 2 GB. Segfaults também desapareceram. Depois de fazer algumas pesquisas, aprendi que lighttpd e fcgi não se dão bem em máquinas com vários núcleos sob carga e também têm problemas de vazamento de memória em certos casos.

Isso é devido a php-fpmser melhor do que fcgi? Não inteiramente, mas como você php-fpmse conecta parece ser muito mais eficiente do que como você serve via fcgi.

chave espacial
fonte
8
Essas questões ainda existem (abril de 2017)?
Lorde Loh.
1
Quaisquer atualizações sobre a versão do lighttpd e fpm que você usou são recomendadas; quaisquer atualizações dos problemas mencionados ainda aparecendo (junho de 2018) também são úteis para a comunidade.
Ima de
0

Executar o PHP como CGI significa que você basicamente informa ao seu servidor web a localização do arquivo executável do PHP, e o servidor executa esse executável

enquanto que

O PHP FastCGI Process Manager (PHP-FPM) é um daemon FastCGI alternativo para PHP que permite a um site lidar com cargas extenuantes. O PHP-FPM mantém pools (workers que podem responder às solicitações do PHP) para fazer isso. PHP-FPM é mais rápido do que os métodos tradicionais baseados em CGI, como SUPHP, para ambientes PHP multiusuário

No entanto, há prós e contras em ambos e deve-se escolher de acordo com seu caso de uso específico.

Achei informações neste link para fastcgi vs fpm bastante úteis na escolha de qual manipulador usar em meu cenário.

pulkit8
fonte