CONCURRENCY                              IN                           PLAY 2.0                            Ola WibergWednes...
OVERVIEW    • Background    • Play         architecture    • Integrated Akka    • API    • Asynchronous           IOWednes...
A PLATFORM FOR                             THE FUTURE                               "The web has evolved from             ...
DESIGN DECISIONS    • Designed               for asynchronous HTTP    • Assumes               that any request is long-liv...
BACKGROUND                                Threads or Events    •   One process/thread per request    •   Single process fo...
A BETTER SOLUTION    • Threads              are good    • Events              are good    • Why                not make us...
Java EE compared to PlayWednesday, 11 July, 12
Play framework stackWednesday, 11 July, 12
PLAY CONCURRENCY    •   Integrated support for Akka              •   For concurrent, distributed, event-driven solutions  ...
Wednesday, 11 July, 12
AKKA         • Akka          is used internally for concurrency features in Play         • Built         in ActorSystem to...
WHEN TO USE AKKA         • When          executing long running tasks.              • Calculations, data    crunching, lon...
CREATE AN ACTOR                            Built in ActorSystemWednesday, 11 July, 12
USING AN ACTORWednesday, 11 July, 12
CREATE AN ACTOR SYSTEMWednesday, 11 July, 12
EXECUTE A TASK                          Without creating an ActorWednesday, 11 July, 12
HELPER METHODWednesday, 11 July, 12
CALLING A WEB SERVICEWednesday, 11 July, 12
REQUEST => RESPONSEWednesday, 11 July, 12
What type of request, stream or regular request?Wednesday, 11 July, 12
In-memory requestWednesday, 11 July, 12
Stream/socket based requestWednesday, 11 July, 12
REACTIVE MODEL                                            Async IO    • Handling              data streams reactively     ...
Example System OverviewWednesday, 11 July, 12
SUMMARY    • Play         2.0 is implemented for high concurrency applications    • Play         2.0 has a simple API for ...
THANK YOU!                            @OlaWiberg                         olawiberg@gmail.comWednesday, 11 July, 12
Upcoming SlideShare
Loading in …5
×

Play concurrency

1,591 views

Published on

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

No Downloads
Views
Total views
1,591
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
30
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

×