Sie sind auf Seite 1von 44

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

akka – Grundlagen

Florian Schuhmann

Memory (STM) Fault-Tolerance Fazit akka – Grundlagen Florian Schuhmann Florian Schuhmann akka – Grundlagen

Florian Schuhmann

akka – Grundlagen

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

Agenda

1 akka

2 Actors

3 Software Transactional Memory (STM)

4 Fault-Tolerance

5 Fazit

Florian Schuhmann

akka – Grundlagen

1 akka 2 Actors 3 Software Transactional Memory (STM) 4 Fault-Tolerance 5 Fazit Florian Schuhmann akka

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

Grundlagen

Open Source Projekt

Apache 2 Lizenz

Jonas Bon´er Scalable Solutions

Grundlagen

Leitbild

Methodiken

Architektur

aktueller Stand

Code Beispiele

’akka Cloud’ ’akka Advanced’ ’akka Monitoring & Management’ Consulting

Florian Schuhmann

akka – Grundlagen

Cloud’ ’akka Advanced’ ’akka Monitoring & Management’ Consulting Florian Schuhmann akka – Grundlagen

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

Grundlagen

Scala + Java API Nutzung

Stand-Alone [Mikrokernel] Erweiterungsbibliothek

Grundlagen

Leitbild

Methodiken

Architektur

aktueller Stand

Code Beispiele

sehr gute Scala Dokumentation

Java Dokumentation wird nachgezogen

oder per SBT

Florian Schuhmann

akka – Grundlagen

Dokumentation Java Dokumentation wird nachgezogen Scala IDE for Eclipse oder per SBT Florian Schuhmann akka –

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

Leitbild

Grundlagen

Leitbild

Methodiken

Architektur

aktueller Stand

Code Beispiele

Jonas Bon´er Writing correct concurrent, fault-tolerant and scalable applications is too hard. Most of the
Jonas Bon´er
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

Leitbild

Ziel:

Grundlagen

Leitbild

Methodiken

Architektur

aktueller Stand

Code Beispiele

Abstraktionslevel erh¨ohen Werkzeug zur leichteren Implementierung von nebenl¨aufigen, fehlertoleranten und skalierbaren Applikationen bereitstellen

L¨osung:

akka == einzigartige Mischung von folgenden Techniken

Florian Schuhmann

akka – Grundlagen

bereitstellen L¨osung: akka == einzigartige Mischung von folgenden Techniken Florian Schuhmann akka – Grundlagen

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

Methodiken

Grundlagen

Leitbild

Methodiken

Architektur

aktueller Stand

Code Beispiele

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

Florian Schuhmann

akka – Grundlagen

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

Fazit Grundlagen Leitbild Methodiken Architektur aktueller Stand Code Beispiele Florian Schuhmann akka – Grundlagen

Florian Schuhmann

akka – Grundlagen

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

aktueller Stand

Grundlagen

Leitbild

Methodiken

Architektur

aktueller Stand

Code Beispiele

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 fur¨ handshake) .

Remote actors (per-session/ secure cookie

.

.

Florian Schuhmann

akka – Grundlagen

secure cookie . . full release notes auf: doc.akkasource.org/release-notes Florian Schuhmann akka – Grundlagen

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

Java Code Beispiel

Grundlagen

Leitbild

Methodiken

Architektur

aktueller Stand

Code Beispiele

// server code class HelloWorldActor extends UntypedActor { public void onReceive(Object msg) {
//
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");
9999); Object res = actor.sendRequestReply("Hello"); Florian Schuhmann akka – Grundlagen

Florian Schuhmann

akka – Grundlagen

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

Scala Code Beispiel

Grundlagen

Leitbild

Methodiken

Architektur

aktueller Stand

Code Beispiele

//

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",

val

result

=

actor

"localhost",

!!

"Hello"

9999)

, val result = actor "localhost" , !! "Hello" 9999) Florian Schuhmann akka – Grundlagen

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

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)

L¨osung:

kritische Abschnitte identifizieren Locks Synchronized (Funktionen/ einzelne Bl¨ocke) Conditions Blocking Queues

Florian Schuhmann

akka – Grundlagen

↓ Locks Synchronized (Funktionen/ einzelne Bl¨ocke) Conditions Blocking Queues Florian Schuhmann akka – Grundlagen

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

Actor-Modell

Probleme beim Multithreading Actor-Modell akka Actors

mathematisches Modell fur¨

’everything is an object’ ’everything is an actor’

Actors sind von Natur aus nebenl¨aufig

Kommunikation findet asynchron und nur uber¨ statt

Identifizierung uber¨

nebenl¨aufige Berechnungen

Nachrichten

Adressen

Florian Schuhmann

akka – Grundlagen

statt Identifizierung uber¨ nebenl¨aufige Berechnungen Nachrichten Adressen Florian Schuhmann akka – Grundlagen

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

Actor-Modell

Probleme beim Multithreading Actor-Modell akka Actors

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

fur¨

den Zustand eines anderen Actors nur uber¨

Nachrichten beeinflussen. Der Empf¨anger nimmt die

das Versenden von

die n¨achste Nachricht ein bestimmtes Verhalten festlegen

¨

Anderung aber selbst vor.

Florian Schuhmann

akka – Grundlagen

n¨achste Nachricht ein bestimmtes Verhalten festlegen ¨ Anderung aber selbst vor. Florian Schuhmann akka – Grundlagen

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

akka Actors

Probleme beim Multithreading Actor-Modell akka Actors

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

Florian Schuhmann

akka – Grundlagen

ein stark an Erlang[1] gehaltener Schreibstil expliziter message handler vorhanden Florian Schuhmann akka – Grundlagen

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

akka Actors

Probleme beim Multithreading Actor-Modell akka Actors

thread-based

event-based [2]

Actor-Modell akka Actors thread-based event-based [2] Performance event-based create ∼ 6.5 million Actors on 4

Performance event-based create 6.5 million Actors on 4 G RAM

600 bytes pro actor

[2]

Florian Schuhmann

akka – Grundlagen

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

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

akka Actors Beispiel

Probleme beim Multithreading Actor-Modell akka Actors

class MyActor extends Actor { def receive = { case "test" => println("received test")
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

= new MyActor myActor.start // send something myActor ! "test" Florian Schuhmann akka – Grundlagen

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

akka Actors

Probleme beim Multithreading Actor-Modell akka Actors

Sendearten

’fire-and-forget’

myActor

!"test"

’Send-And-Receive-Eventually’

val

actor

resultOption

=

!!("Hello",

’Send-And-Receive-Future’

val

future

=

actor

!!!"Hello"

1000)

Florian Schuhmann

akka – Grundlagen

, ’Send-And-Receive-Future’ val future = actor !!! "Hello" 1000) Florian Schuhmann akka – Grundlagen

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

Grundgedanke

Transactors

Software Transactional Memory

Florian Schuhmann

akka – Grundlagen

(STM) Fault-Tolerance Fazit Grundgedanke Transactors Software Transactional Memory Florian Schuhmann akka – Grundlagen

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

Grundgedanke

Grundgedanke

Transactors

Kontrollmechanismus fur¨

implementiert ACID-Konzept

gemeinsam genutzen Speicher

A

Atomarit¨at

C

Konsistenz

I

Isolation

D

Dauerhaftigkeit

Florian Schuhmann

akka – Grundlagen

A Atomarit¨at C Konsistenz I Isolation D Dauerhaftigkeit Florian Schuhmann akka – Grundlagen

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

Grundgedanke

Grundgedanke

Transactors

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 + unver¨anderliche Variablen (val)

Florian Schuhmann

akka – Grundlagen

Clojure (www.clojure.org) Managed References + unver¨anderliche Variablen ( val ) Florian Schuhmann akka – Grundlagen

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

Transactors

Grundgedanke

Transactors

Fault-Tolerance Fazit Transactors Grundgedanke Transactors Transactional Actors STM + Actors = Transactors Kombination

Transactional Actors STM + Actors = Transactors

Transactors Transactional Actors STM + Actors = Transactors Kombination aus besten Eigenschaften der Actor + STM

Kombination aus besten Eigenschaften der Actor + STM

parallele, asynchrone event-basierte Programmierung Transaktionen

erstellen eines atomaren Nachrichtenflusses mit automatischem Rollback und Retry

Florian Schuhmann

akka – Grundlagen

erstellen eines atomaren Nachrichtenflusses 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

Fazit Grundlagen OneForOne AllForOne Supervision Hierarchies Fault-Tolerance Florian Schuhmann akka – Grundlagen

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

Grundlagen

Grundlagen

OneForOne

AllForOne

Supervision Hierarchies

Grundlagen OneForOne AllForOne Supervision Hierarchies ’Let it crash’–Mentalit¨at look at errors as

’Let it crash’–Mentalit¨at look at errors as something natural and something that

will happen and instead of trying to prevent it; embrace it [2]
will happen and instead of trying to prevent it; embrace it [2]

Erlang/ Telekommunikation Exceptions im Actor werfen ist nicht hilfreich

kann nicht herausfinden ob etwas passiert ist (ausser im stack trace) kann nichts dagegen tun Actor Thread bl¨aht sich auf

Florian Schuhmann

akka – Grundlagen

ist (ausser im stack trace) kann nichts dagegen tun Actor Thread bl¨aht sich auf Florian Schuhmann

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

Grundlagen

Grundlagen

OneForOne

AllForOne

Supervision Hierarchies

besserer Weg: linking/ supervision Actors

so k¨onnen Sets von Actors erstellt werden

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

beobachtet und restartet gegebenenfalls Restart-Strategien OneForOne AllForOne Florian Schuhmann akka – Grundlagen

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

OneForOne

Grundlagen

OneForOne

AllForOne

Supervision Hierarchies

Fazit OneForOne Grundlagen OneForOne AllForOne Supervision Hierarchies initial Florian Schuhmann akka – Grundlagen

initial

Florian Schuhmann

akka – Grundlagen

Fazit OneForOne Grundlagen OneForOne AllForOne Supervision Hierarchies initial Florian Schuhmann akka – Grundlagen

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

OneForOne

Grundlagen

OneForOne

AllForOne

Supervision Hierarchies

Fazit OneForOne Grundlagen OneForOne AllForOne Supervision Hierarchies one crashed Florian Schuhmann akka – Grundlagen

one crashed

Florian Schuhmann

akka – Grundlagen

Fazit OneForOne Grundlagen OneForOne AllForOne Supervision Hierarchies one crashed Florian Schuhmann akka – Grundlagen

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

OneForOne

Grundlagen

OneForOne

AllForOne

Supervision Hierarchies

OneForOne Grundlagen OneForOne AllForOne Supervision Hierarchies one is restarted Florian Schuhmann akka – Grundlagen

one is restarted

Florian Schuhmann

akka – Grundlagen

OneForOne Grundlagen OneForOne AllForOne Supervision Hierarchies one is restarted Florian Schuhmann akka – Grundlagen

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

OneForOne

Grundlagen

OneForOne

AllForOne

Supervision Hierarchies

Grundlagen OneForOne AllForOne Supervision Hierarchies reseted to a stable state Florian Schuhmann akka –

reseted to a stable state

Florian Schuhmann

akka – Grundlagen

Grundlagen OneForOne AllForOne Supervision Hierarchies reseted to a stable state Florian Schuhmann akka – Grundlagen

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

AllForOne

Grundlagen

OneForOne

AllForOne

Supervision Hierarchies

Fazit AllForOne Grundlagen OneForOne AllForOne Supervision Hierarchies initial Florian Schuhmann akka – Grundlagen

initial

Florian Schuhmann

akka – Grundlagen

Fazit AllForOne Grundlagen OneForOne AllForOne Supervision Hierarchies initial Florian Schuhmann akka – Grundlagen

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

AllForOne

Grundlagen

OneForOne

AllForOne

Supervision Hierarchies

Fazit AllForOne Grundlagen OneForOne AllForOne Supervision Hierarchies one crashed Florian Schuhmann akka – Grundlagen

one crashed

Florian Schuhmann

akka – Grundlagen

Fazit AllForOne Grundlagen OneForOne AllForOne Supervision Hierarchies one crashed Florian Schuhmann akka – Grundlagen

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

AllForOne

Grundlagen

OneForOne

AllForOne

Supervision Hierarchies

AllForOne Grundlagen OneForOne AllForOne Supervision Hierarchies all are restarted Florian Schuhmann akka – Grundlagen

all are restarted

Florian Schuhmann

akka – Grundlagen

AllForOne Grundlagen OneForOne AllForOne Supervision Hierarchies all are restarted Florian Schuhmann akka – Grundlagen

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

AllForOne

Grundlagen

OneForOne

AllForOne

Supervision Hierarchies

Grundlagen OneForOne AllForOne Supervision Hierarchies reseted to a stable state Florian Schuhmann akka –

reseted to a stable state

Florian Schuhmann

akka – Grundlagen

Grundlagen OneForOne AllForOne Supervision Hierarchies 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

OneForOne AllForOne Supervision Hierarchies Supervision Hierarchies initial Florian Schuhmann akka – Grundlagen

initial

Florian Schuhmann

akka – 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

OneForOne AllForOne Supervision Hierarchies Supervision Hierarchies one crashed Florian Schuhmann akka – Grundlagen

one crashed

Florian Schuhmann

akka – 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

AllForOne Supervision Hierarchies Supervision Hierarchies all are restarted Florian Schuhmann akka – Grundlagen

all are restarted

Florian Schuhmann

akka – Grundlagen

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

AllForOne Supervision Hierarchies Supervision Hierarchies reseted to a stable state Florian Schuhmann akka –

reseted to a stable state

Florian Schuhmann

akka – Grundlagen

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

Actors Software Transactional Memory (STM) Fault-Tolerance Fazit Fazit Anhang Fazit Florian Schuhmann akka – Grundlagen

Fazit

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

Fazit

Anhang

gute und viele Ideen im Framework

2 API’s

leicht handhabbar + verst¨andlich

sehr flexibel (Module, Nutzung)

Unterstutzung¨

(Spring Integration/ OSGi)

aktive Entwicklung und Updates

von weiteren Features durch Add-on Module

Florian Schuhmann

akka – Grundlagen

OSGi) aktive Entwicklung und Updates von weiteren Features durch Add-on Module Florian Schuhmann akka – Grundlagen

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

Fazit

Anhang

Danke!

Florian Schuhmann

akka – Grundlagen

Software Transactional Memory (STM) Fault-Tolerance Fazit Fazit Anhang Danke! Florian Schuhmann akka – Grundlagen

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

Erlang Bsp.

Fazit

Anhang

-module(ping_pong).

-export([ping/0,

->

ping()

pong/0]).

Pong

=

spawn(ping_pong,

pong,

[]),

Pong

!

{self(),

ping},

receive

 

pong

->

 

pong

 

end.

pong()

->

 

receive

 

{Ping,

ping}

->

end.

Ping

!

pong

receive   { Ping, ping } -> end . Ping ! pong 3 Florian Schuhmann akka

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

Fazit

Anhang

Benchmark Dispatcher

Memory (STM) Fault-Tolerance Fazit Fazit Anhang Benchmark Dispatcher Florian Schuhmann akka – Grundlagen 2

Florian Schuhmann

akka – Grundlagen

2

Memory (STM) Fault-Tolerance Fazit Fazit Anhang Benchmark Dispatcher Florian Schuhmann akka – Grundlagen 2

Quellen

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

Fazit

Anhang

Jonas Bon´er, Introducing Akka . http://www.jonasboner.com, 4. Jan 2010. Introducing Akka. http://www.jonasboner.com, 4. Jan 2010.

akkasource.org, akka Homepage . http://www.akkasource.org akka Homepage. http://www.akkasource.org

Jonas Bon´er, akka Google Group . akka User List akka Google Group. akka User List

Jonas Bon´er, akka Github . akka Github akka Github. akka Github

Lothar Piepmeyer, Grundkursfunktionale Programmierung mit Grundkursfunktionale Programmierung mit

Scala. Carl Hanser Verlag Munchen¨

Wien, 2010.

Christos K. K. Loverdos and Apostolos Syropoulos, Steps in Scala: An Introduction to Object-Functional Programming . Cambridge University Press, 2010. Steps in Scala: An Introduction to Object-Functional Programming . Cambridge University Press, 2010.

Florian Schuhmann

akka – Grundlagen

Introduction to Object-Functional Programming . Cambridge University Press, 2010. Florian Schuhmann akka – Grundlagen