Jaka jest różnica między fastcgi i fpm?

117

Próbuję zainstalować php z fpm na macports. Czytałem gdzieś, że fpm oznacza menedżera procesów FastCGI. Czy to oznacza, że ​​fastcgi i fpm są takie same? Jeśli są takie same, to dlaczego mamy dwa różne warianty macportów dla php, a mianowicie „php5 + fastcgi” i „php5 + fpm”

Deepan Chakravarthy
źródło

Odpowiedzi:

94

FPM jest menedżerem procesów zarządzającym FastCGI SAPI (Server API) w PHP.

Zasadniczo zastępuje potrzebę czegoś takiego jak SpawnFCGI . Odradza dzieci FastCGI adaptacyjnie (co oznacza uruchamianie większej liczby, jeśli wymaga tego bieżące obciążenie).

W przeciwnym razie nie ma dużej różnicy operacyjnej między nim a FastCGI (potok żądań od początku żądania do końca jest taki sam). Jest po to, aby ułatwić wdrażanie.

ircmaxell
źródło
8
Kluczową zaletą php-fpm jest to, że jedna pamięć podręczna APC może być współużytkowana przez wiele procesów. W przypadku fcgid pamięć podręczna APC jest na proces. Używanie fpm może skutkować dużymi oszczędnościami pamięci, co pozwala na użycie tej zapisanej pamięci do tworzenia większej liczby procesów i obsługi większego ruchu.
cam8001
25
@ cam8001: to całkowicie nieprawda. Możesz ustawić SpawnFCGIliczbę odradzanych procesów i liczbę dzieci PHP na proces. Tak więc zrobienie 1 procesu PHP ze 100 dziećmi jest tym samym, co użycie FPM ze 100 dziećmi ... Jednak jest odwrotnie. Jeśli FPM zostanie zabity (segfault, cokolwiek), cały twój pracownik zginie. W SpawnFCGI, jeśli jeden z procesów umrze, reszta może pozostać żywa ... Więc nie jest jasne, że jeden jest lepszy od drugiego. Różne podejścia. FPM jest zalecane nie ze względów technicznych, ale dlatego, że jest utrzymywane wzdłuż bocznego rdzenia (w rzeczywistości) ...
ircmaxell
56

To, co mówi Anthony, jest absolutnie poprawne, ale chciałbym dodać, że twoje doświadczenie prawdopodobnie pokaże dużo lepszą wydajność i efektywność (nie dzięki fpm-vs-, fcgiale bardziej dzięki implementacji twojego httpd).

Na przykład miałem czterordzeniową maszynę pracującą lighttpdi fcgiładnie pracującą . Zaktualizowałem komputer do 16-rdzeniowej maszyny, aby poradzić sobie z rozwojem, i eksplodowały dwie rzeczy: użycie pamięci RAM i segfault. Okazało się, że uruchamiałem się ponownie lighttpdco 30 minut, aby utrzymać stronę internetową.

Przerzuciłem się na php-fpm i nginx, a użycie pamięci RAM spadło z> 20 GB do 2 GB. Segfaulty również zniknęły. Po przeprowadzeniu pewnych badań dowiedziałem się, że lighttpd i fcgi nie radzą sobie dobrze na maszynach wielordzeniowych pod obciążeniem, a także w niektórych przypadkach występują problemy z wyciekiem pamięci.

Czy to dlatego, że php-fpmjest lepszy niż fcgi? Nie do końca, ale sposób , w jaki się podłączasz, php-fpmwydaje się być o wiele bardziej skuteczny niż sposób serwowania przez fcgi.

spacemonkey
źródło
8
Czy takie problemy są do około (kwiecień 2017)?
Lord Loh.
1
Wszelkie aktualizacje dotyczące używanej wersji lighttpd i fpm są zalecane, wszelkie aktualizacje wspomnianych problemów, które wciąż się pojawiają (czerwiec 2018), są również pomocne dla społeczności.
Ima
0

Uruchomienie PHP jako CGI oznacza, że ​​zasadniczo przekazujesz serwerowi WWW lokalizację pliku wykonywalnego PHP, a serwer uruchamia ten plik wykonywalny

natomiast

PHP FastCGI Process Manager (PHP-FPM) to alternatywny demon FastCGI dla PHP, który umożliwia witrynie obsługę uciążliwych obciążeń. PHP-FPM utrzymuje pule (pracownicy, którzy mogą odpowiadać na żądania PHP), aby to osiągnąć. PHP-FPM jest szybsze niż tradycyjne metody oparte na CGI, takie jak SUPHP, w środowiskach PHP z wieloma użytkownikami

Istnieją jednak wady i zalety obu i należy wybierać zgodnie z ich konkretnym przypadkiem użycia.

Znalazłem informacje na ten link dla fastcgi vs fpm bardzo pomocne w wyborze programu obsługi do użycia w moim scenariuszu.

pulkit8
źródło