SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
1.
Microservices in Play & Akka
Łukasz Sowa @luksow
Jacek Głodek @jacekglodek
2.
Play Framework
● General purpose
● (Aims to be) fully-blown web framework
● Part of Typesafe Reactive Platform
● For Java & Scala
● Popular (LinkedIn, Guardian, Klout, …)
● Not very well-suited for microservices...
● but still popular :)
5.
Routes (conf/routes)
● Type safe!
● VERB [path with params] [controller action]
– GET / controllers.OpenGraphFetcher.index
– GET /clients/:id controllers.ClientsController.show(id: Long)
– PUT /orders/:clientid controllers.OrdersController.create(clientId: Int)
● Body params (POST, PUT etc.) have to be
handled by Play forms or manually (ugly!)
6.
Controllers (app/controllers/*)
● Composable Actions
– Action: Request[A] => Result
– DBAction: Session => Result
– AuthAction: RequestWithUser[A] => Result
– …
● Can be async
7.
Views (app/views/*)
● Type safe templating language (twirl)
● Meh (aka leave it to frontenders)
8.
Coding!
1) Clone & run sample project
2) Add action that takes two params (login:
String, authToken: String), wire it to routes, test
3) Try authenticate your request with Redis
9.
OpenGraph Info Fetcher
● Given list of URLs return OG info
● Synchronous? (request - response)
● Waiting for all OGs to fetch
● How to handle failure?
● Or maybe polling?
● No, websockets!
● Answers ASAP
● Failure? Just screw it
10.
WebSockets
● Async of the web!
● Almost like good ol' TCP (BSD) sockets
Play-flavoured websockets:
● Iteratees (FP black magic, good for streams)
● Actors (❤, good for messages)
11.
Akka
● Toolkit for distributed & concurrent systems
● Based on concept of actor and messaging
Actor:
● Encapsulates mutable state
● Reacts to messages
● Sends messages to other actors it knows:
● By address/name
● Because they send him message
● Because they were created by it
● ...
12.
Actors in Akka
● Live in systems
● Can be distributed in space & time
● Process their messages sequentially
● No guarantees of message delivery/processing
● Can form tree-like hierarchies => supervision
13.
Coding!
1) Write echo websocket using Akka Actors
2) Test it in web browser
3) Write not-so-stringly-typed websocket
4) Test it in web browser
5) Write proper types for task
6) Implement OG fetching
7) Test it in web browser
8) (For brave & ambitious) Implement caching