Upload
nljug
View
314
Download
2
Tags:
Embed Size (px)
DESCRIPTION
Citation preview
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
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
Layered architecture
Sinds 1970!
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…
ReactiveMerriam Webster: Readily responsive to a stimulus
De kwaliteiten van een reactieve applicatie
Reactive
Responsive
Resilient
Event-Driven
Scalable
Reactive
Responsive
Resilient
Event-Driven
Scalable
Normaal...
BCgetState()
state
AdoSomething()
E
D
De “Event Driven” manier
BC event
AdoSomething()
pub-subevent
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.
Procedural – Not parallelizable...
public void doMyBusinessLogic() {
doSomethingInternally();
externalComponent1.doSomethingRelated();
externalComponent2.doSomethingElse();
return someResult;
}
Procedural – Parallelizable, but ugly...
public void doMyBusinessLogic() {
doSomethingInternally();
threadPool.execute(new Runnable() { ...
externalComponent1.doSomethingRelated()});
threadPool.execute(new Runnable() { ...
externalComponent2.doSomethingElse()});
return someResult;
}
Parallelizable...
public void doMyBusinessLogic() {
doSomethingInternally();
eventPublisher.publish(aNotification());
return someResult;
}
public void handler(Notification n) {
doSomethingRelated();
}
Separation of concerns
BC eventpub-sub
event
Business logicaBusiness
logica
Infrastructuur- Locking- Threading- Netwerk / IO
No dependencyGeen harde afhankelijkheden
De kwaliteiten van een reactieve applicatie
Reactive
Responsive
Resilient
Event-Driven
Scalable
ScalableMerriam Webster: “capable of being easily
expanded or upgraded on demand”
Elasticiteit
Location transparency
Doet zich voor als lokale aanroep...
SomeServiceInterface service = new RemoteService(...)
result = service.callSomeMethod();
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
}
});
Events – Inherently location transparent
E
D
Beventpub-sub
eventC
De kwaliteiten van een reactieve applicatie
Reactive
Responsive
Resilient
Event-Driven
Scalable
ResilientMerriam Webster: • the ability of a substance or object to spring back into shape• the capacity to recover quickly from difficulties
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)
Observeer componenten
E
D
Beventpub-sub
eventC
!
!
Stability patterns
Bulkhead
Circuit breaker
Timeouts
Decoupling middleware
Handshaking
Test Harness
Let it crash!
Stability patterns – Bulkhead
Stability patterns – Bulkhead
Bulkhead in software
BC event
AdoSomething()
pub-subevent
!
Bulkhead in software
BC event
AdoSomething()
pub-subevent
Bulkhead in software
BC event
AdoSomething()
pub-subevent
Circuitbreaker
Stability patterns – Circuitbreaker
BC
AdoSomething()
doSomething()
checkStatus()!
Stability patterns
Bulkhead
Circuit breaker
Timeouts
Decoupling middleware
Handshaking
Test Harness
Let it crash!
De kwaliteiten van een reactieve applicatie
Reactive
Responsive
Resilient
Event-Driven
Scalable
ResponsiveMerriam Webster: “quick to respond or
react appropriately"
Responsive is...
Responsive is...
Collaborative
Real-time
Engaging
Rich
Dus niet....
Dus wel...
Observable models...
Server
subscribe()
notify()
Stateful Client
Als we toch al events hebben...
Stateful Client Server
event pub-subevent
subscribe
Latency....
latency
# vo
orko
men
s
latency
# vo
orko
men
s
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
Capacity planning
Tijd
# re
ques
ts
De kwaliteiten van een reactieve applicatie
Reactive
Responsive
Resilient
Event-Driven
Scalable
En hoe?
Tools en hulpmiddelen voor Reactive Applications
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
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
reactivemanifesto.org