Play concurrency

1,372 views
1,172 views

Published on

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

No Downloads
Views
Total views
1,372
On SlideShare
0
From Embeds
0
Number of Embeds
16
Actions
Shares
0
Downloads
27
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Play concurrency

  1. 1. CONCURRENCY IN PLAY 2.0 Ola WibergWednesday, 11 July, 12
  2. 2. OVERVIEW • Background • Play architecture • Integrated Akka • API • Asynchronous IOWednesday, 11 July, 12
  3. 3. A PLATFORM FOR THE FUTURE "The web has evolved from static to dynamic to real-time." "Play is a framework for highly-scalable real-time applications!"Wednesday, 11 July, 12
  4. 4. DESIGN DECISIONS • Designed for asynchronous HTTP • Assumes that any request is long-lived (streams/sockets) • Concurrency using Actors (Akka) instead of Threads • Reactive (event based) model for IO • Keep things simple!Wednesday, 11 July, 12
  5. 5. BACKGROUND Threads or Events • One process/thread per request • Single process for all requests • Resource intense / upper bound • Less resource intense limit • State maintained in program • State is handled by the stack • Single event-loop, with event • Requests handled in "isolation" call-backs • Easy to track control flow • Difficult to track control flow • Apache, Tomcat • Lighttp, NodejsWednesday, 11 July, 12
  6. 6. A BETTER SOLUTION • Threads are good • Events are good • Why not make use of them both? • To do it well the complete framework stack needs to support it!Wednesday, 11 July, 12
  7. 7. Java EE compared to PlayWednesday, 11 July, 12
  8. 8. Play framework stackWednesday, 11 July, 12
  9. 9. PLAY CONCURRENCY • Integrated support for Akka • For concurrent, distributed, event-driven solutions • Asynchronous IO (play specific) • Reactive model using Iteratee IO • Event driven, non-blocking IO (streams/sockets) • Netty for HTTP • Asynchronous event-driven framework (NIO) • Stateless architectureWednesday, 11 July, 12
  10. 10. Wednesday, 11 July, 12
  11. 11. AKKA • Akka is used internally for concurrency features in Play • Built in ActorSystem to be used by the application • play.api.libs.concurrent.Akka helper object • Startup new ActorSystems • Access remote ActorSystemsWednesday, 11 July, 12
  12. 12. WHEN TO USE AKKA • When executing long running tasks. • Calculations, data crunching, long running queries. • When accessing web services. • When accessing remote ActorSystems. • When scheduling tasks.Wednesday, 11 July, 12
  13. 13. CREATE AN ACTOR Built in ActorSystemWednesday, 11 July, 12
  14. 14. USING AN ACTORWednesday, 11 July, 12
  15. 15. CREATE AN ACTOR SYSTEMWednesday, 11 July, 12
  16. 16. EXECUTE A TASK Without creating an ActorWednesday, 11 July, 12
  17. 17. HELPER METHODWednesday, 11 July, 12
  18. 18. CALLING A WEB SERVICEWednesday, 11 July, 12
  19. 19. REQUEST => RESPONSEWednesday, 11 July, 12
  20. 20. What type of request, stream or regular request?Wednesday, 11 July, 12
  21. 21. In-memory requestWednesday, 11 July, 12
  22. 22. Stream/socket based requestWednesday, 11 July, 12
  23. 23. REACTIVE MODEL Async IO • Handling data streams reactively • Remove IO stream limitation (Blocking, memory, threads) • “React” to input only at a rate it is needed (no buffering) • Implemented using Iteratees, Enumerators, Enumeratees (Consumer/Producer Pattern) • Topic for another presentation!Wednesday, 11 July, 12
  24. 24. Example System OverviewWednesday, 11 July, 12
  25. 25. SUMMARY • Play 2.0 is implemented for high concurrency applications • Play 2.0 has a simple API for concurrency features • Play 2.0 is great for: • high throughput, low memory usage • many concurrent requests / socket connectionWednesday, 11 July, 12
  26. 26. THANK YOU! @OlaWiberg olawiberg@gmail.comWednesday, 11 July, 12

×