simpler concurrency, scalability & fault-tolerance through...

91
Akka: Simpler Concurrency, Scalability & Fault-tolerance through Actors Jonas Bonér Viktor Klang Tuesday, April 20, 2010

Upload: others

Post on 06-Jul-2020

21 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Akka:Simpler Concurrency, Scalability &

Fault-tolerance through Actors

Jonas Bonér

Viktor Klang

Tuesday, April 20, 2010

Page 2: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

•Writing correct concurrent applications is too hard

•Scaling out applications is too hard

•Writing highly fault-tolerant applications is too hard

We believe that...

Tuesday, April 20, 2010

Page 3: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

It doesn’t have to be like this

We need to raise the abstraction level

Tuesday, April 20, 2010

Page 4: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Locks & Threadsare...

Tuesday, April 20, 2010

Page 5: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

...sometimes

plain evil

Tuesday, April 20, 2010

Page 6: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

...but always the

wrong default

Tuesday, April 20, 2010

Page 7: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Introducing

STM

Persistent

Distributed

RESTful Secure

Agents

Dataflow Open Source

Actors

Tuesday, April 20, 2010

Page 8: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Actorsone tool in the toolbox

Tuesday, April 20, 2010

Page 9: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

• Implements Message-Passing Concurrency• Share NOTHING• Isolated lightweight processes•Communicates through messages•Asynchronous and non-blocking• Each actor has a mailbox (message queue)

Actor Model of Concurrency

Tuesday, April 20, 2010

Page 10: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Actor Model of Concurrency

• Easier to reason about• Raised abstraction level• Easier to avoid–Race conditions–Deadlocks–Starvation–Live locks

Tuesday, April 20, 2010

Page 11: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Akka Actors

Tuesday, April 20, 2010

Page 12: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Two different models

• Thread-based• Event-based– Very lightweight (600 bytes per actor)– Can easily create millions on a single workstation (6.5 million on 4 G RAM)– Does not consume a thread

Tuesday, April 20, 2010

Page 13: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Microbenchmark

•Chameneos benchmark• http://shootout.alioth.debian.org/

• +4 times faster• Run it yourself (3 different benchmarks):

• http://github.com/jboner/akka-bench

Akka 0.8.1 3815

Scala Actors 2.8.0.Beta1 (react) 16086

Tuesday, April 20, 2010

Page 14: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

caseobjectTick

classCounterextendsActor{privatevarcounter=0

defreceive={caseTick=>counter+=1println(counter)}}

Actors

Tuesday, April 20, 2010

Page 15: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

valworker=actor{caseWork(fn)=>fn()}

Actorsanonymous

Tuesday, April 20, 2010

Page 16: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

//fire‐forgetcounter!Tick

Send: !

Tuesday, April 20, 2010

Page 17: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

//usesFuturewithdefaulttimeoutvalresult:Option[..]=actor!!Message

Send: !!

Tuesday, April 20, 2010

Page 18: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

//returnsafuturevalfuture=actor!!!Messagefuture.awaitvalresult=future.get

...Futures.awaitOne(List(fut1,fut2,...))Futures.awaitAll(List(fut1,fut2,...))

Send: !!!

Tuesday, April 20, 2010

Page 19: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

classSomeActorextendsActor{defreceive={caseUser(name)=>//usereplyreply(“Hi”+name)}}

Reply

Tuesday, April 20, 2010

Page 20: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Akka Dispatchers

Tuesday, April 20, 2010

Page 21: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

classDispatchers{defnewThreadBasedDispatcher(actor:Actor)

defnewExecutorBasedEventDrivenDispatcherdefnewExecutorBasedEventDrivenWorkStealingDispatcher

...//etc}

Dispatchers

Tuesday, April 20, 2010

Page 22: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

classMyActorextendsActor{dispatcher=Dispatchers.newThreadBasedDispatcher(this)...}

actor.dispatcher=dispatcher//beforestarted

Set dispatcher

Tuesday, April 20, 2010

Page 23: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Let it crash fault-tolerance

Tuesday, April 20, 2010

Page 24: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Stolen from

ErlangTuesday, April 20, 2010

Page 25: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

9 nines

Tuesday, April 20, 2010

Page 26: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

OneForOne fault handling strategy

Tuesday, April 20, 2010

Page 27: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

OneForOne fault handling strategy

Tuesday, April 20, 2010

Page 28: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

OneForOne fault handling strategy

Tuesday, April 20, 2010

Page 29: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

OneForOne fault handling strategy

Tuesday, April 20, 2010

Page 30: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

OneForOne fault handling strategy

Tuesday, April 20, 2010

Page 31: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

OneForOne fault handling strategy

Tuesday, April 20, 2010

Page 32: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

OneForOne fault handling strategy

Tuesday, April 20, 2010

Page 33: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

AllForOnefault handling strategy

Tuesday, April 20, 2010

Page 34: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

AllForOnefault handling strategy

Tuesday, April 20, 2010

Page 35: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

AllForOnefault handling strategy

Tuesday, April 20, 2010

Page 36: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

AllForOnefault handling strategy

Tuesday, April 20, 2010

Page 37: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Supervisor hierarchies

Tuesday, April 20, 2010

Page 38: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Supervisor hierarchies

Tuesday, April 20, 2010

Page 39: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Supervisor hierarchies

Tuesday, April 20, 2010

Page 40: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Supervisor hierarchies

Tuesday, April 20, 2010

Page 41: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

AllForOneStrategy(maxNrOfRetries,withinTimeRange)

OneForOneStrategy(maxNrOfRetries,withinTimeRange)

Fault handlers

Tuesday, April 20, 2010

Page 42: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

link(actor)unlink(actor)

startLink(actor)spawnLink[MyActor]

Linking

Tuesday, April 20, 2010

Page 43: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

trapExit=List(classOf[ServiceException],classOf[PersistenceException])

trapExit

Tuesday, April 20, 2010

Page 44: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

classSupervisorextendsActor{trapExit=List(classOf[Throwable])faultHandler=Some(OneForOneStrategy(5,5000))

defreceive={caseRegister(actor)=>link(actor)}}

Supervision

Tuesday, April 20, 2010

Page 45: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

classFaultTolerantServiceextendsActor{...overridedefpreRestart(reason:Throwable)={...//cleanupbeforerestart}overridedefpostRestart(reason:Throwable)={...//initafterrestart}}

Manage failure

Tuesday, April 20, 2010

Page 46: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Remote Actors

Tuesday, April 20, 2010

Page 47: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

//usehost&portinconfigRemoteNode.start

RemoteNode.start("localhost",9999)

Remote Server

Scalable implementation based on NIO (Netty) & Protobuf

Tuesday, April 20, 2010

Page 48: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

•Client-initated and managed•Server-initiated and managed

Two types of

remote actors

Tuesday, April 20, 2010

Page 49: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

//methodsinActorclass

spawnRemote[MyActor](host,port)

spawnLinkRemote[MyActor](host,port)

startLinkRemote(actor,host,port)

Client-managedsupervision works across nodes

Tuesday, April 20, 2010

Page 50: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

valactorProxy=spawnLinkRemote[MyActor](“darkstar”,9999)

actorProxy!message

Client-managedmoves actor to server

client manages through proxy

Tuesday, April 20, 2010

Page 51: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

RemoteNode.register(“service:id”,newMyService)

Server-managedregister and manage actor on server

client gets “dumb” proxy handle

server part

Tuesday, April 20, 2010

Page 52: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

valhandle=RemoteClient.actorFor(“service:id”,“darkstar”,9999)

handle!message

Server-managed

client part

Tuesday, April 20, 2010

Page 53: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Cluster.relayMessage(classOf[TypeOfActor],message)

for(endpoint<‐Cluster)spawnRemote[TypeOfActor](endpoint.host,endpoint.port)

Cluster Membership

Tuesday, April 20, 2010

Page 54: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

STManother tool in the toolbox

Tuesday, April 20, 2010

Page 55: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

43

What is STM?

Tuesday, April 20, 2010

Page 56: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

STM: overview• See the memory (heap and stack) as a transactional dataset

• Similar to a database• begin• commit• abort/rollback

• Transactions are retried automatically upon collision

• Rolls back the memory on abort

Tuesday, April 20, 2010

Page 57: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

• Separates Identity from Value- Values are immutable- Identity (Ref) holds Values

•Change is a function•Compare-and-swap (CAS)•Abstraction of time•Must be used within a transaction

Managed References

Tuesday, April 20, 2010

Page 58: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

valref=Ref(Map[String,User]())

valusers=ref.get

valnewUsers=users+(“bill”‐>User(“bill”))

ref.swap(newUsers)

Managed References

Tuesday, April 20, 2010

Page 59: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

valusers=TransactionalMap[String,User]()

valusers=TransactionalVector[User]()

Transactionaldatastructures

Tuesday, April 20, 2010

Page 60: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

importTransaction.Local._

atomic{...atomic{//nestedtransactionscompose...//dosomethingwithinatransaction}}

STM: API

Tuesday, April 20, 2010

Page 61: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Actors + STM = Transactors

Tuesday, April 20, 2010

Page 62: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

classUserRegistryextendsTransactor{privatelazyvalstorage=TransactionalMap[String,User]()

defreceive={caseNewUser(user)=>storage+(user.name‐>user)...}}

Transactors

Tuesday, April 20, 2010

Page 63: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Transactors

Tuesday, April 20, 2010

Page 64: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsStart transaction

Tuesday, April 20, 2010

Page 65: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsStart transaction

Send message

Tuesday, April 20, 2010

Page 66: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsStart transaction

Send message

Tuesday, April 20, 2010

Page 67: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, April 20, 2010

Page 68: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, April 20, 2010

Page 69: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, April 20, 2010

Page 70: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, April 20, 2010

Page 71: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, April 20, 2010

Page 72: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, April 20, 2010

Page 73: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsStart transaction

Send message

Update statewithin transaction

Transaction fails

Tuesday, April 20, 2010

Page 74: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsStart transaction

Send message

Update statewithin transaction

Transaction fails

Tuesday, April 20, 2010

Page 75: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Transactors

Tuesday, April 20, 2010

Page 76: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Transactors

Tuesday, April 20, 2010

Page 77: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Transactors

Tuesday, April 20, 2010

Page 78: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Transactors

Tuesday, April 20, 2010

Page 79: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Transactors

Tuesday, April 20, 2010

Page 80: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Transactors

Tuesday, April 20, 2010

Page 81: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

TransactorsTransactionautomatically

retried

Tuesday, April 20, 2010

Page 82: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Agentsyet another tool in the toolbox

Tuesday, April 20, 2010

Page 83: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

valagent=Agent(5)

//sendfunctionasynchronouslyagentsend(_+1)

valresult=agent()//deref...//useresult

agent.close

Agents

Cooperates with STMTuesday, April 20, 2010

Page 84: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Deploy as dependency JAR in WEB-INF/lib etc. Run as stand-alone microkernel Soon OSGi-enabled, then drop

in any OSGi container (Spring DM server, Karaf etc.)

How to run it?

Tuesday, April 20, 2010

Page 85: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Akka Persistence

Tuesday, April 20, 2010

Page 86: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Persistence//transactionalCassandra‐backedMapvalmap=CassandraStorage.newMap

//transactionalRedis‐backedVectorvalvector=RedisStorage.newVector

//transactionalMongo‐backedRefvalref=MongoStorage.newRef

Tuesday, April 20, 2010

Page 87: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

REST

Comet

Security

...and much much more

Web

GuiceAMQP

Camel

Spring

Tuesday, April 20, 2010

Page 88: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

Learn morehttp://akkasource.org

Tuesday, April 20, 2010

Page 89: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

The commercialentity behind Akka

http://akkasource.com

Tuesday, April 20, 2010

Page 90: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

EOFTuesday, April 20, 2010

Page 91: Simpler Concurrency, Scalability & Fault-tolerance through ...days2011.scala-lang.org/node/138/162/16-2-M - Akka - Bonér.pdf · Akka: Simpler Concurrency, Scalability & Fault-tolerance

?Tuesday, April 20, 2010