0
Reactieve applicaties
Klaar voor de toekomst
JFall 2013
Allard Buijze – allard.buijze@trifork.nl
Allard Buijze
Software Architect bij Trifork (Amsterdam)
Organsatoren van GOTO & QCON

15 jaar web development ervaring
Ge...
Een kleine terugblik…
1990
0,3% van Nederland had internettoegang
0.001 PB / Maand data-transfer

2000
40% internettoegang...
Layered architecture
In de jaren 70…

Bron: wikipedia.org
In de jaren 70…

Bron: vintagecomputer.net
Het web in 2013… en verder…
Het web in 2013… en verder…
Het web in 2013… en verder…
Niet meer alleen Google en Twitter…
Reactive
Merriam Webster: Readily responsive to a stimulus
De kwaliteiten van een reactieve applicatie

Responsive

Scalable

Reactive

EventDriven

Resilient
Responsive

Scalable

Reactive

EventDriven

Resilient
Normaal...

A
C

getState()

state

B
De “Event Driven” manier

A
D

C

event

E

pub-sub

event

B
Event Driven – Amdahl’s Law

The speedup of a program using multiple
processors in parallel computing is limited by
the se...
Procedural – Not parallelizable...
public void doMyBusinessLogic() {
doSomethingInternally();
externalComponent1.doSomethi...
Procedural – Parallelizable, but ugly...
public void doMyBusinessLogic() {
doSomethingInternally();
threadPool.execute(new...
Parallelizable...
public void doMyBusinessLogic() {
doSomethingInternally();
eventPublisher.publish(aNotification());
retu...
Separation of concerns

Business
logica

C

Infrastructuur
- Locking
- Threading
- Netwerk / IO

event

pub-sub

Geen hard...
De kwaliteiten van een reactieve applicatie

Responsive

Scalable

Reactive

EventDriven

Resilient
Scalable
Merriam Webster: “capable of being easily
expanded or upgraded on demand”
Elasticiteit
Location transparency

SomeServiceInterface service
= new RemoteService(...)
result = service.callSomeMethod();

Doet zich...
Location transparency – embrace the network

service.someMethod(someParameter, new Callback() {
public void onResult(Resul...
Events – Inherently location transparent

D

C

event

E

pub-sub

event

B
De kwaliteiten van een reactieve applicatie

Responsive

Scalable

Reactive

EventDriven

Resilient
Resilient
Merriam Webster:
• the ability of a substance or object to spring back into shape
• the capacity to recover quic...
Voorbeelden genoeg…

“Barclays Bank System Crashes” (2012)

“Lloyds' banking systems failure hits 22m retail customers” (2...
Observeer componenten

D

C

event

pub-sub

event

!

E

!

B
Stability patterns
Bulkhead
Circuit breaker

Timeouts
Decoupling middleware
Handshaking
Test Harness
Let it crash!
Stability patterns – Bulkhead
Stability patterns – Bulkhead
Bulkhead in software

A
!

C

event

pub-sub

event

B
Bulkhead in software

A
C

event

pub-sub

event

B
Bulkhead in software

A
C

event

pub-sub

event

B
Circuitbreaker
Stability patterns – Circuitbreaker

A
C

checkStatus()

doSomething()

!

B
Stability patterns
Bulkhead
Circuit breaker

Timeouts
Decoupling middleware
Handshaking
Test Harness
Let it crash!
De kwaliteiten van een reactieve applicatie

Responsive

Scalable

Reactive

EventDriven

Resilient
Responsive
Merriam Webster: “quick to respond or
react appropriately"
Responsive is...
Responsive is...



Real-time



Engaging



Rich



Collaborative
Dus niet....
Dus wel...
Observable models...

subscribe()
notify()

Stateful Client

Server
Als we toch al events hebben...

pub-sub

Stateful Client

Server
# voorkomens 

# voorkomens 

Latency....

latency 

latency 
Capacity planning – Hoe groot moet een queue zijn?
Zo “kort” mogelijk?

Lekker “lang”?

Onbeperkt?

Reken het uit, of meet...
# requests 

Capacity planning

Tijd 
De kwaliteiten van een reactieve applicatie

Responsive

Scalable

Reactive

EventDriven

Resilient
En hoe?
Tools en hulpmiddelen voor Reactive Applications
Tools en Frameworks
Akka

– Actor Model

Axon Framework

– CQRS / EDA

Spring Reactor

– Async message processing

WebSock...
Latency

Responsive

Axon Framework

Event Driven

Resilience

Location transparency
Actor model

Capacity planning

Queue...
reactivemanifesto.org
Vragen?
Meer informatie: www.reactivemanifesto.org
www.axonframework.org
allard.buijze@trifork.nl
Reactieve applicaties; klaar voor de toekomst
Upcoming SlideShare
Loading in...5
×

Reactieve applicaties; klaar voor de toekomst

232

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
232
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • low-level primitives (locking, threading) are part of infrastructureApplication code doesn’t expose “real infrastructure”Loose coupling between components
  • Transcript of "Reactieve applicaties; klaar voor de toekomst"

    1. 1. Reactieve applicaties Klaar voor de toekomst JFall 2013 Allard Buijze – allard.buijze@trifork.nl
    2. 2. 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
    3. 3. 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
    4. 4. Layered architecture
    5. 5. In de jaren 70… Bron: wikipedia.org
    6. 6. In de jaren 70… Bron: vintagecomputer.net
    7. 7. Het web in 2013… en verder…
    8. 8. Het web in 2013… en verder…
    9. 9. Het web in 2013… en verder…
    10. 10. Niet meer alleen Google en Twitter…
    11. 11. Reactive Merriam Webster: Readily responsive to a stimulus
    12. 12. De kwaliteiten van een reactieve applicatie Responsive Scalable Reactive EventDriven Resilient
    13. 13. Responsive Scalable Reactive EventDriven Resilient
    14. 14. Normaal... A C getState() state B
    15. 15. De “Event Driven” manier A D C event E pub-sub event B
    16. 16. 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.
    17. 17. Procedural – Not parallelizable... public void doMyBusinessLogic() { doSomethingInternally(); externalComponent1.doSomethingRelated(); externalComponent2.doSomethingElse(); return someResult; }
    18. 18. Procedural – Parallelizable, but ugly... public void doMyBusinessLogic() { doSomethingInternally(); threadPool.execute(new Runnable() { ... externalComponent1.doSomethingRelated()}); threadPool.execute(new Runnable() { ... externalComponent2.doSomethingElse()}); return someResult; }
    19. 19. Parallelizable... public void doMyBusinessLogic() { doSomethingInternally(); eventPublisher.publish(aNotification()); return someResult; } public void handler(Notification n) { doSomethingRelated(); }
    20. 20. Separation of concerns Business logica C Infrastructuur - Locking - Threading - Netwerk / IO event pub-sub Geen harde No dependency afhankelijkheden Business logica event B
    21. 21. De kwaliteiten van een reactieve applicatie Responsive Scalable Reactive EventDriven Resilient
    22. 22. Scalable Merriam Webster: “capable of being easily expanded or upgraded on demand”
    23. 23. Elasticiteit
    24. 24. Location transparency SomeServiceInterface service = new RemoteService(...) result = service.callSomeMethod(); Doet zich voor als lokale aanroep...
    25. 25. 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 } });
    26. 26. Events – Inherently location transparent D C event E pub-sub event B
    27. 27. De kwaliteiten van een reactieve applicatie Responsive Scalable Reactive EventDriven Resilient
    28. 28. Resilient Merriam Webster: • the ability of a substance or object to spring back into shape • the capacity to recover quickly from difficulties
    29. 29. 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)
    30. 30. Observeer componenten D C event pub-sub event ! E ! B
    31. 31. Stability patterns Bulkhead Circuit breaker Timeouts Decoupling middleware Handshaking Test Harness Let it crash!
    32. 32. Stability patterns – Bulkhead
    33. 33. Stability patterns – Bulkhead
    34. 34. Bulkhead in software A ! C event pub-sub event B
    35. 35. Bulkhead in software A C event pub-sub event B
    36. 36. Bulkhead in software A C event pub-sub event B
    37. 37. Circuitbreaker
    38. 38. Stability patterns – Circuitbreaker A C checkStatus() doSomething() ! B
    39. 39. Stability patterns Bulkhead Circuit breaker Timeouts Decoupling middleware Handshaking Test Harness Let it crash!
    40. 40. De kwaliteiten van een reactieve applicatie Responsive Scalable Reactive EventDriven Resilient
    41. 41. Responsive Merriam Webster: “quick to respond or react appropriately"
    42. 42. Responsive is...
    43. 43. Responsive is...  Real-time  Engaging  Rich  Collaborative
    44. 44. Dus niet....
    45. 45. Dus wel...
    46. 46. Observable models... subscribe() notify() Stateful Client Server
    47. 47. Als we toch al events hebben... pub-sub Stateful Client Server
    48. 48. # voorkomens  # voorkomens  Latency.... latency  latency 
    49. 49. Capacity planning – Hoe groot moet een queue zijn? Zo “kort” mogelijk? Lekker “lang”? Onbeperkt? Reken het uit, of meet het! Pn n (1 ) Wq Ws 1
    50. 50. # requests  Capacity planning Tijd 
    51. 51. De kwaliteiten van een reactieve applicatie Responsive Scalable Reactive EventDriven Resilient
    52. 52. En hoe? Tools en hulpmiddelen voor Reactive Applications
    53. 53. 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 Method references – Voorkom “callback hell”
    54. 54. Latency Responsive Axon Framework Event Driven Resilience Location transparency Actor model Capacity planning Queues Event Driven Architecture Collaborative Embrace the network Stability patterns Amdahl Real-time Akka Engaging Circuit breaker Back pressure Asynchronous Responsive Lambda’s Bulkhead pattern WebSockets Little’s Law Spring Reactor
    55. 55. reactivemanifesto.org
    56. 56. Vragen? Meer informatie: www.reactivemanifesto.org www.axonframework.org allard.buijze@trifork.nl
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×