Hallo Andreas,
Die Idee dort hat weniger mit Caching zu tun, mehr mit Optimierung der httpd-Prozesse für den jeweiligen Einsatz-Zweck.
Ok. Soweit hatte ich es auch verstanden. Nur der untere Abschnitt bezog sich auf httpd in Zusammenarbeit mit Reverse-Proxy (und damit meinte ich z.B. Squid). Und der Proxy hostet ja keine Seiten selber sondern cached nur die Inhalte.
Statische Dokumente brauchen nur serh wenig und so laufen die über einen Webserver der nur wenig kann - dafür vergleichsweise schlanke Prozesse verwendet.
Die dynamischen Dokumente brauchen meist mehr Module, und benötigen merh Funktionalität, wodurch die Prozesse um ein vielfaches größer werden können.
Kurze Zwischenfrage:
Bei parallelen Zugriffen werden ja (wie Du auch schon sagtest) mehrere httpd-Prozesse geöffnet.
Ist es wirklich so, daß ein neu geöffneter Prozess so dick ist wie ein anderer?
Ich vermute mal, daß der Programmcode zwischen den Prozessen eh geshared wird und es nur ein eigener Stackframe/Dataframe pro Prozess gibt, so dass ein schlank konfigurierter httpd erstmal nicht soviel bringt. Richtig?
Der Overhead für den Stackframe sollte nicht allzu viel sein. Und Resourcen wie DB-Verbindungen sind ohnehin Prozessgebunden und werden beim fork nicht dupliziert. Was bleibt ist bei den Resourcen das von Dir schon angesprochene keep-alive. Idealerweise müsste ein Mechanismus existieren, der Anfragen auf Seiten die z.B. eine DB benötigen an alive-Prozesse weitergibt die ohnehin schon eine DB-Verbindung offen haben. Wird aber wohl nicht ganz so einfach zu realisieren sein.
Daher die Idee den ersten Webserver gleichzeitig als Reverse-Proxy einzusetzen, das heißt, er liefert selber statische Inhalte aus, und leitet Requests an dynamische Dokumente per ProxyPass an den 2. Webserver weiter, denn dann alle benötigten Module hat und dessen Prozesse erheblich größer sind als die des ersten Webservers/Reverse Proxys. Der 1. Webserver(Proxy) hört Port 80/443 an der Netzwerkkarte ab, der 2. Webserver(PHP...) hört Port 8080 auf localhost ab. Der Proxy reicht also Requests an localhost:8080 weiter.
Jo. Ich glaube ich habe kapiert.
Dadurch kann man die Ressourcen des Webservers besser ausnutzen.
Wenn Du einen Reverse-Proxy einsetzt - was verwendest Du dann? Apache(mod_proxy)? Oder Squid? Oder nochwas anderses?
Ich hatte eher an Squid gedacht der dann die statischen Seiten (auch statische Seiten mit DB-Zugriff, wobei die Funktionalität sich da auf reines Anzeigen beschränken müsste) vom Webserver nach dem ersten Zugriff cached.
Hast Du Erfahrung mit eine, Reverse-proxy in Zusammenhang mit SSL? Bei Apache kein Problem - aber bei Squid? Funktioniert das? Man könnte sich ja auch ein Szenario überlegen wie:
Squid an Netzwerkkarte Port 443, leitet Request weiter an:
-> Apache #1 (für statisches) an localhost:8080
oder
-> Apache #2 (für dynamisches) an localhost:8081
Was hälst Du davon?
Wie Du schon sagtest ...
Wobei man in diesem Fall eigentlich keine 2 Webserver-Instanzen braucht, denn wenn sich die statischen Inhalte kaum ändern wird der Squid die meisten Inhalte ja selber cachen.
... ist der Apache #1 eigentlich überflüssig.
Nur - soweit ich weiß darf man bei SSL gar nicht cachen, oder sowas?
Könnte ich mir auch vorstellen. Das wäre ja dann eine Art Man-in-the-middle-attack und genau das soll ja ssl verhindern.
Aber da es ja auf dem eigentlichen Server passiert - warum nicht?
Apache-intern mit mod_proxy könnte ich mir das durchaus vorstellen, weil es ja ein und derselbe Prozess ist.
Leider fehlt mir zu dem SSL-Thema die Erfahrung, als das ich dazu gesicherte Aussagen treffen kann.
Kann man das wohl so machen? Mein Problem ist hier, ich finde einfach nicht genügend Informationen wie man einen Squid für dieses Szenario konfiguriert.
Auch nicht hier? http://devel.squid-cache.org/ssl/
Was übrigens auch noch eine Anwendung für zwei getrennte Server ist (also Apache-Apache oder Squid-Apache) ist für eine gewisse Lastverteilung, indem man die beiden Sachen einfach auf unterschiedliche Rechner packt. Vorallem wenn man ein relativ hohen Anteil an statischen Seiten hat. Das bringt zusätzlich auch noch ein gewissen Schutz, da der Apache auf dem die Serverskripte laufen ja doch etwas anfälliger ist.
Gruß
MichaelB