Der Unterschied zwischen CGI, FastCGI, PHP-CGI und PHP-FPM

高洛峰
Freigeben: 2016-10-17 11:01:22
Original
950 Leute haben es durchsucht

CGI


Der vollständige Name von CGI ist „Common Gateway Interface“, was eine Möglichkeit für den HTTP-Server darstellt, mit Programmen auf Ihrem oder anderen Computern zu „kommunizieren“. . Ein Tool, dessen Programm auf einem Netzwerkserver ausgeführt werden muss.

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

FastCGI


Es kann ständig ausgeführt werden, solange es aktiviert ist Jedes Mal braucht es Zeit, sich zu forken (dies 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. Bietet eine sicherere Umgebung als die API. 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

FastCGI-Prozess Der Manager initialisiert sich selbst, startet mehrere CGI-Interpreterprozesse (sichtbar mehrere PHP-CGI) und wartet auf Verbindungen 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 pro Um 25 MB Speicher zu erhalten, multiplizieren Sie diese Zahl mit 50 oder 100 und Sie erhalten eine sehr große Speichermenge.

Der Nginx 0.8.46 PHP 5.2.14 (FastCGI)-Server hat 30.000 gleichzeitige Verbindungen. Die 10 geöffneten Nginx-Prozesse verbrauchen 150 MB Speicher (15 MB * 10 = 150 MB), und die 64 geöffneten PHP-CGI-Prozesse verbrauchen 1280 MB Speicher (20 MB * 64 = 1280 MB) plus der vom System selbst verbrauchte 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, der nur für PHP verwendet wird und unter http://php-fpm.org/download heruntergeladen werden kann.

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 Speichersteuerung. Ersteres stürzt leicht ab und muss mit crontab überwacht werden, während PHP-FPM keine derartigen Probleme aufweist.

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 allgemeiner FastCGI-Verwaltungsserver. Er ist Teil von lighttpd funktioniert im FastCGI-Modus, weist jedoch 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 kombiniert, 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 komfortabel zu verwenden und die Konfiguration erfolgt in der PHP-FPM.ini Das Starten und Neustarten kann über php/sbin/PHP-FPM erfolgen. 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 Leistungsverbesserungen 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.


Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage