Reactieve applicaties; klaar voor de toekomst

57
Reactieve applicaties Klaar voor de toekomst Allard Buijze – [email protected] JFall 2013

Transcript of Reactieve applicaties; klaar voor de toekomst

Page 1: Reactieve applicaties; klaar voor de toekomst

Reactieve applicatiesKlaar voor de toekomst

Allard Buijze – [email protected]

JFall 2013

Page 2: Reactieve applicaties; klaar voor de toekomst

Allard Buijze

Software Architect bij Trifork (Amsterdam)

Organsatoren van GOTO & QCON

15 jaar web development ervaring

Gelooft sterk in DDD en CQRS

Ontwikkelaar en initiatiefnemer van Axon Framework

Java Framework voor schaalbaarheid en performance

www.axonframework.org

Page 3: Reactieve applicaties; klaar voor de toekomst

Een kleine terugblik…

1990

0,3% van Nederland had internettoegang

0.001 PB / Maand data-transfer

2000

40% internettoegang

86 PB / Maand

2012

93% internettoegang

> 30 000 PB / Maand

Waarvan 885 PB / Maand mobiel

Page 4: Reactieve applicaties; klaar voor de toekomst

Layered architecture

Sinds 1970!

Page 5: Reactieve applicaties; klaar voor de toekomst

In de jaren 70…

Bron: wikipedia.org

Page 6: Reactieve applicaties; klaar voor de toekomst

In de jaren 70…

Bron: vintagecomputer.net

Page 7: Reactieve applicaties; klaar voor de toekomst

Het web in 2013… en verder…

Page 8: Reactieve applicaties; klaar voor de toekomst

Het web in 2013… en verder…

Page 9: Reactieve applicaties; klaar voor de toekomst

Het web in 2013… en verder…

Page 10: Reactieve applicaties; klaar voor de toekomst

Niet meer alleen Google en Twitter…

Page 11: Reactieve applicaties; klaar voor de toekomst
Page 12: Reactieve applicaties; klaar voor de toekomst

ReactiveMerriam Webster: Readily responsive to a stimulus

Page 13: Reactieve applicaties; klaar voor de toekomst

De kwaliteiten van een reactieve applicatie

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 14: Reactieve applicaties; klaar voor de toekomst

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 15: Reactieve applicaties; klaar voor de toekomst

Normaal...

BCgetState()

state

AdoSomething()

Page 16: Reactieve applicaties; klaar voor de toekomst

E

D

De “Event Driven” manier

BC event

AdoSomething()

pub-subevent

Page 17: Reactieve applicaties; klaar voor de toekomst

Event Driven – Amdahl’s Law

The speedup of a program using multiple processors in parallel computing is limited by

the sequential fraction of the program.

Page 18: Reactieve applicaties; klaar voor de toekomst

Procedural – Not parallelizable...

public void doMyBusinessLogic() {

doSomethingInternally();

externalComponent1.doSomethingRelated();

externalComponent2.doSomethingElse();

return someResult;

}

Page 19: Reactieve applicaties; klaar voor de toekomst

Procedural – Parallelizable, but ugly...

public void doMyBusinessLogic() {

doSomethingInternally();

threadPool.execute(new Runnable() { ...

externalComponent1.doSomethingRelated()});

threadPool.execute(new Runnable() { ...

externalComponent2.doSomethingElse()});

return someResult;

}

Page 20: Reactieve applicaties; klaar voor de toekomst

Parallelizable...

public void doMyBusinessLogic() {

doSomethingInternally();

eventPublisher.publish(aNotification());

return someResult;

}

public void handler(Notification n) {

doSomethingRelated();

}

Page 21: Reactieve applicaties; klaar voor de toekomst

Separation of concerns

BC eventpub-sub

event

Business logicaBusiness

logica

Infrastructuur- Locking- Threading- Netwerk / IO

No dependencyGeen harde afhankelijkheden

Page 22: Reactieve applicaties; klaar voor de toekomst

De kwaliteiten van een reactieve applicatie

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 23: Reactieve applicaties; klaar voor de toekomst

ScalableMerriam Webster: “capable of being easily

expanded or upgraded on demand”

Page 24: Reactieve applicaties; klaar voor de toekomst

Elasticiteit

Page 25: Reactieve applicaties; klaar voor de toekomst

Location transparency

Doet zich voor als lokale aanroep...

SomeServiceInterface service = new RemoteService(...)

result = service.callSomeMethod();

Page 26: Reactieve applicaties; klaar voor de toekomst

Location transparency – embrace the network

service.someMethod(someParameter, new Callback() {

public void onResult(Result result) {// do stuff with result

}

public void onError(Exception e) {// handle failure

}

});

Page 27: Reactieve applicaties; klaar voor de toekomst

Events – Inherently location transparent

E

D

Beventpub-sub

eventC

Page 28: Reactieve applicaties; klaar voor de toekomst

De kwaliteiten van een reactieve applicatie

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 29: Reactieve applicaties; klaar voor de toekomst

ResilientMerriam Webster: • the ability of a substance or object to spring back into shape• the capacity to recover quickly from difficulties

Page 30: Reactieve applicaties; klaar voor de toekomst

Voorbeelden genoeg…

“Barclays Bank System Crashes” (2012)

“Lloyds' banking systems failure hits 22m retail customers” (2012)

“Failure of American Airlines reservations system grounds all flights” (2013)

Page 31: Reactieve applicaties; klaar voor de toekomst

Observeer componenten

E

D

Beventpub-sub

eventC

!

!

Page 32: Reactieve applicaties; klaar voor de toekomst

Stability patterns

Bulkhead

Circuit breaker

Timeouts

Decoupling middleware

Handshaking

Test Harness

Let it crash!

Page 33: Reactieve applicaties; klaar voor de toekomst

Stability patterns – Bulkhead

Page 34: Reactieve applicaties; klaar voor de toekomst

Stability patterns – Bulkhead

Page 35: Reactieve applicaties; klaar voor de toekomst

Bulkhead in software

BC event

AdoSomething()

pub-subevent

!

Page 36: Reactieve applicaties; klaar voor de toekomst

Bulkhead in software

BC event

AdoSomething()

pub-subevent

Page 37: Reactieve applicaties; klaar voor de toekomst

Bulkhead in software

BC event

AdoSomething()

pub-subevent

Page 38: Reactieve applicaties; klaar voor de toekomst

Circuitbreaker

Page 39: Reactieve applicaties; klaar voor de toekomst

Stability patterns – Circuitbreaker

BC

AdoSomething()

doSomething()

checkStatus()!

Page 40: Reactieve applicaties; klaar voor de toekomst

Stability patterns

Bulkhead

Circuit breaker

Timeouts

Decoupling middleware

Handshaking

Test Harness

Let it crash!

Page 41: Reactieve applicaties; klaar voor de toekomst

De kwaliteiten van een reactieve applicatie

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 42: Reactieve applicaties; klaar voor de toekomst

ResponsiveMerriam Webster: “quick to respond or

react appropriately"

Page 43: Reactieve applicaties; klaar voor de toekomst

Responsive is...

Page 44: Reactieve applicaties; klaar voor de toekomst

Responsive is...

Collaborative

Real-time

Engaging

Rich

Page 45: Reactieve applicaties; klaar voor de toekomst

Dus niet....

Page 46: Reactieve applicaties; klaar voor de toekomst

Dus wel...

Page 47: Reactieve applicaties; klaar voor de toekomst

Observable models...

Server

subscribe()

notify()

Stateful Client

Page 48: Reactieve applicaties; klaar voor de toekomst

Als we toch al events hebben...

Stateful Client Server

event pub-subevent

subscribe

Page 49: Reactieve applicaties; klaar voor de toekomst

Latency....

latency

# vo

orko

men

s

latency

# vo

orko

men

s

Page 50: Reactieve applicaties; klaar voor de toekomst

Capacity planning – Hoe groot moet een queue zijn?

Zo “kort” mogelijk?

Lekker “lang”?

Onbeperkt?

Reken het uit, of meet het!

Pnn ( )1 Wq

Ws

1

Page 51: Reactieve applicaties; klaar voor de toekomst

Capacity planning

Tijd

# re

ques

ts

Page 52: Reactieve applicaties; klaar voor de toekomst

De kwaliteiten van een reactieve applicatie

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 53: Reactieve applicaties; klaar voor de toekomst

En hoe?

Tools en hulpmiddelen voor Reactive Applications

Page 54: Reactieve applicaties; klaar voor de toekomst

Tools en Frameworks

Akka – Actor Model

Axon Framework – CQRS / EDA

Spring Reactor – Async message processing

WebSockets (JSR-356) – Full duplex communicatie over http(s)

Lambda Expressions – Voorkom “callback hell”Method references

Page 55: Reactieve applicaties; klaar voor de toekomst

Latency

Capacity planningQueues

Resilience

Stability patterns

Bulkhead pattern

Circuit breaker

WebSockets

Embrace the network

Location transparencyEvent Driven

Responsive

Back pressure

Asynchronous

Real-time

Engaging

Collaborative

Responsive

Amdahl

Little’s Law

Axon Framework

Event Driven Architecture

Actor model

Akka

Spring Reactor

Lambda’s

Page 56: Reactieve applicaties; klaar voor de toekomst

reactivemanifesto.org

Page 57: Reactieve applicaties; klaar voor de toekomst

Vragen?

Meer informatie: www.reactivemanifesto.org

www.axonframework.org

[email protected]