Your SlideShare is downloading. ×
0
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Coding Resiliently with Akka
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Coding Resiliently with Akka

1,918

Published on

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 :)

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 :)

Published in: Technology, Business
0 Comments
16 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,918
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
44
Comments
0
Likes
16
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Coding in Resiliently Akka Scala with Derek Wyatt Twitter: @derekwyatt Email: derek@derekwyatt.org Tuesday, 4 February, 14
  • 2. ’s Resiliency? What Tuesday, 4 February, 14
  • 3. ’s Resiliency? What W Tolerance against faults Tuesday, 4 February, 14
  • 4. ’s Resiliency? What W Tolerance against faults W Grace in the face of insane success Tuesday, 4 February, 14
  • 5. ’s Resiliency? What W Tolerance against faults W Grace in the face of insane success W Slowing down instead of shutting down Tuesday, 4 February, 14
  • 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
  • 7. C Cloud Resiliency C Tuesday, 4 February, 14
  • 8. C Cloud Resiliency C Queues C Virtual Machines C C Clustered Databases Zookeeper C Tuesday, 4 February, 14 Load C Balancers
  • 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
  • 10. How Akka Helps 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
  • 21. ack Hell Callb 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
  • 24. synchrony nctional A Fu Tuesday, 4 February, 14
  • 25. synchrony nctional A Fu implicit val timeout = Timeout(30.seconds) def restHandler(req: RESTRequest): Future[RESTResponse] = { val resp = for { validity <- idService.validate(req.userInfo) if validity.isValid profile <- db.getProfile(req.userId) pic1 <- picServer.get(profile.pic1) pic2 <- picServer.get(profile.pic2) pic3 <- picServer.get(profile.pic3) pic4 <- picServer.get(profile.pic4) pic5 <- picServer.get(profile.pic5) activity <- twitterServer.getRecentActivity(req.userInfo) } yield SuccessfulResponse(pic1, pic2, pic3, pic4, pic5, activity) resp.recover { e => FailedResponse(e) } } Tuesday, 4 February, 14
  • 26. synchrony nctional A Fu implicit val timeout = Timeout(30.seconds) def restHandler(req: RESTRequest): Future[RESTResponse] = { val resp = for { validity <- idService.validate(req.userInfo) if validity.isValid profile <- db.getProfile(req.userId) pic1 <- picServer.get(profile.pic1) pic2 <- picServer.get(profile.pic2) pic3 <- picServer.get(profile.pic3) pic4 <- picServer.get(profile.pic4) pic5 <- picServer.get(profile.pic5) activity <- twitterServer.getRecentActivity(req.userInfo) } yield SuccessfulResponse(pic1, pic2, pic3, pic4, pic5, activity) resp.recover { e => FailedResponse(e) } } ☉ ☉ ☉ We handle timeouts (!!) ☉ We got to keep our lunch down Tuesday, 4 February, 14 We handle errors (!!) It’s immutable and thread safe (!!)
  • 27. The Circuit Breaker Tuesday, 4 February, 14
  • 28. The Circuit Breaker ⦿ For the times when you gotta fail the whale Tuesday, 4 February, 14
  • 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
  • 33. Scaling Up 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.
  • 36. Scaling Out Tuesday, 4 February, 14
  • 37. Scaling Out ☉Routers are another way for messages to reach Actors Tuesday, 4 February, 14
  • 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
  • 42. Clustering Tuesday, 4 February, 14
  • 43. Clustering Akka can spawn and communicate with Actors ⦿ on remote nodes Tuesday, 4 February, 14
  • 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!
  • 54. Being Resilient Tuesday, 4 February, 14
  • 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 vial 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 of ☉ Existing cloud components are vial 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

×