Einführung


... [ Programmiersprachen und Sprachsysteme ] ... [ Cloud Haskell ] ... [ Inhaltsverzeichnis ] ... [ Cloud Haskell Architektur >> ] ...

Was ist Cloud Haskell?


Bei Cloud Haskell handelt es sich um eine Domain-specific language, welche für die Entwicklung von Programmen für verteilte, nebenläufige Systeme in Haskell entworfen worden ist. Anders als in anderen Sprachen wurde beim Entwurf darauf geachtet, die Funktionalität in Form einer Library bereitzustellen und das Haskell Sprachsystem nur minimal erweitern zu müssen.
Cloud Haskell wurde hauptsächlich durch die Programmiersprache Erlang inspiriert und ist sehr nah an dessen Konzepte, wie etwa dem Message-passing Communication Model oder den Ausfall und Wiederherstellungs-Strategien, angelehnt. Die bereits durch Erlang lang bewehrten Konzepte sollten durch Haskells Stärken wie der stark statischen Typisierung oder der "purity" erweitert werden. Vorhandene Libraries und Operationen wie für Concurrent Haskell oder der Shared-memory concurrency lassen sich dabei auch weiterhin in der Cloud Haskell Umgebung verwenden. Slogans wie: "If in doubt, do it the way Erlang does it" oder "Erlang for Haskell (as a library)" fassen dabei die Intuition der Entwickler zusammen.


Key Idea & Verwendung


Bei der Entwicklung von Software mit Cloud Haskell geht es dabei primär um die Entwicklung von Node Clustern als ganzes und nicht um die Entwicklung einzelner Nodes an sich. Es wird dabei von der eigentlichen Infrastruktur abstrahiert und grundsätzlich nicht unterschieden, ob sich diese z. B. verteilt auf Platform-as-a-Service Anbietern wie Amazon EC2, Google AppEngine, Microsoft Azure, auf eigenen Rechnern im lokalen Netzwerk oder einfach als separate Prozesse auf einer Multicore-Prozessor Maschine ausgeführt werden. Durch die gekapselte Betrachtung eines Prozesses werden die Vorteile schnell ersichtlich. Separate Prozesse haben getrennte Heaps sowie separate Garbage Collector und lassen sich auf Grund ihrer Kapselung sehr gut skalieren. Die separaten Prozess-Speicher garantieren dabei ebenfalls getrennte Ausfallszenarien und lassen bei Ausfall nicht das ganze System zum Ausfall bringen.


Programming Model


Man spricht bei dem in Cloud Haskell verwendeten Programmiermodell von dem sogenannten "Actor Model". Es handelt sich dabei um ein Modell für nebenläufige Programme, welche in sogenannte Actors aufgeteilt werden. Diese Actors definieren jeweils einen separaten Prozess, welcher ausschließlich durch asynchronen Nachrichtenaustausch mit anderen Prozessen kommuniziert und keinen gemeinsamen Zustand aufweist. Diese Prozesse werden in Haskell durch leichtgewichtige Threads umgesetzt, welche sich rein in der Haskell Laufzeitumgebung befinden und dementsprechend Speicher und Laufzeit optimiert sind.



Wie im Bild zu sehen, sind zwei solcher beschriebenen Prozesse abgebildet. Prozess A befindet sich dabei auf Node 1 und Prozess B auf Node 2. Jeder Prozess kann auch gleichzeitig weitere Prozesse spawnen und nebenläufige Berechnungen durchführen. Wie zuvor beschrieben kommunizieren die beiden Prozesse asynchron durch Nachrichtenaustausch, welches über die zu jeden Prozess gehörige Message Queue erfolgt.


Implementation


Die in dieser Ausarbeitung beschrieben Cloud Haskell Library basiert auf dem Paper "Toward Haskell in the Cloud" von Jeff Epstein, Andrew Black und Simon Peyton Jones. Aufbauend auf diesem Paper wurde im Rahmen der Master Thesis "Functional programming for the data centre" von Jeff Epstein eine prototypische Implementation vorgenommen und unter dem Cabal Package Namen "remote" veröffentlicht. Dieses Package gilt aber mittlerweile als obsolet und wurde durch die aktuelle Implementation der Firma Well-Typed LLP ersetzt. Diese ist unter dem Namen "distributed-process" veröffentlicht. Bei der Umsetzung des Message Passing wurde sehr stark auf das Paper "A unified semantics for future Erlang" von Hans Svensson, Lars-Åke Fredlund and Clara Benac Earle gesetzt und die dort beschrieben Konzepte für Haskell umgesetzt. Alle im weiteren Verlauf vorgestellte Konzepte und Funktionen beziehen sich dabei auf das Package "distributed-process" in der aktuellen Version 0.4.2.


... [ Programmiersprachen und Sprachsysteme ] ... [ Cloud Haskell ] ... [ Inhaltsverzeichnis ] ... [ Cloud Haskell Architektur >> ] ...
generated by schmidt-doku-generator (GitHub)