Download - Reactieve applicaties allard buijze

Transcript
Page 1: Reactieve applicaties   allard buijze

Reactieve applicatiesKlaar voor de toekomst

Allard Buijze – [email protected]

JFall 2013

Page 2: Reactieve applicaties   allard buijze

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   allard buijze

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   allard buijze

Layered architecture

Sinds 1970!

Page 5: Reactieve applicaties   allard buijze

In de jaren 70…

Bron: wikipedia.org

Page 6: Reactieve applicaties   allard buijze

In de jaren 70…

Bron: vintagecomputer.net

Page 7: Reactieve applicaties   allard buijze

Het web in 2013… en verder…

Page 8: Reactieve applicaties   allard buijze

Het web in 2013… en verder…

Page 9: Reactieve applicaties   allard buijze

Het web in 2013… en verder…

Page 10: Reactieve applicaties   allard buijze

Niet meer alleen Google en Twitter…

Page 11: Reactieve applicaties   allard buijze
Page 12: Reactieve applicaties   allard buijze

ReactiveMerriam Webster: Readily responsive to a stimulus

Page 13: Reactieve applicaties   allard buijze

De kwaliteiten van een reactieve applicatie

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 14: Reactieve applicaties   allard buijze

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 15: Reactieve applicaties   allard buijze

Normaal...

BCgetState()

state

AdoSomething()

Page 16: Reactieve applicaties   allard buijze

E

D

De “Event Driven” manier

BC event

AdoSomething()

pub-subevent

Page 17: Reactieve applicaties   allard buijze

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   allard buijze

Procedural – Not parallelizable...

public void doMyBusinessLogic() {

doSomethingInternally();

externalComponent1.doSomethingRelated();

externalComponent2.doSomethingElse();

return someResult;

}

Page 19: Reactieve applicaties   allard buijze

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   allard buijze

Parallelizable...

public void doMyBusinessLogic() {

doSomethingInternally();

eventPublisher.publish(aNotification());

return someResult;

}

public void handler(Notification n) {

doSomethingRelated();

}

Page 21: Reactieve applicaties   allard buijze

Separation of concerns

BC eventpub-sub

event

Business logicaBusiness

logica

Infrastructuur- Locking- Threading- Netwerk / IO

No dependencyGeen harde afhankelijkheden

Page 22: Reactieve applicaties   allard buijze

De kwaliteiten van een reactieve applicatie

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 23: Reactieve applicaties   allard buijze

ScalableMerriam Webster: “capable of being easily

expanded or upgraded on demand”

Page 24: Reactieve applicaties   allard buijze

Elasticiteit

Page 25: Reactieve applicaties   allard buijze

Location transparency

Doet zich voor als lokale aanroep...

SomeServiceInterface service = new RemoteService(...)

result = service.callSomeMethod();

Page 26: Reactieve applicaties   allard buijze

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   allard buijze

Events – Inherently location transparent

E

D

Beventpub-sub

eventC

Page 28: Reactieve applicaties   allard buijze

De kwaliteiten van een reactieve applicatie

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 29: Reactieve applicaties   allard buijze

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   allard buijze

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   allard buijze

Observeer componenten

E

D

Beventpub-sub

eventC

!

!

Page 32: Reactieve applicaties   allard buijze

Stability patterns

Bulkhead

Circuit breaker

Timeouts

Decoupling middleware

Handshaking

Test Harness

Let it crash!

Page 33: Reactieve applicaties   allard buijze

Stability patterns – Bulkhead

Page 34: Reactieve applicaties   allard buijze

Stability patterns – Bulkhead

Page 35: Reactieve applicaties   allard buijze

Bulkhead in software

BC event

AdoSomething()

pub-subevent

!

Page 36: Reactieve applicaties   allard buijze

Bulkhead in software

BC event

AdoSomething()

pub-subevent

Page 37: Reactieve applicaties   allard buijze

Bulkhead in software

BC event

AdoSomething()

pub-subevent

Page 38: Reactieve applicaties   allard buijze

Circuitbreaker

Page 39: Reactieve applicaties   allard buijze

Stability patterns – Circuitbreaker

BC

AdoSomething()

doSomething()

checkStatus()!

Page 40: Reactieve applicaties   allard buijze

Stability patterns

Bulkhead

Circuit breaker

Timeouts

Decoupling middleware

Handshaking

Test Harness

Let it crash!

Page 41: Reactieve applicaties   allard buijze

De kwaliteiten van een reactieve applicatie

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 42: Reactieve applicaties   allard buijze

ResponsiveMerriam Webster: “quick to respond or

react appropriately"

Page 43: Reactieve applicaties   allard buijze

Responsive is...

Page 44: Reactieve applicaties   allard buijze

Responsive is...

Collaborative

Real-time

Engaging

Rich

Page 45: Reactieve applicaties   allard buijze

Dus niet....

Page 46: Reactieve applicaties   allard buijze

Dus wel...

Page 47: Reactieve applicaties   allard buijze

Observable models...

Server

subscribe()

notify()

Stateful Client

Page 48: Reactieve applicaties   allard buijze

Als we toch al events hebben...

Stateful Client Server

event pub-subevent

subscribe

Page 49: Reactieve applicaties   allard buijze

Latency....

latency

# vo

orko

men

s

latency

# vo

orko

men

s

Page 50: Reactieve applicaties   allard buijze

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   allard buijze

Capacity planning

Tijd

# re

ques

ts

Page 52: Reactieve applicaties   allard buijze

De kwaliteiten van een reactieve applicatie

Reactive

Responsive

Resilient

Event-Driven

Scalable

Page 53: Reactieve applicaties   allard buijze

En hoe?

Tools en hulpmiddelen voor Reactive Applications

Page 54: Reactieve applicaties   allard buijze

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   allard buijze

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   allard buijze

reactivemanifesto.org

Page 57: Reactieve applicaties   allard buijze

Vragen?

Meer informatie: www.reactivemanifesto.org

www.axonframework.org

[email protected]