Eine interessante Session aus dem Umfeld von Scala: Akka bietet ein komplettes Concurrency Framework für die einfache Implementation von hochgradig parallelen Anwendungen.
Concurrency Made Simple
An der JAX2010 Session von Jonas Bonér geht was! Ich bin nicht nur gefordert, weil ich mir für diesen Blog-Artikel Notizen mache. Der Vortrag des Schweden geht schnell in die Tiefe von Actors und ihrer Verwendung mit Akka. Ein Framework, geschrieben in Scala, das aber weiter geht als Scala’s Actors und dem Actor-Modell von Erlang näher ist. Actors werden beschrieben durch die Stichworte: share nothing, messages, asynchronous, non-blocking und mailbox. Oder wie Jonas so schön sagte: “I don’t sit there until the mailman comes!”
Was bringt Akka für einen Mehrwert gegenüber den in Scala bereits vorhandenen Actors? Akka ist laut Benchmarks [1] [2] schneller als die Scala-Variante. Es unterstützt zwei verschiedene Concurrency Modelle, Thread-based und Event-based. Akka bietet nebst Actors auch Agents, Dispatchers, Dataflow, STM (Software
Transactional Memory), Transactors, eine Persistence API und vieles mehr. Bei Agents werden im Gegensatz zu Messages komplette Verhalten, also zum Beispiel Funktionen, übermittelt. Akka kann nicht nur aus Scala angesprochen werden, sondern bietet auch eine Java API und ist sogar in Spring und Guice einsetzbar.
Fehlertolerante Actors
Akka’s Actors sind fehlertolerant und verfolgen die Strategie Let it crash/Embrace failure des Erlang Actor-Modells. Die Fehlerbehandlung wird einfach verständlich ermöglicht. Ein Supervisor wird mit mehreren Actors über link(actor) verlinkt und somit über deren Status informiert. Wenn einer der Actors fehlschlägt, wird dieser einzeln neu gestartet. Diese Strategie nennt man OneForOne. Bei AllForOne hingegen werden bei einem Fehlschlag eines einzelnen alle Actors des Supervisors beendet und neu gestartet.
Die Nähe zum Actor-Modell von Erlang empfinde ich als einen der wichtigsten Aspekte von Akka. Dieses Modell hat sich in hochgradig nebenläufigen Programmen wie der Verwaltung riesiger Telefonnetze bewährt.
Mehr zu Akka
Aus meiner Sicht ein sehr robustes Framework, das das Entwickeln von Concurrent Applications tatsächlich einfach(er) macht. Noch einfacher als mit Scala an sich. Besuchen Sie akkasource.org um mehr zu erfahren. Ich öffne als nächstes die Konsole und tippe git clone um den Source Code etwas genauer unter die Lupe zu nehmen.