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"

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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.