Ich habe einen neuen Server zum Spielen und starre auf eine leere Leinwand. Ich kann alles drauflegen, was ich will. Obwohl ich mit Apache vertraut bin, höre ich immer wieder, wie Nginx mit so viel mehr Verkehr als Apache um den Faktor 10, 100 und noch mehr umgehen kann. Nicht nur, dass es "viel viel schneller" ist.
Wenn ich nach Artikeln suche, kann ich viele Dinge finden, die nichts mit Drupal zu tun haben. Oder wenn ich auf einen Drupal-Artikel stoße, ist dies entweder 1) die Konfigurationsdatei eines anderen Benutzers mit einem schnellen Versuch, die Einrichtung zu erklären, oder 2) jemand, der sagt: "Nein, verwende kein Nginx, geh mit PHP zu Apache fcgid ", aber es gibt keine Erklärung dafür, warum.
Was ist hier die Realität, wenn es um Drupal geht?
Als Beispiel suche ich etwas in diesem 2bits.com- Artikel. Hier hat der Autor Apache mod_php vs Apache mit fcgid unter Abwägung der Vor- und Nachteile ausführlich untersucht und eine Fallstudie zur Veranschaulichung der Auswirkungen in der realen Welt vorgelegt. In diesem Artikel sind genügend Informationen enthalten, damit ich eine fundierte Entscheidung treffen kann, welcher Ansatz für meine Situation am besten geeignet ist.
Während dieser Autor mod_php mit fcgid vergleicht, suche ich nach der gleichen Art von umfassendem, realem Blick auf Apache vs Nginx.
Hat jemand zu Nginx gewechselt und wurde von dem Unterschied zu Apache "umgehauen"? Selbst in hochoptimierten Umgebungen, in denen bereits APC, Memcache und aggressives Caching wie Varnish verwendet werden, reicht es aus, Apache durch Nginx zu ersetzen, um einen Unterschied zu machen und in diese neuere, alternative Technologie zu investieren ?
Die Site, die auf diesem Server geschaltet wird, erhält durchschnittlich 2 Millionen PV pro Monat. LAMP-Stack mit Cent OS 6. 4-Kern-CPU mit 8 GIGS RAM. Memcached und APC werden Teil der Mischung sein. Nichts besonderes an der Drupal-Installation - im Grunde Vanilla 7 mit etwa 50 Modulen.
quelle
Antworten:
Genau genommen beantwortet dies nicht die Frage, die Sie stellen. Ich hoffe es ist trotzdem hilfreich.
Apache / Nginx / Lighttpd / anderer Webserver. Ist es wichtig, welches ich wähle? Kurz gesagt, nein .
Die viel viel längere Antwort:
Wenn und nur wennHaben Sie einen sehr großen Prozentsatz Ihrer Benutzer angemeldet, sollten Sie sich überhaupt um die Leistung Ihres Webservers kümmern. Wenn Ihre Benutzer anonym sind, ist jeder Unterschied, den Sie theoretisch aus der Optimierung auf diesen Ebenen ableiten können, verblasst im Vergleich dazu, dass Ihre Ressourcen besser zwischengespeichert werden können. Wenn Ihre CSS-Dateien über richtige Cache-Header verfügen, werden Sie beim zweiten Mal nicht einmal von der UA gefragt. Das zählt. Wenn Sie Ihre Seiten in Varnish oder einer ähnlichen Softwarelösung zwischenspeichern können, müssen Sie für die Bereitstellung dieser Seite einen Hash-Lookup durchführen und anschließend eine große Datenmenge direkt aus dem RAM zurückgeben. Das zählt. In beiden Szenarien ist der HTTP-Daemon nicht einmal beteiligt, PHP wird nicht aufgerufen. Drupal bootet nicht. Es müssen keine großen Mengen von Modulen in den Arbeitsspeicher geladen werden, und es werden keine zeitaufwendigen Datenbankabfragen ausgeführt.
Wenn Sie für einen angemeldeten Benutzer auf einer komplexen Seite eine vollständige Seite aus einem Cold-Cache laden; Viele Dinge sind im Gange. Ja, der Webserver ist an der Bearbeitung der eingehenden Anfrage beteiligt, setzt einige Header und leitet die Antwort zurück. Aber die Zeit, die benötigt wird, spielt keine Rolle, wenn Drupal einen vollständigen Bootstrap ausführt und seine Antwort ausgibt. Möglicherweise werden Hunderte von Datenbankabfragen ausgeführt. Hochkomplexe Logik in PHP wird vom Parser ausgewertet. Viele Module werden in den Arbeitsspeicher geladen. Eine Verbesserung der Leistung all dieser Dinge kann mit größerer Wahrscheinlichkeit einen ernsthaften Beitrag zur Leistung leisten.
Der Argumentation halber: Nehmen wir an, Sie haben viel Zeit damit verbracht, die Leistung für alles andere zu optimieren.
Wenn Sie viele angemeldete Benutzer haben und sich mit all dem Obenstehenden befasst haben, können Sie wahrscheinlich einen Unterschied machen, außer die Leistung zu optimieren oder Ihren Webserver zu ersetzen. Aber raten Sie mal was. Ihre Website ist so komplex und die Verwendungsmuster Ihrer bestimmten Benutzer sind einzigartig . Es gibt keine generische Antwort. Sie müssen alle verschiedenen Webserver hinter einem Lastenausgleich einrichten und deren Verhalten in Ihrem Szenario überprüfen .
Das oben Gesagte war ein Versuch, logisch zu der Schlussfolgerung zu gelangen, dass die Optimierung des Webservers durch Zeitaufwand wahrscheinlich eine schlechte Zeitnutzung darstellt. Ich würde gerne jemanden haben, der Löcher in das Obige pickt, ich würde wahrscheinlich etwas Neues daraus lernen. :)
Einige andere Hinweise:
$ wc -l $(find . -type f | grep -v "^\.git" | grep -v "^\.hphp/third_party") | sort -nr | head -n1
und festgestellt, dass es aus 1.512.481 Codezeilen besteht. Das ist eine absolut verrückte Menge an Arbeit, um die Geschwindigkeit von PHP zu verbessern. Ich vermute, das liegt daran, dass die Geschwindigkeit von PHP für sie sehr wichtig ist.quelle
OK, obwohl diese Frage bereits beantwortet wurde, bin ich wieder ein Nekromantiker, vor allem, weil mir die Implikationen dieser Antworten nicht gefallen, dass es keinen Unterschied macht, und weil ich als Webentwickler es hasse, leidenschaftlich zu cachen .
Der Unterschied zwischen Apache und nginx ist nicht so sehr, "wie schnell sie eine Anfrage bearbeiten können", sondern wie viele Anfragen sie auf derselben Hardwaremenge (insbesondere mit begrenzten Ressourcen) bearbeiten können, was etwas anders ist.
Apache ist ein prozessbasierter Server. Das heißt, es wird ein Prozess für jede Anforderung abgefragt. Nginx ist ein ereignisbasierter Server, dh es wird eine (asynchrone) Ereignisschleife anstelle von Prozessen oder Threads verwendet.
Und während ein prozessbasierter Server (wie Apache) bei geringer Auslastung mehr oder weniger mit einem asynchronen ereignisbasierten Server (wie nginx) mithalten kann, verwendet nginx bei hoher Auslastung wie z. B. 10'0000 gleichzeitigen Anforderungen nur wenige Megabyte RAM, wohingegen Apache allein für den Webserver mehrere Hundert Megabyte benötigt (ohne die Webanwendung, die viel mehr Ressourcen selbst benötigt), wenn es überhaupt dazu in der Lage ist.
Unter höheren Lasten verbraucht Apache also viel zu viel RAM, was die Leistung überraschenderweise erheblich beeinträchtigt.
Ein höherer RAM-Verbrauch bedeutet, dass Apache weniger Anforderungen auf derselben Hardware bedienen kann als Nginx. Dies bedeutet, dass Apache mehr Hardware für dieselbe Anzahl von Benutzern benötigt, was bedeutet, dass Sie eine höhere Gesamtbetriebskosten (TCO) haben. mit Apache als mit Nginx, was Ihren ROI (Return on Investment) reduziert.
Gesamter Speicher, der von X gleichzeitigen Verbindungen verwendet wird (weniger ist besser)
Anforderungen, die pro Sekunde bei gleichzeitigen X-Verbindungen auf einem Hardwaresatz bedient werden können (mehr ist besser)
Quelle: ApacheBench, von dreamhost.com
Siehe auch diese digitale Ozeanbeschreibung.
Anscheinend hängt dies von der Verbindungsbehandlungsarchitektur ab, die Sie für Apache ausgewählt haben.
quelle
Ich bin vor ein paar Monaten von Apache zu Nginx / PHP-FPM gewechselt.
Ich habe Benchmarck mit einer Drupal-Website erstellt und mehrere Anwendungsfälle getestet. Auf einem VPS-Server mit 1 CPU und 512 Mo RAM
Drupal mit nur Cache
Nginx
Apache
Drupal mit Cache und Boost
Nginx
Apache
Benchmark für authentifizierte Benutzer (Seitenaufruf)
Nginx
Apache
Die Stärke von Nginx ist jedoch das Cache-System
Drupal ohne Boost und Nginx mit aktiviertem Cache-System
Sie sollten die perusio Konfiguration Nginx für Drupal verwenden
quelle
Hier ist ein Leistungstest für zehn Webserver / -varianten (zB Apache, Nginx, lighttpd, Lightspeed, Hiawatha, Cherokee). Drei der Tests beziehen sich auf Drupal.
Ich denke, Hiawatha könnte die beste Wahl sein. Es wird angenommen, dass es über vollständige Drupal-Kompatibilität verfügt. Der Schwerpunkt liegt auf der Sicherheit (DoS, XSS, CSRF, Verhinderung von SQL-Injektionen) und einer Geschwindigkeit und einem Footprint, die denen von Nginx ähneln.
In zwei der drei Drupal-Tests übertreffen sowohl Hiawatha als auch Nginx Apache um etwa 150%, aber im statischen Drupal-Test übertrifft Apache Nginx geringfügig, während Hiawatha die Packung um etwa 10% übertrifft.
Ich würde meinen Hut bei keinem dieser Tests aufhängen, aber es gibt einen Überblick über die Leistung in verschiedenen Nutzungssituationen. Ich denke, Leistung allein sollte nicht die einzige Überlegung sein. Stabilität und Sicherheit können die wichtigsten Faktoren sein.
quelle
Hier sehen Sie die Ergebnisse eines Auslastungstests für Drupal, das auf derselben Hardware, jedoch mit unterschiedlichen Webservern ausgeführt wird. (Nginx und Apache)
Hier ist das Fazit dieses Tests:
quelle