This is a 300,000 ft view of coding resilient with Akka and Scala. It doesn't go into a lot of depth, and was really meant to be "presented", but hey... if it helps you out, awesome :)
6. ’s Resiliency?
What
W
Tolerance against faults
W
Grace in the face of insane success
W
Slowing down instead of shutting down
Resiliency is about reacting to the crap that happens
because life is, basically a problem
Tuesday, 4 February, 14
9. C
Cloud Resiliency
C
g to
Queues s. Virtual Machines
oin
C
mg
C
I’
ol
t to
m.
rea
G
the
use
C you Databases
Clustered
me
su
s
aZookeeper
C
Load
C Balancers
Tuesday, 4 February, 14
11. How Akka Helps
5 Akka is a toolki for asynchrony
Resilient systems are asynchronous systems
Tuesday, 4 February, 14
12. How Akka Helps
5 Akka is a toolki for asynchrony
Resilient systems are asynchronous systems
5 Akka is buil using queues
Queues add resilient points of communication
Tuesday, 4 February, 14
13. How Akka Helps
5 Akka is a toolki for asynchrony
Resilient systems are asynchronous systems
5 Akka is buil using queues
Queues add resilient points of communication
5 Akka divorces threads from work
Improper use of threads kills resiliency
Tuesday, 4 February, 14
14. How Akka Helps
5 Akka is a toolki for asynchrony
Resilient systems are asynchronous systems
5 Akka is buil using queues
Queues add resilient points of communication
5 Akka divorces threads from work
Improper use of threads kills resiliency
5 Akka’s Actors incorporate faul tolerance
A crash is just standard operating procedure
Tuesday, 4 February, 14
15. How Akka Helps
5 Akka is a toolki for asynchrony
Resilient systems are asynchronous systems
5 Akka is buil using queues
Queues add resilient points of communication
5 Akka divorces threads from work
Improper use of threads kills resiliency
5 Akka’s Actors incorporate faul tolerance
A crash is just standard operating procedure
5 Akka Clusters
Clustering? Come on... Resilient
Tuesday, 4 February, 14
16. How Akka Helps
5 Akka is a toolki for asynchrony
!
re
o
m
’s
re
e
th
d
n
Resilient systems are asynchronous systems
5 Akka is buil using queues
Queues add resilient points of communication
5 Akka divorces threads from work
Improper use of threads kills resiliency
A
5 Akka’s Actors incorporate faul tolerance
A crash is just standard operating procedure
5 Akka Clusters
Clustering? Come on... Resilient
Tuesday, 4 February, 14
17. Why We Don’t Code Resiliently
Tuesday, 4 February, 14
18. Why.k.a Don’t backResiliently
We Call Code Hell
a
1) REST request comes in
2) Validate user identity
3) Get profile from DB
4) Grab a few pics
5) Get recent Twitter activity
6) Return REST response
Tuesday, 4 February, 14
19. Why.k.a Don’t backResiliently
We Call Code Hell
a
Do i
1) REST request comes in
t
2) Validate user identity
and
3) Get profile from DB
4) Grab a few pics
5) Get recent Twitter activity
6) Return REST response
Tuesday, 4 February, 14
asyn
chro
nous
don’
ly
t bl
ock
20. Why.k.a Don’t backResiliently
We Call Code Hell
a
Do i
1) REST request comes in
t
2) Validate user identity
and
3) Get profile from DB
4) Grab a few pics
5) Get recent Twitter activity
6) Return REST response
asyn
chro
nous
don’
ly
t bl
ock
Welcome to Callback
Hell
Tuesday, 4 February, 14
22. ack Hell
Callb
public void restHandler(RESTRequest req) {
idService.validate(req.userInfo,
new Callback(ValidateResult result) {
if (result.isValid) {
db.getProfile(req.userId,
new Callback(UserProfile profile) {
picServer.get(profile.pic1, new Callback(Pic p1) {
picServer.get(profile.pic2, new Callback(Pic p2) {
picServer.get(profile.pic3, new Callback(Pic p3) {
picServer.get(profile.pic4, new Callback(Pic p4) {
picServer.get(profile.pic5, new Callback(Pic p5) {
twitterServer.getRecentActivity(req.userInfo, new Callback(TwitterActivity activity) {
req.sendResponse(pic1, pic2, pic3, pic4, pic5, activity)
})
})
})
})
})
})
}
})
Tuesday, 4 February, 14
})
23. ack Hell
Callb
public void restHandler(RESTRequest req) {
☉ We didn’t handle timeouts
idService.validate(req.userInfo,
new Callback(ValidateResult result) {
if (result.isValid) {
We didn’t handle
☉db.getProfile(req.userId, errors
new Callback(UserProfile profile) {
☉ We actually didn’t make it thread
picServer.get(profile.pic1, new Callback(Pic p1) {
picServer.get(profile.pic2, new Callback(Pic p2) {
☉
picServer.get(profile.pic3, new Callback(Pic p3) {
We did throw up a little though...
picServer.get(profile.pic4, new Callback(Pic p4) {
picServer.get(profile.pic5, new Callback(Pic p5) {
twitterServer.getRecentActivity(req.userInfo, new Callback(TwitterActivity activity) {
req.sendResponse(pic1, pic2, pic3, pic4, pic5, activity)
})
})
})
})
})
})
}
})
Tuesday, 4 February, 14
})
safe
29. The Circuit Breaker
⦿
For the times when you gotta fail the whale
Calls Failing
Fast
Su
cc
ess
p
Tri
r
ake
Bre
Open
eset
Closed
Trip
Reset Bre
Tuesday, 4 February, 14
Atte
mpt R
aker
Brea
ker
Half
Open
30. The Circuit Breaker
⦿
For the times when you gotta fail the whale
Calls Failing
Fast
Su
cc
ess
p
Tri
r
ake
Bre
Open
eset
Closed
Trip
Reset Bre
Tuesday, 4 February, 14
Atte
mpt R
aker
Brea
ker
Half
Open
DB
31. The Circuit Breaker
⦿
For the times when you gotta fail the whale
Calls Failing
Fast
Su
cc
ess
p
Tri
r
ake
Bre
Open
eset
Closed
Trip
Reset Bre
Tuesday, 4 February, 14
Atte
mpt R
pen
it O
ircu
C
aker
Brea
ker
Half
Open
Circu
it Clo
sed
DB
32. ad Balancing
Lo
Actors are untyped endpoints
You can easily swap one for another
Actors have dispatchers
How messages are dispatched is configurable
You can only communicate through messages
You can route them however you like
Messages can carry the state data
Actors then become completely stateless and
Resilient
Tuesday, 4 February, 14
34. Scaling Up
⦿ It’s all about dispatchers and untyped endpoints
Tuesday, 4 February, 14
35. Scaling Up
⦿ It’s all about dispatchers and untyped endpoints
ActorRef
Client
Actor
ActorRef
Balancing
Dispatcher
Actor
ActorRef
•
•
Tuesday, 4 February, 14
Actor
Normally the
message from the
client would go to
the middle Actor,
but the Balancing
Dispatcher lets
the last one “steal”
it because it can
handle it faster.
38. Scaling Out
☉Routers are another way for messages to reach Actors
A router igures ou which Actor
☉to send to based on rules
Tuesday, 4 February, 14
39. Scaling Out
☉Routers are another way for messages to reach Actors
A router igures ou which Actor
☉to send to based on rules
DB
Actor
Tuesday, 4 February, 14
Router
DB
Actor
DB Cluster
Machine 2
DB
Actor
Client
DB Cluster
Machine 1
DB Cluster
Machine 3
40. Scaling Out
☉Routers are another way for messages to reach Actors
A router igures ou which Actor
☉to send to based on rules
Client
Tuesday, 4 February, 14
Router
DB Cluster
Machine 1
DB
Actor
DB Cluster
Machine 2
DB
Actor
This router can
ute consistently
ro
based on sender
DB
Actor
DB Cluster
Machine 3
41. Scaling Out
☉Routers are another way for messages to reach Actors
A router igures ou which Actor
☉to send to based on rules
This router can
ute consistently
ro
based on sender
Client
☉
Router
Routers can also resize the
number o Actors dynamically
Tuesday, 4 February, 14
DB
Actor
DB Cluster
Machine 1
DB
Actor
DB Cluster
Machine 2
DB
Actor
DB Cluster
Machine 3
44. Clustering
Akka can spawn and communicate with Actors
⦿
on remote nodes
oring!
B
Tuesday, 4 February, 14
45. Clustering
Akka can spawn and communicate with Actors
⦿
on remote nodes
(OK, that’s really cool, but...)
oring!
B
Tuesday, 4 February, 14
46. Clustering
Akka can spawn and communicate with Actors
⦿
on remote nodes
(OK, that’s really cool, but...)
oring!
B
⦿ You can cluster your Actors as well
Tuesday, 4 February, 14
47. Clustering
Akka can spawn and communicate with Actors
⦿
on remote nodes
(OK, that’s really cool, but...)
oring!
B
⦿ You can cluster your Actors as well
Akka takes care of letting you know when
⦿
nodes come and go
Tuesday, 4 February, 14
48. Clustering
Akka can spawn and communicate with Actors
⦿
on remote nodes
(OK, that’s really cool, but...)
oring!
B
⦿ You can cluster your Actors as well
Akka takes care of letting you know when
⦿
nodes come and go
Clustering provides a ton of possibilities to
⦿
design for resiliency
Tuesday, 4 February, 14
49. nce - Event Sourcing
Persiste
Tuesday, 4 February, 14
50. nce - Event Sourcing
Persiste
⨂ Akka provides the ability to persist incoming messages
Tuesday, 4 February, 14
51. nce - Event Sourcing
Persiste
⨂ Akka provides the ability to persist incoming messages
⨂ This helps for fault tolerance... DUH
Tuesday, 4 February, 14
52. nce - Event Sourcing
Persiste
⨂ Akka provides the ability to persist incoming messages
⨂ This helps for fault tolerance... DUH
⨂ It also provides the ability to move stateful Actors
Tuesday, 4 February, 14
53. nce - Event Sourcing
Persiste
⨂ Akka provides the ability to persist incoming messages
⨂ This helps for fault tolerance... DUH
⨂ It also provides the ability to move stateful Actors
⨂ Or provide tools for “Crash-Only” software
sh!
ra
C Actor
Message
Actor
Event 1
Event 2
Event 3
Tuesday, 4 February, 14
Good to go!
55. Being Resilient
☉Akka provides the foundation for resilien programming and design
⨳ Queues, Dispatchers, Async, Messages, realistic guarantees
Tuesday, 4 February, 14
56. Being Resilient
☉Akka provides the foundation for resilien programming and design
⨳ Queues, Dispatchers, Async, Messages, realistic guarantees
☉
Then you ge...
Message Oriented
Flexibility
⨳ Routers
⨳
⨳ Persistence
⨳ Clustering
⨳ Resiliency Patterns
⨳ Remote Deployment
Tuesday, 4 February, 14
57. Being Resilient
☉Akka provides the foundation for resilien programming and design
⨳ Queues, Dispatchers, Async, Messages, realistic guarantees
☉
Then you ge...
Message Oriented
Flexibility
⨳ Routers
⨳
⨳ Persistence
⨳ Clustering
⨳ Resiliency Patterns
⨳ Remote Deployment
☉
Existing cloud components are vial for resiliency
Tuesday, 4 February, 14
58. Being Resilient
☉Akka provides the foundation for resilien programming and design
⨳ Queues, Dispatchers, Async, Messages, realistic guarantees
☉
Then you ge...
Message Oriented
Flexibility
⨳ Routers
⨳
⨳ Persistence
⨳ Clustering
⨳ Resiliency Patterns
⨳ Remote Deployment
☉
Akka picks up where those components leave of
☉
Existing cloud components are vial for resiliency
Tuesday, 4 February, 14
59. Go write some Code
Get Scala
http://scala-lang.org
http://github.com/scala/scala
Get Akka
http://akka.io
http://github.com/akka/akka
Tuesday, 4 February, 14
Derek Wyatt
Twitter: @derekwyatt
Email: derek@derekwyatt.org