Upload
manuel-bernhardt
View
138
Download
2
Embed Size (px)
Citation preview
Beyond the buzzword:
a reac%ve web applica*on in prac*ce
Manuel Bernhardt - @elmanu
Enterprise Java User Group Linz - September 2016
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Agenda
1. Reac've applica'ons: why, what
2. Small Reac've Web Applica'on
3. Deployment & Load tes'ng
If you have a ques-on, shoot!
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Manuel Bernhardt
• I help mid-sized telecommunica4ons and technology companies ge7ng started with reac4ve microservice-based systems to speed up and scale IT delivery
• h=p://manuel.bernhardt.io
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Manuel Bernhardt
• I help mid-sized telecommunica4ons and technology companies ge7ng started with reac4ve microservice-based systems to speed up and scale IT delivery
• h=p://manuel.bernhardt.io
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Reac%ve applica%ons: why, what
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Root cause 1:evolu&on of so+ware architecture
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
"Good old days" architecture
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
"3 $er" architecture
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
"Cloud" architecture
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
"Microservices" architecture
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
=> Increasing amount of network I/O
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
=> Increasing amount of network I/O
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Root cause 2: evolu.on of hardware
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Why reac)ve ?
1. Distributed systems are the rule, not the excep1on
2. Programming needs to acknowledge the existance of many hardware threads, the lost opportunity of not using it & the cost of locking
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
What reac)ve ?
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Reac%ve systems are distributed systems
(they're a subset thereof)
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
What's the main difference between a distributed system and a non-
distributed system?
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
What's the main difference between a distributed system and a non-
distributed system?
Distributed systems fail much more o-en (and in much stranger ways)
than non-distributed onesEnterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
FailureFailure is a first-class ci.zen in reac.ve systems. They're designed for failure.
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Handling failure
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Handling failure• checked excep*ons are a terrible idea in the context of reac*ve /
distributed systems
• languages, tools and pa<erns for streamlining failure handling: Func*onal Programming, Futures, Message Passing
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Don't try to hide the network!• CORBA, RPC & friends: trying to abstract away the network
• what happens when the network call
• ... fails
• ... is slow
• ... is some%mes slow
• ... someAmes fails, someAmes doesn't
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Don't try to hide the network!
• ignoring of the Fallacies of Distributed Compu8ng (Deutsch & Gosling)
• ignoring the CAP theorem
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Reac%ve architectural pa/ern
h"p://www.reac,vemanifesto.org
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Reac%ve Systems - Conclusion
• Reac&ve Systems are designed for failure
• Reac&ve Systems are distributed, replicated accross several nodes (can scale up and down)
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Let's build a small Reac0ve Web Applica0on
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Actors
• lightweight objects
• send and receive messages (mailbox)
• can have children (supervision)
"Long-lived" async computa5on
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
CODING
Enterprise JUG September 2016 Linz - 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
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Pipeakka.pattern.pipe
• bridge between Futures and Actors
• implemented as anonymous actor
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Pipeakka.pattern.pipe
• bridge between Futures and Actors
• implemented as anonymous actor
Enterprise JUG September 2016 Linz - 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
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
DeploymentEnterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Deployment• stand-alone vs. "elas/c deployment"
• elas/c, fault-tolerant is not trivial
• use a managed service / solu/on
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Deployment
• Lightbend ConductR
• automated cluster management for Play / Akka / ... applica>ons
• automated node failure & network par++on resolu+on
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Deployment
• fully managed opera0ons
• auto scalability feature (horizontal & ver0cal)
• a<rac0ve pricing
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Load tes)ngEnterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Gatling
• open-source load tes0ng framework
• built with Scala, Akka and Ne=y
• two phases: record and run
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - 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))
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Bees with machine guns
Enterprise JUG September 2016 Linz - 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
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Configuring all the things
~/.boto
[Credentials]aws_access_key_id = foobar1aws_secret_access_key = foobar2
[Boto]debug = 2
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
A"ack!
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu
Thank you!Ques%ons & Comments ?
• h#p://manuel.bernhardt.io
• @elmanu
Enterprise JUG September 2016 Linz - manuel.bernhardt.io - @elmanu