10. Ask: ?
// returns a future
val future = counter ? Current
val count: Option[Int] = future.as[Int]
returns the Future directly
Friday, September 30, 2011
11. Reply
class Counter extends Actor {
var counter = 0
def receive = {
case Tick =>
counter += 1
case Current =>
self.reply(counter)
}
}
Friday, September 30, 2011
13. Set dispatcher
object Shared {
val myDispatcher = Dispatchers
.newExecutorBasedEventDrivenDispatcher("my")
.setCorePoolSize(7)
.build
}
class MyActor extends Actor {
self.dispatcher = Shared.dispatcher
...
}
Friday, September 30, 2011
14. Example
Translation Service with HTTP API
- count words: 100 ms
- translate text: 100 ms
We have 8 threads
Must handle 4 concurrent request with
average response time of <110 ms
Friday, September 30, 2011
15. Example
HTTP Req
Web
Frontend
Translation
Service
Text Word
Translator Counter
Friday, September 30, 2011
16. Example
Source code:
https://github.com/patriknw/akka-playground
Friday, September 30, 2011
18. Typed Actors
trait Counter {
def tick(): Unit
def current: Int
}
Friday, September 30, 2011
19. Typed Actors
class CounterImpl extends
TypedActor with Counter {
private var counter = 0
def tick() {
counter += 1
}
def current = counter
}
Friday, September 30, 2011
20. Typed Actors
val counter = TypedActor.newInstance(
classOf[Counter],
classOf[CounterImpl])
counter.tick()
counter.tick()
val cur = counter.current
Friday, September 30, 2011
22. Remoting
// use host & port in config
Actor.remote.start()
Actor.remote.start("darkstar", 2552)
Scalable implementation based on
NIO (Netty) & Protobuf
Friday, September 30, 2011
23. Server
import Actor._
remote.register(“service:id”, actorOf[MyService])
server part
Friday, September 30, 2011
24. Client
val service = remote.actorFor(
“service:id”,
“darkstar”,
2552)
service ! message
client part
Friday, September 30, 2011
25. Remoting in Akka 1.2
Problem
Deployment (local vs remote) is a dev decision
We get a fixed and hard-coded topology
Can’t change it dynamically and adaptively
Needs to be a
deployment & runtime decision
Friday, September 30, 2011
26. Let it crash
fault-tolerance
Friday, September 30, 2011
27. Fault-tolerant
onion-layered
Error Kernel
Friday, September 30, 2011