33
Go Reactive Blueprint for Future Applications Dr. Roland Kuhn — Akka Tech Lead, Typesafe Inc.

Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Go ReactiveBlueprint for Future Applications

Dr. Roland Kuhn — Akka Tech Lead, Typesafe Inc.

Page 2: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Starting Point: The User

Page 3: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

browserThe User

Page 4: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

browser frontend server

internal service

internal service storage

DB

external service

Page 5: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Responsiveness !

always available interactive

(near) real-time

Page 6: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• fan-out in parallel and aggregate

• use circuit breakers for graceful degradation

• use bounded queues, measure flow rates

Bounded Latency

Page 7: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• fan-out in parallel and aggregate

• use circuit breakers for graceful degradation

• use bounded queues, measure flow rates

Bounded Latency

A CB

Page 8: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• fan-out in parallel and aggregate

• use circuit breakers for graceful degradation

• use bounded queues, measure flow rates

Bounded Latency

A

C

B

Page 9: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• fan-out in parallel and aggregate

• use circuit breakers for graceful degradation

• use bounded queues, measure flow rates

Bounded Latency

A

C

B

event-driven

Page 10: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• fan-out in parallel and aggregate

• use circuit breakers for graceful degradation

• use bounded queues, measure flow rates

Bounded Latency

Page 11: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• fan-out in parallel and aggregate

• use circuit breakers for graceful degradation

• use bounded queues, measure flow rates

Bounded Latency

do work

fail fast

Page 12: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• fan-out in parallel and aggregate

• use circuit breakers for graceful degradation

• use bounded queues, measure flow rates

Bounded Latency

Page 13: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• fan-out in parallel and aggregate

• use circuit breakers for graceful degradation

• use bounded queues, measure flow rates

Bounded Latency

Little’s Law !

QueueLength = Rate • ProcessingTime !

Latency = QueueLength • ProcessingTime !

(averaging implied for all values)

Page 14: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• fan-out in parallel and aggregate

• use circuit breakers for graceful degradation

• use bounded queues, measure flow rates

Bounded Latency

Little’s Law !

QueueLength = Rate • ProcessingTime !

Latency = QueueLength • ProcessingTime !

(averaging implied for all values)

e

Page 15: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Handle Failure

• software will fail

• hardware will fail

• humans will fail

• system still needs to respond ➟ resilience

Page 16: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s
Page 17: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• parallel fan-out & distribution ➟ asynchronous execution

• compartmentalization & isolation

• no response? ➟ timeout events

• someone else’s exception? ➟ supervision

Asynchronous Failure

Page 18: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• parallel fan-out & distribution ➟ asynchronous execution

• compartmentalization & isolation

• no response? ➟ timeout events

• someone else’s exception? ➟ supervision

Asynchronous Failure

Page 19: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• parallel fan-out & distribution ➟ asynchronous execution

• compartmentalization & isolation

• no response? ➟ timeout events

• someone else’s exception? ➟ supervision

Asynchronous Failure

Request

Response

Failure

Page 20: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• parallel fan-out & distribution ➟ asynchronous execution

• compartmentalization & isolation

• no response? ➟ timeout events

• someone else’s exception? ➟ supervision

Asynchronous Failure

Request

Response

Failure

event-driven

Page 21: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

• parallel fan-out & distribution ➟ asynchronous execution

• compartmentalization & isolation

• no response? ➟ timeout events

• someone else’s exception? ➟ supervision

• location transparency ➟ seamless resilience

Asynchronous Failure

Page 22: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Handle Load

Page 23: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Handle Load

Page 24: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Handle Load

• partition incoming work for distribution

• scale capacity up and down on demand

• supervise and adapt

• location transparency ➟ seamless scalability

Page 25: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Handle Load

• partition incoming work for distribution

• scale capacity up and down on demand

• supervise and adapt

• location transparency ➟ seamless scalability

e

Page 26: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Consequences

• distribution & scalability ➟ loss of strong consistency

• CAP theorem? — not as relevant as you think

• eventual consistency ➟ gossip, heartbeats, dissemination

!

(http://pbs.cs.berkeley.edu)

Page 27: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Consequences

• distribution & scalability ➟ loss of strong consistency

• CAP theorem? — not as relevant as you think

• eventual consistency ➟ gossip, heartbeats, dissemination

!

(http://pbs.cs.berkeley.edu)e

Page 28: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Corollary

• Reactive needs to be applied all the way down

• Polyglot deployments demand collaboration

Page 29: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

But what about us, the developers?

Page 30: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Trust the Machine

• rethink the architecture

• break out of the synchronous blocking prison

• asynchronous program flow ➟ no step-through debugging

• loose coupling

Page 31: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Simple Building Blocks

• clean business logic separate from failure handling

• distributable units of work

• effortless parallelization

• less assumptions ➟ lower maintenance cost

Page 32: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

Simple Building Blocks

• clean business logic separate from failure handling

• distributable units of work

• effortless parallelization

• less assumptions ➟ lower maintenance cost

• independent agents ➟ fun to work with!

Page 33: Go Reactive - jfokus.se...•fan-out in parallel and aggregate! • use circuit breakers for graceful degradation! • use bounded queues, measure flow rates Bounded Latency Little’s

event-driven

responsive

resilient scalablereactive

http://reactivemanifesto.org/