5 Stimmen

apache + lighttpd Front-Proxy-Konzept

Um den Apache zu entlasten, wird oft vorgeschlagen, lighttpd für statische Inhalte zu verwenden.

z.B.. http://www.linux.com/feature/51673

Bei dieser Konfiguration leitet der Apache Anfragen für statische Inhalte über mod_proxy an lighttpd weiter, während er selbst dynamische Anfragen bedient.

Meine Frage ist: Wie verringert sich dadurch die Belastung des Servers? Da Sie immer noch einen Apache-Prozess für jede eingehende Anfrage starten, wie wirkt sich dies positiv auf die Last aus? Soweit ich sehen kann, ist die Größe des Apache-Prozesses, der seine Anfrage durch lighttpd weiterleitet, genauso groß wie wenn er die Datei selbst bedienen würde.

9voto

joelhardi Punkte 10789

Lighttpd läuft hinter Apache für statische Dateien zu verwenden, erscheint mir ziemlich hirnrissig. Apache muss immer noch die HTTP-Pakete entpacken und die Anfrage durch seinen Parse-Baum analysieren, Proxy-Anfragen senden, und dann muss Lighttpd die Pakete wieder entpacken, auf das Dateisystem zugreifen und die Dateien durch Apache zurückschicken. Ich habe noch nie von jemandem gehört, der ein solches Setup in der Produktion verwendet.

Was Sie sehen werden, sind Leute, die einen leichtgewichtigen Webserver wie Nginx als Vorderseite Server, um statische Dateien bereitzustellen und dynamische URLs an den Apache weiterzuleiten. Oder Sie können Lackierung o Tintenfisch als Caching-Reverse-Proxy-Frontend, so dass alle Ihre hochfrequentierten statischen Dateien (d.h. Bilder, CSS usw.) und alle dynamischen Seiten, für die Sie bereit sind, cachefreundliche Header zu senden) werden aus dem Speicher bedient.

Apache kann auch für die Bereitstellung statischer Dateien optimiert werden. Wenn ich höre, dass sich Leute über Apache beschweren, dann wissen sie oft nicht, wie sie ihn konfigurieren sollen. Sie haben immer nur das Prefork-MPM verwendet (im Gegensatz zu Threaded oder Worker) und haben alle möglichen Module aktiviert (normalerweise verwenden sie das Apache-Paket einer Linux-Distribution, die alles als Module baut und standardmäßig 10-20 Module oder mehr aktiviert hat). Optimieren Sie den Apache, indem Sie nicht benötigte Module bzw. dumme Funktionen wie die Unterstützung für .htaccess (die den Apache dazu veranlasst, das Dateisystem bei jeder Anfrage zu durchsuchen) zuerst abschalten. (Sie können auch zwei Instanzen von Apache laufen lassen, mit einem "leichten" Apache als Frontend, der für dynamische Anfragen auf einen "schweren" Apache verweist ... vielleicht ist Ihr Frontend threaded, aber Ihr Backend ist prefork, weil Sie thread-unsichere externe Module wie mod_php laufen lassen müssen.)

Re:

Da Sie noch einen Apache-Prozess haben für jede eingehende Anfrage erzeugt wird wie wirkt sich dies positiv auf die die Last aus? Soweit ich sehen kann, ist die Größe des Apache-Prozesses, der seine Anfrage durch lighttpd ist so groß wie er es wäre, wenn er die Datei Datei selbst bedienen würde.

Wenn Sie bei jeder Anfrage Prozesse erzeugen, bedeutet das, dass Sie das Prefork-MPM verwenden. Denken Sie daran, dass, wenn das Betriebssystem die Speichernutzung für jeden dieser Prozesse meldet, nicht der gesamte Speicher belegt ist, viele dieser Prozesse sind im Leerlauf. Und wenn Sie über Geschwindigkeit sprechen, geht es Ihnen mehr um das Parsen von Anfragen und die internen Codeverzweigungen für eine bestimmte Anfrage (wie viel verarbeitet der Server?) als um die vom Betriebssystem gemeldete Speichernutzung.

Wenn Sie zum Beispiel etwas wie mod_php aktivieren, wird jeder dieser Worker-Prozesse sofort um etwa 20-40 MB anwachsen (je nachdem, was in Ihrem PHP-Interpreter aktiviert ist), aber das bedeutet nicht, dass der Apache diesen Speicher für statische Anfragen verwendet. Wenn Sie Ihren Server für maximale Gleichzeitigkeit bei kleinen statischen Dateien optimieren, wäre die Aktivierung von mod_php natürlich trotzdem sehr schlecht, da Sie nicht annähernd so viele Prefork-Prozesse im RAM unterbringen können.

Ich könnte mir wahrscheinlich eine "Albtraumkonfiguration" für Apache ausdenken, die würde es tatsächlich langsamer machen, statische Dateien zu servieren, als diese Anfragen an ein Lighttpd-Backend weiterzuleiten, aber das würde bedeuten, teure Funktionen wie .htaccess im Apache zu aktivieren, die in Lighttpd deaktiviert sind, also wäre es nicht wirklich fair.

2voto

Andre Bossard Punkte 6145
  1. Wenn Sie noch die Kraft haben zu dienen statische und dynamische Inhalte aus dem gleiche Maschine (wie sie in Ihrem Referenzierter Artikel tun), dann sehe ich wirklich keinen Sinn in dieser Einrichtung.
  2. Vielleicht reduziert es die Last des Apache, weil er keine IO auf der Festplatte machen muss, aber es erhöht die Last von Lighttpd auf dieselbe Maschine und damit die Reduzierung der verfügbare Last für Apache ...
  3. Vielleicht ist der IO-Zugriff von Lighttpd leichter als der von Apache 1.3, aber warum nicht einfach zu Apache 2 oder Lighttpd wechseln? Und wenn die Leistung wirklich zu stinken beginnt, hosten Sie die statischen Dateien auf einem anderen Rechner (media.yourdomain.com).

Eine kleine Einführung, wie Sie ein leistungsfähiges System einrichten können, finden Sie hier: Einsatz von Django -> blättern Sie zu Scaling einige Seite vor dem Ende

0voto

Quentin Punkte 850700

Sie haben keinen Apache-Prozess, der für jede Anfrage gestartet wird - statische Dateien (Bilder und ähnliches) werden direkt von lighttpd abgerufen.

0voto

Javier Punkte 58737

Ich weiß nicht viel über die interne Funktionsweise des Apache, aber eine Erklärung, die ich gesehen habe, bezieht sich auf den Speicherdruck. Kurz gesagt, der Apache versucht, den für das Caching und die dynamischen Seiten verwendeten Speicher auszugleichen, hat aber in der Regel zu viel Cache und zu wenig für Anwendungen. Wenn man sie auf verschiedene Prozesse aufteilt, wird jeder Prozess für die jeweilige Art der Belastung optimiert.

Derzeit verwende ich nginx als Frontend. Er ist wirklich schnell und leicht und wurde speziell als Frontend-Proxy entwickelt, kann aber auch statische Dateien verarbeiten. Da er auch FastCGI-Prozesse aufrufen kann, könnten Sie Apache loswerden und trotzdem die Vorteile von geteilten Datei-/App-Prozessen nutzen. (und es gibt einige zusätzliche Memcached-Zauber das sieht absolut genial aus)

(Ja, lighttpd kann auch als Frontend zu Apache und/oder FastCGI verwendet werden)

0voto

Verwenden Sie Apache MPM Worker fastcgi dies wird Sie Server-Speicherverbrauch zu senken. MPM Worker bedient statische Inhalte besser als Prefork und ist fast gleichauf mit Lighttpd, wenn es um statische Inhalte geht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X