Einsatz eines Proxy/2. Webservers für statische Inhalte
Posted: 2004-03-20 19:56
Hallo!
Ich überlege mir gerade, die statischen Inhalte einer webbasierten Software die auf einem Root-Server läuft, von den dynamischen Seiten zu trennen. Dynamisch heißt in meinem Fall mod_php. Zur Zeit läuft das alles noch über einen Apache-Server (1.3) mit allen benötigten Modulen. Das funktioniert soweit auch wunderbar, nur erfolgen doch die meisten Zugriffe - trotz entsprechender Caching-Header... immer noch auf statische Inhalte wie Bilder, Javascripte, CSS, und anderes. Der Nachteil daran ist jetzt, dass mit dieser Konfiguration unter etwas Last sehr schnell der ganzen RAM aufgebraucht wird, wenn immer mehr riesige Apache-Prozesse "geforkt" werden.
Ein weiteres Problem, bei persistenten DB-Verbindungen werden evtl. Verbindungen von Prozessen belegt, die diese Verbindung gar nicht verwenden...
Was noch dazu kommt, dass persistente HTTP-Verbindungen zwar bei statischen Inhalten viel Sinn machen, bei dynamischen Seiten allerdings Resourcen unnnötig blockieren.
Die optimale Größe der Prozesse ist stark von deren Aufgabe abhängig, wenn ein PHP-Script geparst und interpretiert wird, eine Verbindung zur DB2-DB herstellt, ohne Ende Abfragen dahin schickt und auswertet, am Ende noch die Ausgabe komprimiert wird, ist das ein ganz anderer Aufwand als einfach eine Bilddatei zu laden und an den Client zu schicken, oder möglicherweise auch nur einen Header. Das spiegelt sich unter anderem in den notwendigen Modulen wider.
Also könnte man ja vielleicht mal dran denken die statischen Inhalte auszulagern. Es kann ja nicht sein dass für ein 1-pixel gif immer so ein riesen Apache-Prozess benötigt wird.
Ich überlege zwischen 2 Varianten:
1. Verwendung eines 2. Apachen
Der 1. Apache hört port 80 ab, und kümmert sich erstmal nur um statische Inhalte. Requests an dynamische Inhalte werden an den 2. Apachen per mod_proxy und mod_rewrite weitergereicht.
Beide Apachen werden dann für den jeweiligen Anwendungsfall optimiert.
2. Verwendung einies Squid-Cache als reverse-proxy
Der Squid wäre wieder unter Port 80 erreichbar, und soll nach Möglichkeit statische Inhalte cachen. Der Vorteil ist, das der Squid hierfür sicher besser optimiert ist als die "eierlegende Wollmilchsau" Apache. Z.B. halte ich es für sehr sinnvoll statische Inhalte im RAM zu halten, was der Squid ohne Probleme machen sollte, der Apache erst seit neueren Versionen und möglicherweise noch nicht so zuverlässig.
Was haltet Ihr von den beiden Varianten? Was würdet Ihr empfehlen? Kennt Ihr evtl. gute Links zu den Themen? Vor allem zu Squid als Reverse-Proxy finde ich leider doch recht wenige gute Infos.
Viele Grüße,
Andreas
Ich überlege mir gerade, die statischen Inhalte einer webbasierten Software die auf einem Root-Server läuft, von den dynamischen Seiten zu trennen. Dynamisch heißt in meinem Fall mod_php. Zur Zeit läuft das alles noch über einen Apache-Server (1.3) mit allen benötigten Modulen. Das funktioniert soweit auch wunderbar, nur erfolgen doch die meisten Zugriffe - trotz entsprechender Caching-Header... immer noch auf statische Inhalte wie Bilder, Javascripte, CSS, und anderes. Der Nachteil daran ist jetzt, dass mit dieser Konfiguration unter etwas Last sehr schnell der ganzen RAM aufgebraucht wird, wenn immer mehr riesige Apache-Prozesse "geforkt" werden.
Ein weiteres Problem, bei persistenten DB-Verbindungen werden evtl. Verbindungen von Prozessen belegt, die diese Verbindung gar nicht verwenden...
Was noch dazu kommt, dass persistente HTTP-Verbindungen zwar bei statischen Inhalten viel Sinn machen, bei dynamischen Seiten allerdings Resourcen unnnötig blockieren.
Die optimale Größe der Prozesse ist stark von deren Aufgabe abhängig, wenn ein PHP-Script geparst und interpretiert wird, eine Verbindung zur DB2-DB herstellt, ohne Ende Abfragen dahin schickt und auswertet, am Ende noch die Ausgabe komprimiert wird, ist das ein ganz anderer Aufwand als einfach eine Bilddatei zu laden und an den Client zu schicken, oder möglicherweise auch nur einen Header. Das spiegelt sich unter anderem in den notwendigen Modulen wider.
Also könnte man ja vielleicht mal dran denken die statischen Inhalte auszulagern. Es kann ja nicht sein dass für ein 1-pixel gif immer so ein riesen Apache-Prozess benötigt wird.
Ich überlege zwischen 2 Varianten:
1. Verwendung eines 2. Apachen
Der 1. Apache hört port 80 ab, und kümmert sich erstmal nur um statische Inhalte. Requests an dynamische Inhalte werden an den 2. Apachen per mod_proxy und mod_rewrite weitergereicht.
Beide Apachen werden dann für den jeweiligen Anwendungsfall optimiert.
2. Verwendung einies Squid-Cache als reverse-proxy
Der Squid wäre wieder unter Port 80 erreichbar, und soll nach Möglichkeit statische Inhalte cachen. Der Vorteil ist, das der Squid hierfür sicher besser optimiert ist als die "eierlegende Wollmilchsau" Apache. Z.B. halte ich es für sehr sinnvoll statische Inhalte im RAM zu halten, was der Squid ohne Probleme machen sollte, der Apache erst seit neueren Versionen und möglicherweise noch nicht so zuverlässig.
Was haltet Ihr von den beiden Varianten? Was würdet Ihr empfehlen? Kennt Ihr evtl. gute Links zu den Themen? Vor allem zu Squid als Reverse-Proxy finde ich leider doch recht wenige gute Infos.
Viele Grüße,
Andreas