Beyond the Buzzword - a reactive application in practice

Post on 16-Jan-2017

248 views 2 download

transcript

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

• manuel@bernhardt.io

• @elmanu

Slovak Scala Users' Group May 2016 - manuel.bernhardt.io - @elmanu