Vor kurzem haben wir hier in diesem Blog die Veranstaltung
Zurich FP Afternoon
vorgestellt. Simon Marlow, einer der Hauptentwickler des weit verbreiteten
Glasgow Haskell Compilers und inzwischen bei Facebook
beschäftigt, hat auf dieser Veranstaltung
einen Überblick über sein aktuelles Projekt Haxl gegeben. Ich möchte
hier durch eine Zusammenfassung des Vortrags zeigen, dass inzwischen
auch so große Firmen wie Facebook auf funktionale Programmierung setzen,
um die Probleme der modernen Softwareentwicklung in den Griff zu bekommen.
Die Folien zum Vortrag
enthalten alle weiteren technischen Details.
Das Problem
Facebook speichert die verschiedenen Daten seines sozialen Netzwerk in verschiedenen
Persistenzkomponenten. Jede dieser Persistenzkomponenten ist auf einen bestimmten
Zweck hin ausgerichtet und funktioniert am besten, wenn Zugriffe einem bestimmten Muster
folgen. Eine der wichtigsten Persistenzkomponenten ist TAO („The Associations and Objects“).
Diese Komponente repräsentiert u.A. die Verbindungen zwischen den
Facebook-Nutzern. Ein effizienter Zugriff auf TAO sollte
dem Batch-Muster folgen, d.h. ein Anwendungsprogrammierer sollte möglichst
viele Anfragen gleichzeitig absetzen und nicht jede Anfrage einzeln hintereinander.
Andere Komponenten folgen anderen Zugriffsmustern, so gibt es z.B. Komponenten
die asynchron angefragt werden, andere stellen jedoch eine synchrone API
zur Verfügung.
Aus software-technischer Sicht möchte man die verschiedenen Zugriffsmuster
am liebsten abstrakt halten und über eine einheitliche API auf alle
Persistenzkomponenten zugreifen. Die wesentlichen Vorteile einer solchen
Abstraktion sind:
-
Die Abstraktionsschicht und nicht der Anwendungsprogrammierer kümmert sich darum,
dass jede Komponente effizient angefragt wird.
-
Das bevorzugte Zugriffsmuster einer Komponente kann geändert werden, ohne
dass der Anwendungsprogrammierer Änderungen vornehmen muss, um weiterhin
eine gute Performanz zu erzielen.
Die Lösung
Das Haxl-Projekt bei Facebook stellt eine solche Abstraktionsschicht zum Zugriff
auf die verschiedenen Persistenzkomponenten bereit. Haxl ist als eine eingebettete,
domänenspezifische Sprache
in Haskell implementiert. In anderen Worten: Haxl ist ein in Haskell implementiertes Framework,
welches von Anwendungsprogrammierern benutzt wird, um Haskell-Programme zu entwickeln,
die auf die verschiedenen Persistenzkomponenten von Facebook über eine einheitliche
API zuzugreifen.
Als Beispiel zeigt Simon Marlow in seinem Vortrag ein mit Haxl entwickeltes Programm
zur Entdeckung von Spam. Dieses Haxl-Programm soll in Kürze die bisherige Komponente
zur Entdeckung von Spam ablösen.
Ich möchte an dieser Stelle nicht auf die technischen Details eingehen, dies sei Simon Marlow
in seinen
Folien zum Vortrag
vorbehalten. Ich möchte lediglich stichwortartig erwähnen, welche Eigenschaften von
Haskell bei der Realisierung von Haxl wichtig waren:
-
Abstraktion über den Kontrollfluss mittels Monaden. Dazu gab es hier im Blog
auch schon einige Artikel, zu finden im Archiv.
-
Die Implementierung von Haxl setzt außer Monaden auch noch
applikative Funktoren
ein. Die applikativen Funktoren werden benutzt, um unabhängige Zugriffe
auf die Persistenzkomponenten einzusammeln und dann später gemeinsam
als Batch-Zugriff abzusetzen.
-
Gute Kontrolle über Seiteneffekte erlaubt eine schöne Trennung zwischen den
eigentlichen Berechnungen und der Persistenzschicht.
-
Leichtgewichtige Threads erlauben eine einfache Implementierung der Zugriffe auf die
verschiedenen Persistenzkomponenten. Auch hierzu gab es schon einen
Artikel
Fazit
Das Beispiel Haxl zeigt, dass
es die funktionale Programmierung inzwischen soweit gebracht hat,
dass selbst große Firmen wie Facebook auf das funktionale
Programmierparadigma setzen. Und wann starten Sie mit funktionaler
Programmierung?