Simpler Concurrency, Scalability & Fault-tolerance through...
Transcript of Simpler Concurrency, Scalability & Fault-tolerance through...
![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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/1.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/2.jpg)
•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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/3.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/4.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/5.jpg)
...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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/6.jpg)
...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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/7.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/8.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/9.jpg)
• 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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/10.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/11.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/12.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/13.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/14.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/15.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/16.jpg)
//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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/17.jpg)
//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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/18.jpg)
//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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/19.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/20.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/21.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/22.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/23.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/24.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/25.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/26.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/27.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/28.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/29.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/30.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/31.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/32.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/33.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/34.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/35.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/36.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/37.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/38.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/39.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/40.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/41.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/42.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/43.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/44.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/45.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/46.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/47.jpg)
//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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/48.jpg)
•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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/49.jpg)
//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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/50.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/51.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/52.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/53.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/54.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/55.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/56.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/57.jpg)
• 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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/58.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/59.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/60.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/61.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/62.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/63.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/64.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/65.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/66.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/67.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/68.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/69.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/70.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/71.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/72.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/73.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/74.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/75.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/76.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/77.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/78.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/79.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/80.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/81.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/82.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/83.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/84.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/85.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/86.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/87.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/88.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/89.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/90.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022040309/5f23075fbca18702c6260b84/html5/thumbnails/91.jpg)
?Tuesday, April 20, 2010