Seminararbeit im Studiengang „Scientific Programming“ Konzeption eines nativen Webserver-Moduls zur hochperformanten Auslieferung dynamisch generierter Ressourcen aus einem Cache-Speicher Simon Roosen Matr.-Nr.: Prüfer: Prof. Dr. rer. nat. Volker Sander, FH Aachen Betreuer: Martin Jansen, Bauer+Kirch GmbH
Gliederung Motivation Nginx Admon-Caching Modul-Aufbau Ausblick
Motivation Hohe Anforderungen an Flexibilität von Content-Management- Systemen →Aufbau von Seiten mit Komponenten →Viele Datenbank-Zugriffe zum Erzeugen einer Seite →Steht Anforderungen zu Geschwindigkeit entgegen
Motivation Aushilfe: Caching Fertige Seiten werden im Cache gespeichert + von dort ausgeliefert Aber: – CMS muss auch hierfür initialisiert werden – Begrenzung gleichzeitiger Requests Idee: Integration der Cache-Auslieferung in den Webserver
Nginx Webserver auf Basis einer Event-Loop Verarbeitung einzelner Requests kann pausiert und wieder fortgeführt werden → Gute Ausnutzung der Resourcen, auch während IO Hierdurch können große Massen an Requests „gleichzeitig“ verarbeitet werden Ist auf minimalen Overhead ausgelegt Modularer Aufbau → Optimal zur Entwicklung eines Moduls für Cache-Inhalte
Admon-Caching Metadaten (Dependencies,...) und Seiten-Inhalt getrennt gespeichert Key der Metadaten lediglich die URL Key des Seiten-Inhalt generiert aus den aufgelösten Dependencies → Unterstützung mehrerer Ausführungen einer Seite → Passive Invalidierung
Modul-Aufbau Modul soll die Seite aus dem Cache ausliefern Wenn nicht gefunden: Abgabe der Anfrage an das CMS Normaler Ablauf der Anfragen-Verarbeitung: Initialisierung → Zugriff-Check → Content-Generierung → Abschluss Während Content-Generierung: Keine Garantie auf Ausführung vor dem CMS → Simulation einer Phase zwischen Zugriff-Check und Content- Generierung
Modul-Aufbau Ablauf der Verarbeitung im Modul in Phasen aufgeteilt Phasen-Wechsel bei jedem Cache-Zugriff → Erlaub Pausierung des Moduls Sollte einer dieser Schritte nicht möglich sein: Abgabe an CMS
Ausblick Aktuell: Manche Daten müssen im Modul hinterlegt werden (z.B. Key-Präfix) → Entwicklung eines Mechanismus zur Übertragung dieser Daten aus dem CMS Teilen einer Verbindung zum Cache zwischen mehreren Requests Unterstützung mehrerer Memcache-Server Benchmarking von Latenz, Durchsatz und Server-Last → Wann macht das Modul wieviel Sinn