Leistungsvorteile der Verwendung von NGINX

16

In Anbetracht der Verwendung von NGINX für Magento- Ich bin nicht besorgt über Implementierungsdetails, sondern möchte wissen, ob jemand gute (oder schlechte) Dinge dazu zu sagen hat. Von besonderem Interesse ist auch die Verwendung von NGINX zum Lastausgleich von Magento.

Jonathan Bownds
quelle
Wir haben 2 Shops auf einem dedizierten Server mit NginX. Für stark frequentierte Shops ist dies mit Sicherheit von Vorteil, da NginX die Anforderungen einfach besser bearbeitet und mehr Ressourcen für Magento zur Verfügung stellt. Für Geschäfte mit wenig Verkehr bin ich mir nicht sicher, ob es irgendeinen Vorteil gibt
Sander Mangel

Antworten:

15

Nginx ist definitiv eine gute Wahl für das Hosting von Magento. Es bietet eine Reihe nützlicher (aber kleiner) Vorteile, die zur Verbesserung der Site-Leistung beitragen können.

Der Hauptunterschied zwischen Nginx und Apache besteht darin, dass Nginx nicht blockierende Evented IO verwendet und Apache nur Multithreading / Verarbeitung verwendet. Was ist der Unterschied und warum ist es wichtig? Nun, im Fall von Apache, sagen wir, es hat 5 Threads, es kann 5 Anfragen für etwas zu einem bestimmten Zeitpunkt bearbeiten. Wenn einer dieser Threads lange dauert, sind nur noch 4 Threads für die Bearbeitung weiterer eingehender Anforderungen verfügbar. Wenn alle 5 Threads gesperrt sind, können keine eingehenden Anforderungen bearbeitet werden, bis einer abgeschlossen ist.

Mit Evented IO löst ein Thread, wenn er eine Anforderung für etwas empfängt, ein Ereignis aus und fährt direkt mit der nächsten Anforderung fort. Wenn das Ereignis zurückruft, leitet es die Antwort an den entsprechenden Client weiter.

Dies ähnelt in etwa der Funktionsweise von asynchronem Javascript. Sie lösen eine AJAX-Anfrage aus und fahren fort, bis Sie einen Rückruf erhalten.

Dieser moderne Ansatz eignet sich gut zum Bereitstellen vieler kleiner statischer Dateien, ohne dass dabei viele Threads oder Worker-System-Prozesse erzeugt werden müssen.

Der andere Vorteil von Nginx ist der geringe Speicherbedarf. Apache unterstützt VIELE Dinge und hat dabei einen hohen Speicher- und Rechenaufwand. Sie können es zurückschreiben, aber Nginx wurde von Grund auf neu entwickelt, um hinsichtlich des Speichers schlank zu sein.

Die Unterschiede sind nicht riesig, aber wenn Sie auf viele Tausend Anfragen hochskalieren, machen diese kleinen Unterschiede insgesamt einen großen Unterschied.

Jetzt ist es wichtig, sich daran zu erinnern, dass der größte Leistungsengpass in einer Magento-Anwendung die Ausführung von PHP-Code ist. Hier gibt es einen grundsätzlich vernachlässigbaren Leistungsunterschied zwischen Apache und Nginx. Das Wichtigste ist, PHP-FPM und das Worker-MPM mit Apache zu verwenden (und auf jeden Fall Prefork / Mod-PHP zu vermeiden). Der Hauptgrund ist, dass Sie einen PHP-Interpreter nur aufrufen, wenn Sie PHP-Code ausführen müssen, und Sie können Op-Code-Caching-Software wie APC effektiv verwenden (und dies ist der größte Leistungsschub, den Sie erhalten werden).

Letzter Punkt: Einige Module / Anwendungen erwarten, dass Apache verwendet wird, und die Dokumentation ist möglicherweise auf die Verwendung von ModRewrite oder die Verwendung von .htaccess-Dateien ausgerichtet. In Nginx wird zwar der ModRewrite-Stil unterstützt, es werden jedoch keine Lösungen im .htaccess-Stil pro Verzeichnis unterstützt.

Persönlich mag ich Nginx, weil es statische Inhalte effizient bereitstellt, es ist sehr einfach, PHP-FPM einzurichten, und ich mag die Konfigurationssyntax. Es ist keine Patentlösung für Leistungsprobleme, aber es ist eine robuste, flexible Option.

Aaron Bonner
quelle
1
Eine großartige Antwort, die von den Ergebnissen von Magento, Inc. unterstützt wird: magentocommerce.com/whitepaper
markiert den
Ja, ich stimme Aaron zu 100% zu. Auch wir verwenden Nginx für die meisten unserer Magento-Bereitstellungen, da es statische Inhalte schneller verarbeiten und eine höhere Anzahl von gleichzeitigen Anforderungen verarbeiten kann als Apache. Der einzige Nachteil, auf den wir bei Nginx gestoßen sind, ist eines unserer Projekte, das nach dem Zufallsprinzip einen 504-Gateway-Timeout-Fehler auslöst (selbst wenn die Serverlast recht niedrig ist). Wir haben diesen noch nicht gefunden. Die meisten der in verschiedenen Foren beschriebenen Lösungen haben nicht viel geholfen.
Vinci Rufus
1

Ich würde sagen, der Leistungsvorteil von Nginx bei der Verwendung von Magento ist vernachlässigbar. Der von Aaron erwähnte ereignisbasierte E / A-Vorteil gilt auch für Apache (bei Verwendung des Ereignis-MPM).

Was Magento im Allgemeinen betrifft, so findet die meiste Verarbeitung (99%) in PHP und in der Datenbank statt. Wenn Sie also die ersten 1% optimieren, erhalten Sie relativ wenig Nutzen.

Es gibt jedoch noch andere Gründe, warum Sie sich für Nginx für Magento entschieden haben, z. B. ein geringerer Speicherbedarf, ein besseres Ratenlimit und SPDY-Unterstützung, um nur einige zu nennen.

Es gibt einen großen Nachteil für Nginx, wenn vorhandene Magento-Sites, die auf Apache ausgeführt werden, konvertiert werden, da viele .htaccess-Anweisungen nicht direkt auf Nginx-Anweisungen abgebildet werden. Zum Beispiel unterstützt Nginx keine Hostnamen in ACLs.

Willem
quelle