You are on page 1of 44

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

akka Grundlagen
Florian Schuhmann

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Agenda

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen Leitbild Methodiken Architektur aktueller Stand Code Beispiele

Grundlagen

Open Source Projekt Apache 2 Lizenz Jonas Bonr e Scalable Solutions


akka Cloud akka Advanced akka Monitoring & Management Consulting

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen Leitbild Methodiken Architektur aktueller Stand Code Beispiele

Grundlagen
Scala + Java API Nutzung
Stand-Alone [Mikrokernel] Erweiterungsbibliothek

http://www.akkasource.org sehr gute Scala Dokumentation Java Dokumentation wird nachgezogen Scala IDE for Eclipse oder per SBT

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen Leitbild Methodiken Architektur aktueller Stand Code Beispiele

Leitbild

Jonas Bonr e Writing correct concurrent, fault-tolerant and scalable applications is too hard. Most of the time its because we are using the wrong tools and the wrong level of abstraction. Akka is an attempt to change that. [1]

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen Leitbild Methodiken Architektur aktueller Stand Code Beispiele

Leitbild

Ziel:
Abstraktionslevel erhhen o Werkzeug zur leichteren Implementierung von nebenlugen, a fehlertoleranten und skalierbaren Applikationen bereitstellen

Lsung: o
akka == einzigartige Mischung von folgenden Techniken

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen Leitbild Methodiken Architektur aktueller Stand Code Beispiele

Methodiken

Actors Software Transactional Memory (STM) Transactors Let it crash Supervisor Hierarchies Remote Actors

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen Leitbild Methodiken Architektur aktueller Stand Code Beispiele

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen Leitbild Methodiken Architektur aktueller Stand Code Beispiele

aktueller Stand
Akka 1.0-RC1 wurde am 26. November, 19:13 released Fixes/ Improvements
Umbenennung des packages in akka. anstelle von se.scalablesolutions. Update zu Scala 2.8.1 Split in akka Core + akka Module komplett neue Transactor Implementation neue Features fr Remote actors (per-session/ secure cookie u handshake) ...

full release notes auf: doc.akkasource.org/release-notes

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen Leitbild Methodiken Architektur aktueller Stand Code Beispiele

Java Code Beispiel


// server code class HelloWorldActor extends UntypedActor { public void onReceive(Object msg) { getContext().reply(msg + " World"); } } RemoteNode.start("localhost", 9999).register( "hello-service", actorOf(HelloWorldActor.class); // client code ActorRef actor = RemoteClient.actorFor( "hello-service", "localhost", 9999); Object res = actor.sendRequestReply("Hello");
Florian Schuhmann akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen Leitbild Methodiken Architektur aktueller Stand Code Beispiele

Scala Code Beispiel


// server code class HelloWorldActor extends Actor { def receive = { case msg => self reply (msg + " World") } } RemoteNode.start("localhost", 9999).register( "hello-service", actorOf[HelloWorldActor]) // client code val actor = RemoteClient.actorFor( "hello-service", "localhost", 9999) val result = actor !! "Hello"

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Probleme beim Multithreading Actor-Modell akka Actors

Actors
one tool in the toolbox

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Probleme beim Multithreading Actor-Modell akka Actors

Probleme beim Multithreading


Reproduzierbarkeit von Fehlern Inkonsistenzen Deadlocks Starvation(Verhungern) Lsung: o
kritische Abschnitte identizieren Locks Synchronized (Funktionen/ einzelne Blcke) o Conditions Blocking Queues

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Probleme beim Multithreading Actor-Modell akka Actors

Actor-Modell

mathematisches Modell fr nebenluge Berechnungen u a everything is an object everything is an actor Actors sind von Natur aus nebenlug a Kommunikation ndet asynchron und nur uber Nachrichten statt Identizierung uber Adressen

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Probleme beim Multithreading Actor-Modell akka Actors

Actor-Modell

Ein Actor kann als Reaktion auf eine empfangene Nachricht (parallel) eine endliche Anzahl von Nachrichten an andere Actors senden eine endliche Anzahl neuer Actors erstellen fr die nchste Nachricht ein bestimmtes Verhalten festlegen u a den Zustand eines anderen Actors nur uber das Versenden von Nachrichten beeinussen. Der Empfnger nimmt die a Anderung aber selbst vor.

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Probleme beim Multithreading Actor-Modell akka Actors

akka Actors

parallele Entwicklung zu Scala actors ieen jetzt in Scala ein stark an Erlang[1] gehaltener Schreibstil expliziter message handler vorhanden

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Probleme beim Multithreading Actor-Modell akka Actors

akka Actors

thread-based event-based [2] Performance event-based create 6.5 million Actors on 4 G RAM 600 bytes pro actor [2]

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Probleme beim Multithreading Actor-Modell akka Actors

akka Actors Beispiel

class MyActor extends Actor { def receive = { case "test" => println("received test") case _ => println("received unknown message") } } val myActor = new MyActor myActor.start // send something myActor ! "test"

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Probleme beim Multithreading Actor-Modell akka Actors

akka Actors

Sendearten
re-and-forget myActor !"test" Send-And-Receive-Eventually val resultOption = actor !!("Hello", 1000) Send-And-Receive-Future val future = actor !!!"Hello"

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundgedanke Transactors

Software Transactional Memory

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundgedanke Transactors

Grundgedanke

Kontrollmechanismus fr gemeinsam genutzen Speicher u implementiert ACID-Konzept A Atomaritt a C Konsistenz I Isolation D Dauerhaftigkeit

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundgedanke Transactors

Grundgedanke

Hauptspeicher wird zu transactional data set


begin/ commit/ rollback/ . . . Transaktionen wie in Datenbanken

STM-Implementation
basiert auf den selben Ideen wie Clojure (www.clojure.org) Managed References + unvernderliche Variablen (val) a

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundgedanke Transactors

Transactors

Transactional Actors STM + Actors = Transactors Kombination aus besten Eigenschaften der Actor + STM
parallele, asynchrone event-basierte Programmierung Transaktionen

erstellen eines atomaren Nachrichtenusses mit automatischem Rollback und Retry

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

Fault-Tolerance

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

Grundlagen
Let it crashMentalitt a look at errors as something natural and something that will happen and instead of trying to prevent it; embrace it [2] Erlang/ Telekommunikation Exceptions im Actor werfen ist nicht hilfreich
kann nicht herausnden ob etwas passiert ist (ausser im stack trace) kann nichts dagegen tun Actor Thread blht sich auf a

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

Grundlagen

besserer Weg: linking/ supervision Actors


so knnen Sets von Actors erstellt werden o gibt Sicherheit uber den Zustand der Actos (dead/ alive)

es entstehen Supervisor Hierarchien


Supervisor startet, stoppt, beobachtet und restartet gegebenenfalls

Restart-Strategien
OneForOne AllForOne

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

OneForOne

initial

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

OneForOne

one crashed

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

OneForOne

one is restarted

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

OneForOne

reseted to a stable state

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

AllForOne

initial

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

AllForOne

one crashed

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

AllForOne

all are restarted

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

AllForOne

reseted to a stable state

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

Supervision Hierarchies

initial
Florian Schuhmann akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

Supervision Hierarchies

one crashed
Florian Schuhmann akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

Supervision Hierarchies

all are restarted


Florian Schuhmann akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Grundlagen OneForOne AllForOne Supervision Hierarchies

Supervision Hierarchies

reseted to a stable state


Florian Schuhmann akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Fazit Anhang

Fazit

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Fazit Anhang

Fazit

gute und viele Ideen im Framework 2 APIs leicht handhabbar + verstndlich a sehr exibel (Module, Nutzung) Untersttzung von weiteren Features durch Add-on Module u (Spring Integration/ OSGi) aktive Entwicklung und Updates

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Fazit Anhang

Danke!

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Fazit Anhang

Erlang Bsp.
-module(ping_pong). -export([ping/0, pong/0]). ping() -> Pong = spawn(ping_pong, pong, []), Pong ! {self(), ping}, receive pong -> pong end. pong() -> receive {Ping, ping} -> Ping ! pong end.

Florian Schuhmann

akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Fazit Anhang

Benchmark Dispatcher

2
Florian Schuhmann akka Grundlagen

akka Actors Software Transactional Memory (STM) Fault-Tolerance Fazit

Fazit Anhang

Quellen
Jonas Bonr, Introducing Akka. http://www.jonasboner.com, e 4. Jan 2010. akkasource.org, akka Homepage. http://www.akkasource.org Jonas Bonr, akka Google Group. akka User List e Jonas Bonr, akka Github. akka Github e Lothar Piepmeyer, Grundkursfunktionale Programmierung mit Scala. Carl Hanser Verlag Mnchen Wien, 2010. u Christos K. K. Loverdos and Apostolos Syropoulos, Steps in Scala: An Introduction to Object-Functional Programming . Cambridge University Press, 2010.
Florian Schuhmann akka Grundlagen