Beyond the Buzzword - a reactive application in practice
-
Upload
manuel-bernhardt -
Category
Engineering
-
view
247 -
download
2
Transcript of Beyond the Buzzword - a reactive application in practice
Beyond the buzzword:
a reac%ve web applica*on in prac*ce
Manuel Bernhardt - @elmanu
Slovak Scala Users' Group - May 2016
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Agenda
1. Evolu(on of web applica(on architecture
2. Evolu(on of hardware
3. Small Reac(ve Web Applica(on
4. Deployment
If you have a ques-on, shoot!
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Manuel Bernhardt
• I help established companies ge3ng started with using reac%ve applica%ons in their distributed systems infrastructure
• h9p://manuel.bernhardt.io
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Manuel Bernhardt
• I help established companies ge3ng started with using reac%ve applica%ons in their distributed systems infrastructure
• h9p://manuel.bernhardt.io
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
A short (and mostly wrong)history of web applica1on
architectureSlovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
"Good old days" architecture
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
"3 $er" architecture
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
"Cloud" architecture
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
"Cloud" architecture
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
"Microservices" architecture
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
"Microservices" = emerging architecture
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Trend: increasing amount of network I/O
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Trend: increasing amount of network I/O
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Reac%ve architectural pa/ern
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Evolu&on of hardware
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Evolu&on of CPUs
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Evolu&on of memory
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Conclusion
• many-core & distributed systems
• awesome hardware
• awesome so5ware? we need:
• explicit asynchronous programming
• explicit failure handling
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Let's build a small Reac0ve Web Applica0on
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Actors
• lightweight objects
• send and receive messages (mailbox)
• can have children (supervision)
"Long-lived" async computa5on
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
CODING
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Futuresscala.concurrent.Future[T]
• holds a value of type T
• can either fail or succeed
• async code does not block a thread while wai8ng for comple8on
"Short-lived" async computa6on
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Pipeakka.pattern.pipe
• bridge between Futures and Actors
• implemented as anonymous actor
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Pipeakka.pattern.pipe
• bridge between Futures and Actors
• implemented as anonymous actor
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Circuit Breakerakka.pattern.CircuitBreaker
• helpful when dealing with legacy / slow systems & prevents cascading failure
• like an electric circuit breaker, trips when there's a surge
• trips a=er a given number of failures, for a given >meout, then a?empts reset
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
DeploymentSlovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Deployment• stand-alone vs. "elas/c deployment"
• elas/c, fault-tolerant is not trivial
• use a managed service / solu/on
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Deployment
• Lightbend ConductR
• automated cluster management for Play / Akka / ... applica>ons
• automated node failure & network par++on resolu+on
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Deployment
• fully managed opera0ons
• auto scalability feature (horizontal & ver0cal)
• a<rac0ve pricing
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Load tes)ngSlovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Gatling
• open-source load tes0ng framework
• built with Scala, Akka and Ne=y
• two phases: record and run
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Gatling simula,on file// ...setUp( scn.inject( nothingFor(4 seconds), rampUsers(100) over(10 seconds), atOnceUsers(10), constantUsersPerSec(2) during(15 seconds) randomized, splitUsers(500) into ( rampUsers(50) over(10 seconds) ) separatedBy(2 seconds) ).protocols(httpProtocol))
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Bees with machine guns
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Configuring all the things
• Installing Python & bees with machine guns
• AWS console (keys, security group w/ SSH access)
• boto config file
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Configuring all the things
~/.boto
[Credentials]aws_access_key_id = foobar1aws_secret_access_key = foobar2
[Boto]debug = 2
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
A"ack!
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu
Thank you!Ques%ons & Comments ?
• h#p://manuel.bernhardt.io
• @elmanu
Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu