Zusammenfassung
... [
Informatik und Master-Seminar SS2003] ... [ HWS Gesamtübersicht
] ... [ Literaturverzeichnis ] ...
Übersicht: Zusammenfassung
Haskell
Der Haskell Web Server wurde in Concurrent Haskell mit dem GHC
(Glasgow Haskell Compiler) entwickelt, weil dieser folgende Eigenschaften
bietet:
- Concurrent Haskell bietet ein Concurrency Model mit geringem Overhead
und geringer Latenz (Wartezeit), was für die Performance des Web Servers
vom Vorteil ist.
- Fehlertoleranz ist in Haskell durch dessen Typ System, das gegen Abstürze
(crashes) schützt und Korrektheit im Code unterstützt. Ausserdem
gibt es auch Erweiterungen zur Exception Unterstützung, die Funktionen
zur Behandlung von Run-Time Errors enthalten.
- Asynchrone Exceptions bieten die Möglichkeit sowohl timeouts
zu implementieren, als auch dem Web Server auf die externe Welt zu reagieren.
Wie schon erwähnt, ist diese Implementierung nur ein Prototyp,
d.h. sie ist noch nicht soweit um mit ausgereiften Servern (wie z.B. Apache)
konkurrieren zu können. Jedoch kann sich das mit der Zeit ändern,
wenn die Entwickler es weiter optimieren und erweitern.
Web Server
Der Server wird durch Editieren einer Text-Datei konfiguriert,
wobei die Syntax der Konfigurationsdatei der Syntax vom Apache Server ähnelt.
Um die Verfügbarkeit des Servers nicht einzuschränken, ist Run-Time
Konfiguration implementiert worden, so dass neuer Inhalt vom Administrator
während Server Laufzeit hinzugefügt werden kann ohne den Server
neustarten zu müssen. Dabei gilt die neue Konfiguration (mit neuen Inhalten)
für neue Verbindungen, wodurch laufende Transaktionen nicht beeinflusst
werden.
Es wurden in dem Haskell Web Server folgende "Performance Tweaks" durchgeführt:
- Ersetzung von getContents und hPutStr mit GHCs IOExts.
- GHCs scheduler wurde von 5000 switches/sec auf 50 switches/sec
verringert. Der Grund dafür ist GHCs Ausführung von select bei jedem
switch, was die Performance runtersetzt.
- Erhöhung der allocation area size (Garbage Collection
Einstellung). Vergrösserung des Speichers verbessert die Performance.
- GHCs hGetLine wurde neu implementiert, was zur 10% Performancesteigerung
führte.
- Finalisation Mechanismus wurde verändert, so dass mehrere
finalizers zusammengefügt wurden.
Nur der erste Punkt (IOExts) war eine Optimierung von dem Web Server Code,
alles andere waren Optimierungen an der GHC Umgebung.
Der Web Server wurde HTTP/1.1 konform in weniger als 1500 Zeilen implementiert.
Hat unter realen Konditionen gute Performance geliefert, wobei bis zu 700
Verbindungen/Sekunde (bei insgesamt 850) erreicht wurden (Apache kann maximal
950 bewältigen). Es ist Fehlertolerant und verbrauchte konstant, geringe
Speichermenge über einen längeren Zeitraum.
... [
Informatik und Master-Seminar SS2003] ... [ HWS Gesamtübersicht
] ... [ Zusammenfassung ] ... [ Literaturverzeichnis ] ...