Heim  >  Artikel  >  Backend-Entwicklung  >  Vergleichen Sie die Unterschiede zwischen CGI, FastCGI, PHP-CGI und PHP-FPM

Vergleichen Sie die Unterschiede zwischen CGI, FastCGI, PHP-CGI und PHP-FPM

巴扎黑
巴扎黑Original
2017-08-21 14:40:272210Durchsuche

CGI

Der vollständige Name von CGI ist „Common Gateway Interface“, ein Tool, mit dem der HTTP-Server mit Ihrem Programm oder dem anderer Maschinen „kommunizieren“ kann. Das Programm muss im Netzwerk ausgeführt werden Server.

CGI kann in jeder Sprache geschrieben werden, solange die Sprache über Standard-Eingabe-, Ausgabe- und Umgebungsvariablen verfügt. Wie PHP, Perl, TCL usw.

FastCGI

FastCGI ist wie ein langlebiges CGI. Es kann jederzeit ausgeführt werden. Solange es aktiviert ist, dauert es nicht jedes Mal, bis es gegabelt ist der am meisten kritisierte Fork-and-Execute-Modus von CGI). Es unterstützt auch verteiltes Rechnen, das heißt, FastCGI-Programme können auf anderen Hosts als dem Website-Server ausgeführt werden und Anfragen von anderen Website-Servern akzeptieren.

FastCGI ist eine sprachunabhängige, skalierbare offene CGI-Erweiterung. Ihr Hauptverhalten besteht darin, den CGI-Interpreterprozess im Speicher zu halten und so eine höhere Leistung zu erzielen. Wie wir alle wissen, ist das wiederholte Laden des CGI-Interpreters der Hauptgrund für eine geringe CGI-Leistung. Wenn der CGI-Interpreter im Speicher bleibt und die Planung des FastCGI-Prozessmanagers akzeptiert, kann er gute Leistung, Skalierbarkeit, Failover-Funktionen usw. bieten.

FastCGI-Funktionen

FastCGI ist sprachunabhängig.

FastCGI ist eine In-Process-Anwendung, die unabhängig vom Kern-Webserver ausgeführt wird und eine sicherere Umgebung als die API bietet. APIs verknüpfen den Code einer Anwendung mit dem Kern-Webserver, was bedeutet, dass eine Anwendung mit der falschen API andere Anwendungen oder den Kernserver beschädigen kann. Schädlicher API-Anwendungscode kann sogar die Schlüssel einer anderen Anwendung oder eines Kernservers stehlen.

FastCGI-Technologie unterstützt derzeit Sprachen: C/C++, Java, Perl, Tcl, Python, SmallTalk, Ruby usw. Verwandte Module sind auch auf gängigen Servern wie Apache, ISS, Lighttpd usw. verfügbar.

FastCGI ist nicht von der internen Architektur eines Webservers abhängig, sodass FastCGI auch dann stabil bleibt, wenn sich die Servertechnologie ändert.

So funktioniert FastCGI

Laden Sie den FastCGI-Prozessmanager (IIS ISAPI oder Apache-Modul), wenn der Webserver startet

Der FastCGI-Prozessmanager initialisiert sich selbst und startet mehrere CGIs. Der Interpreter Prozess (mehrere PHP-CGIs sind sichtbar) und wartet auf die Verbindung vom Webserver.

Wenn eine Client-Anfrage den Webserver erreicht, wählt der FastCGI-Prozessmanager einen CGI-Interpreter aus und stellt eine Verbindung zu ihm her. Der Webserver sendet CGI-Umgebungsvariablen und Standardeingaben an den FastCGI-Unterprozess php-cgi.

Nachdem der FastCGI-Unterprozess die Verarbeitung abgeschlossen hat, gibt er über dieselbe Verbindung Standardausgabe- und Fehlerinformationen an den Webserver zurück. Wenn der untergeordnete FastCGI-Prozess die Verbindung schließt, wird die Anfrage verarbeitet. Der untergeordnete FastCGI-Prozess wartet dann auf die nächste Verbindung vom FastCGI-Prozessmanager (der auf dem Webserver ausgeführt wird) und verarbeitet diese. Im CGI-Modus wird php-cgi an dieser Stelle beendet.

Im obigen Fall können Sie sich vorstellen, wie langsam CGI normalerweise ist. Jede Webanfrage an PHP muss php.ini erneut analysieren, alle Erweiterungen neu laden und alle Datenstrukturen neu initialisieren. Bei FastCGI geschieht dies alles nur einmal, nämlich beim Start des Prozesses. Ein zusätzlicher Bonus besteht darin, dass dauerhafte Datenbankverbindungen funktionieren.

Nachteile von FastCGI

Da es sich um einen Multiprozess handelt, verbraucht es mehr Serverspeicher als CGI-Multithreading. Der PHP-CGI-Interpreter verbraucht 7 bis 25 Megabyte Speicher pro Prozess Zahl 50 oder 100 ist eine große Speichermenge.

Der Nginx 0.8.46 + PHP 5.2.14 (FastCGI)-Server verfügt über 30.000 gleichzeitige Verbindungen. Die 10 geöffneten Nginx-Prozesse verbrauchen 150 MB Speicher (15 MB * 10 = 150 MB), und der geöffnete PHP-CGI-Prozess verbraucht 64 MB Bei 1280 MB Speicher (20 MB * 64 = 1280 MB) plus dem vom System selbst verbrauchten Speicher beträgt der Gesamtverbrauch weniger als 2 GB Speicher. Wenn der Serverspeicher klein ist, können Sie nur 25 PHP-CGI-Prozesse öffnen, sodass der von PHP-CGI verbrauchte Gesamtspeicher nur 500 MB beträgt.

Die oben genannten Daten stammen aus Nginx 0.8.x + PHP 5.2.13 (FastCGI), um einen Webserver zu erstellen, der zehnmal besser ist als Apache (Version 6)

PHP-CGI

PHP-CGI ist der FastCGI-Manager, der mit PHP geliefert wird.

Nachteile von PHP-CGI:

Nachdem php-cgi die php.ini-Konfiguration geändert hat, müssen Sie php-cgi neu starten, damit die neue php-ini wirksam wird. Sie kann nicht neu gestartet werden glatt.

Beenden Sie den PHP-CGI-Prozess direkt und PHP kann nicht ausgeführt werden. (PHP-FPM und Spawn-FCGI haben dieses Problem nicht. Der Daemon-Prozess generiert reibungslos neue untergeordnete Prozesse.)

PHP-FPM

PHP-FPM ist ein PHP-FastCGI-Manager ist nur für PHP und kann unter http://php-fpm.org/download heruntergeladen werden.

PHP-FPM ist eigentlich ein Patch des PHP-Quellcodes, der dazu dient, die FastCGI-Prozessverwaltung in das PHP-Paket zu integrieren. Es muss in Ihren PHP-Quellcode gepatcht werden und kann nach dem Kompilieren und Installieren von PHP verwendet werden.

Jetzt können wir den Zweig herunterladen, der PHP-FPM direkt in den neuesten PHP 5.3.2-Quellbaum integriert. Es heißt, dass die nächste Version in den Hauptzweig von PHP integriert wird. Im Vergleich zu Spawn-FCGI verfügt PHP-FPM über eine bessere CPU- und Speicherkontrolle. Ersteres stürzt leicht ab und muss mit crontab überwacht werden, während PHP-FPM solche Probleme nicht hat.

PHP5.3.3 hat PHP-FPM integriert und ist kein Drittanbieterpaket mehr. PHP-FPM bietet eine bessere PHP-Prozessverwaltungsmethode, mit der Speicher und Prozesse effektiv gesteuert und die PHP-Konfiguration reibungslos neu geladen werden können. Es bietet mehr Vorteile als spawn-fcgi und ist daher offiziell in PHP enthalten. Sie können PHP-FPM aktivieren, indem Sie den Parameter –enable-fpm in ./configure übergeben.

Spawn-FCGI

Spawn-FCGI ist ein universeller FastCGI-Verwaltungsserver. Er ist Teil von lighttpd. Viele Leute verwenden Spawn-FCGI von Lighttpd, um Verwaltungsarbeiten im FastCGI-Modus durchzuführen, aber er weist viele Mängel auf. Das Aufkommen von PHP-FPM hat einige Probleme etwas gemildert, aber PHP-FPM hat den Nachteil, dass es neu kompiliert werden muss, was für einige bereits laufende Umgebungen ein erhebliches Risiko darstellen kann. Es kann direkt in PHP 5.3.3 verwendet werden -FPM.

Spawn-FCGI ist mittlerweile ein separates Projekt, das stabiler ist und die Konfiguration vieler Websites vereinfacht. Viele Websites haben es mit Nginx gepaart, um dynamische Webseiten zu lösen.

Das neueste Lighttpd enthält diesen Teil nicht (http://www.lighttpd.net/search?q=Spawn-FCGI), aber er ist in früheren Versionen zu finden. Es ist in der Version lighttpd-1.4.15 enthalten (http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz. Die aktuelle Download-Adresse von Spawn-FCGI ist http://redmine). lighttpd.net/projects/spawn-fcgi, die neueste Version ist http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz.

Hinweis: Für das neueste Spawn-FCGI können Sie auf der Website lighttpd.net nach „Spawn-FCGI“ suchen, um die Veröffentlichungsadresse der neuesten Version zu finden.

Vergleich zwischen PHP-FPM und spawn-CGI

PHP-FPM ist sehr bequem zu verwenden. Die Konfiguration befindet sich in der Datei PHP-FPM.ini und der Start und Neustart kann erfolgen php/ Wird in sbin/PHP-FPM ausgeführt. Noch praktischer ist, dass Sie php.ini nach dem Ändern direkt mit PHP-FPM reload laden können. Sie können die Änderung und das Laden von php.ini abschließen, ohne den Prozess abzubrechen.

Die Ergebnisse zeigen, dass PHP verwendet wird -FPM kann viele Leistungsänderungen in PHP bewirken. Die CPU-Recyclinggeschwindigkeit des von PHP-FPM gesteuerten Prozesses ist relativ langsam und der Speicher wird gleichmäßig zugewiesen.

Die CPU des von Spawn-FCGI gesteuerten Prozesses sinkt schnell und die Speicherzuweisung ist ungleichmäßig. Es gibt viele Prozesse, die scheinbar nicht zugeordnet sind, während andere stark ausgelastet sind. Dies kann durch eine ungleichmäßige Verteilung der Prozessaufgaben verursacht werden. Dies führt auch zu einer Verringerung der Gesamtreaktionsgeschwindigkeit. Die sinnvolle Verteilung von PHP-FPM führt zur Angabe der Gesamtantwort und des Durchschnitts der Aufgaben.

Das obige ist der detaillierte Inhalt vonVergleichen Sie die Unterschiede zwischen CGI, FastCGI, PHP-CGI und PHP-FPM. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn