2010-09-03 24 views
10

Diese Frage ist nicht Nginx vs Apache. Ich interessiere mich mehr für die architektonischen Vorteile von NGinx gegenüber Apache. Wie ich versteht konnte -Nginx und Apache Webserver

  • nginx ist ein asynchroner, ereignisgesteuerte, Web-Server, der mit großem Abstand Apache trifft.

Warum ist das? Wo fällt Apache zurück?

+0

Sie sicher Nginx ist rein asynchron? –

Antwort

13

Es gibt keinen einzigen Grund, warum nginx Apache streng "übertrifft". Für viele Lastmuster können Sie Apache so konfigurieren, dass es diese Last verarbeitet. Bei einigen (sehr ausgelasteten) Lastmustern kann nginx in der Standardkonfiguration Leistungsverschlechterungen aufweisen und eine Feineinstellung erfordern, um richtig zu funktionieren.

Es ist jedoch die Erfahrung von vielen, dass nginx tatsächlich "besser" out of the box oder mit einfacher Abstimmung funktioniert. Die Leistung vieler Systeme wurde deutlich verbessert, wenn nginx als Front-End installiert wurde und Apache zum Back-End verschoben wurde.

Der Hauptgrund ist, dass nginx ereignisgesteuert ist und die Zustandsmaschine enthält, die den Lebenszyklus von Verbindungen behandelt. Auf diese Weise können Sie sehr wenige "Worker" -Prozesse haben, von denen jeder viele Hunderte oder sogar Tausende von Verbindungen gleichzeitig verarbeitet. Für Apache müssen Sie die gleiche Anzahl von untergeordneten Prozessen (oder Threads) wie die Anzahl der Verbindungen ausführen.

Es ist offensichtlich, dass drei Prozesse gegen tausend Prozesse zumindest ein großer Gewinn sein sollten.

Insbesondere erlaubt nginx leicht, die Last der Serving statische Dateien (Bilder, Javascript, CSS) erheblich zu reduzieren. Die Handhabung jeder zusätzlichen Verbindung in nginx ist sehr kostengünstig, da die statischen Dateien in der Regel die Mehrheit der Anfragen bilden, erhalten Sie eine effiziente Verarbeitung.

Auch ist die nginx-Leistung besser für "langsame Clients". Wenn Apache direkt auf das Internet zugreift und Clients Anforderungen über (überlastete) Leitungen senden, muss Ihr (schneller) Server den (langsamen) Client geduldig versorgen und warten, bis er die gesamte Antwort verbraucht. Daher kann das Apache-Kind (oder der Thread) nichts Nützliches tun. Nginx-Worker hingegen behält diese langsame Verbindung in epoll-Deskriptoren einfach bei und verarbeitet dabei andere Verbindungen.

Vom konzeptionellen Standpunkt aus sollten Sie immer versuchen, die "Klassen" von Anfragen mit einem eigenen Leistungsprofil und eigenen Anforderungen zu trennen. Zum Beispiel ist das Bereitstellen kleiner statischer Dateien eine dieser Klassen; Servieren dynamischer Seiten ist eine andere solche Klasse; Servieren von großen statischen Dateien ist noch eine andere. Die Einführung von nginx in Ihr System übernimmt diese Trennung implizit.

+0

Quote: * Für Apache müssen Sie die gleiche Anzahl von untergeordneten Prozessen (oder Threads) als die Anzahl der Verbindungen ausführen. * Ich glaube, das gilt nicht, wenn Sie 'mpm_event' verwenden? –

+0

Nein, es gilt auch für 'mpm_event' (aus dem Lesen von http://httpd.apache.org/docs/2.4/mod/event.html,' mpm_event' ist nur 'worker' mit einer Wendung). Apache hat kein korrektes FSM-Modul. – squadette

+0

@squadette Von meiner kleinen Lesung von 'mpm_event' Code stimme ich nicht überein: mit' mpm_event' werden die Arbeiter nur verwendet, um I/O durchzuführen, wenn der Sockel dafür bereit ist und die Handler und Filter, z. Auf die gleiche Weise werden die Arbeiter in Libevent (Libevhtp), Cherokee usw. benutzt. Unter 'mpm_event' können Sie Tausende von Verbindungen mit nur wenigen Arbeitern haben. – ArtemGr

Verwandte Themen