Reactieve applicaties allard buijze

download Reactieve applicaties   allard buijze

of 57

  • date post

    11-Nov-2014
  • Category

    Technology

  • view

    304
  • download

    2

Embed Size (px)

description

 

Transcript of Reactieve applicaties allard buijze

  • 1. Reactieve applicaties Klaar voor de toekomst JFall 2013 Allard Buijze allard.buijze@trifork.nl
  • 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. 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. Layered architecture
  • 5. In de jaren 70 Bron: wikipedia.org
  • 6. In de jaren 70 Bron: vintagecomputer.net
  • 7. Het web in 2013 en verder
  • 8. Het web in 2013 en verder
  • 9. Het web in 2013 en verder
  • 10. Niet meer alleen Google en Twitter
  • 11. Reactive Merriam Webster: Readily responsive to a stimulus
  • 12. De kwaliteiten van een reactieve applicatie Responsive Scalable Reactive EventDriven Resilient
  • 13. Responsive Scalable Reactive EventDriven Resilient
  • 14. Normaal... A C getState() state B
  • 15. De Event Driven manier A D C event E pub-sub event B
  • 16. Event Driven Amdahls Law The speedup of a program using multiple processors in parallel computing is limited by the sequential fraction of the program.
  • 17. Procedural Not parallelizable... public void doMyBusinessLogic() { doSomethingInternally(); externalComponent1.doSomethingRelated(); externalComponent2.doSomethingElse(); return someResult; }
  • 18. Procedural Parallelizable, but ugly... public void doMyBusinessLogic() { doSomethingInternally(); threadPool.execute(new Runnable() { ... externalComponent1.doSomethingRelated()}); threadPool.execute(new Runnable() { ... externalComponent2.doSomethingElse()}); return someResult; }
  • 19. Parallelizable... public void doMyBusinessLogic() { doSomethingInternally(); eventPublisher.publish(aNotification()); return someResult; } public void handler(Notification n) { doSomethingRelated(); }
  • 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. De kwaliteiten van een reactieve applicatie Responsive Scalable Reactive EventDriven Resilient
  • 22. Scalable Merriam Webster: capable of being easily expanded or upgraded on demand
  • 23. Elasticiteit
  • 24. Location transparency SomeServiceInterface service = new RemoteService(...) result = service.callSomeMethod(); Doet zich voor als lokale aanroep...
  • 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. Events Inherently location transparent D C event E pub-sub event B
  • 27. De kwaliteiten van een reactieve applicatie Responsive Scalable Reactive EventDriven Resilient
  • 28. Resilient Merriam Webster: the ability of a substance or object to spring back into shape the capacity to recover quickly from difficulties
  • 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. Observeer componenten D C event pub-sub event ! E ! B
  • 31. Stability patterns Bulkhead Circuit breaker Timeouts Decoupling middleware Handshaking Test Harness Let it crash!
  • 32. Stability patterns Bulkhead
  • 33. Stability patterns Bulkhead
  • 34. Bulkhead in software A ! C event pub-sub event B
  • 35. Bulkhead in software A C event pub-sub event B
  • 36. Bulkhead in software A C event pub-sub event B
  • 37. Circuitbreaker
  • 38. Stability patterns Circuitbreaker A C checkStatus() doSomething() ! B
  • 39. Stability patterns Bulkhead Circuit breaker Timeouts Decoupling middleware Handshaking Test Harness Let it crash!
  • 40. De kwaliteiten van een reactieve applicatie Responsive Scalable Reactive EventDriven Resilient
  • 41. Responsive Merriam Webster: quick to respond or react appropriately"
  • 42. Responsive is...
  • 43. Responsive is... Real-time Engaging Rich Collaborative
  • 44. Dus niet....
  • 45. Dus wel...
  • 46. Observable models... subscribe() notify() Stateful Client Server
  • 47. Als we toch al events hebben... pub-sub Stateful Client Server
  • 48. # voorkomens # voorkomens Latency.... latency latency
  • 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. # requests Capacity planning Tijd
  • 51. De kwaliteiten van een reactieve applicatie Responsive Scalable Reactive EventDriven Resilient
  • 52. En hoe? Tools en hulpmiddelen voor Reactive Applications
  • 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. Latency Respon