![Page 1: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/1.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-driven Architectures
Tom Van Cutsem
1
Programming Technology Lab
Vrije Universiteit Brussel
![Page 2: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/2.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Overview
Event-driven Programming Model
Event-driven Programming Techniques
Event-driven Architectures
2
![Page 3: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/3.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Call versus Event
Programming without a call stack
Much more flexible interactions
But... free synchronization & context are gone
3
call
return
call
return
fire event
fire event
fire event
![Page 4: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/4.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-driven Model
4
![Page 5: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/5.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-driven Model
4
Events
![Page 6: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/6.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-driven Model
4
Events Event Queue
![Page 7: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/7.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-driven Model
4
Events Event Queue
Event Loopwhile (true) { Event e = eventQueue.next(); switch (e.type) { ... }}
![Page 8: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/8.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-driven Model
4
Events Event Queue
Event Loop Event handlers
void onKeyPressed(KeyEvent e) { // process the event}
![Page 9: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/9.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Examples
GUI Frameworks (e.g. Java AWT)
Highly interactive applications (e.g. games)
Operating Systems
Discrete Event Modelling (e.g. simulations)
5
![Page 10: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/10.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-loop Concurrency
6
![Page 11: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/11.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-loop Concurrency
6
![Page 12: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/12.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-loop Concurrency
6
![Page 13: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/13.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-loop Concurrency
6
![Page 14: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/14.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
No locks, no deadlocks
No shared state, no race conditions
Event-loop Concurrency
6
![Page 15: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/15.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-driven Programming
![Page 16: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/16.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Return values
8
void processDelivery(Order o) { // request customer’s address Address a = customerService.requestAddress(o.customerId)); courier.shipToRequest(o, a);}
requestAddress
DeliveryService CustomerService
shipToRequest
![Page 17: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/17.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Callbacks
Dealing with asynchronous ‘return values’
9
void processDelivery(Order o) { // store order to retrieve it later orders.add(o); // request customer’s address customerService.receive( new RequestAddress(o.orderId, o.customerId));}
requestAddress
replyAddress
DeliveryService CustomerService
shipToRequest
![Page 18: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/18.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Callbacks
Dealing with asynchronous ‘return values’
9
void processDelivery(Order o) { // store order to retrieve it later orders.add(o); // request customer’s address customerService.receive( new RequestAddress(o.orderId, o.customerId));}
void replyAddress(AddressReply reply) { // retrieve order again Order o = orders.get(reply.orderId); Address a = reply.address; courier.receive(new ShipToRequest(o, a));}
requestAddress
replyAddress
DeliveryService CustomerService
shipToRequest
![Page 19: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/19.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Issues with Callbacks
Fragmented Code
Callback is out of context:
what is its originating call?
what was the state (e.g. local variables) when call was made?
requestAddress
replyAddress
DeliveryService CustomerService
requestAddress
replyAddress
?
10
![Page 20: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/20.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Futures
Placeholders for asynchronous return values
Typically synchronize when used
11
void processDelivery(Order o) { Future addressFuture = customerService.receive( new RequestAddress(o.customerId)); // do things that don’t require address Address adr = (Address) addressFuture.get(); courier.receive(new ShipToRequest(o, adr));}
f := requestAddress
f.resolve(address)
DeliveryService CustomerService
f.get()
shipToRequest
![Page 21: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/21.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Asynchronous Futures
Subscription of listeners that are executed when return value is available
12
void processDelivery(Order o) { Future addressFuture = customerService.receive( new RequestAddress(o.customerId)); addressFuture.addListener(new FutureListener() { void whenComputed(Result r) { Address adr = (Address) r; courier.receive(new ShipToRequest(o, adr)); } });}
f := requestAddress
f.resolve(address)
DeliveryService CustomerService
shipToRequest
![Page 22: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/22.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Event-driven Architecture
![Page 23: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/23.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
A program is composed of services
Services communicate via channels
Event-driven Architecture
14
Delivery Service
Stock Service
Billing Service
Order Service
Shopping Service
orderPlaced
orderPayedorderProcessed
checkout orderProcessed
![Page 24: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/24.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
ChannelsPoint-to-point: fixed endpoints
Publish-subscribe: very loose coupling
Example: Model-View-Controller
15
![Page 25: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/25.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
ChannelsPoint-to-point: fixed endpoints
Publish-subscribe: very loose coupling
Example: Model-View-Controller
15
yes 41no 44
abstain 15
Model
Votes
![Page 26: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/26.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
ChannelsPoint-to-point: fixed endpoints
Publish-subscribe: very loose coupling
Example: Model-View-Controller
15
0153045
15%
44%41%
0 33 67100
Views
yes 41no 44
abstain 15
Model
Votes
![Page 27: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/27.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
ChannelsPoint-to-point: fixed endpoints
Publish-subscribe: very loose coupling
Example: Model-View-Controller
15
0153045
15%
44%41%
0 33 67100
Views
yes 41no 44
abstain 15
Model
Votessubscribe
![Page 28: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/28.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
ChannelsPoint-to-point: fixed endpoints
Publish-subscribe: very loose coupling
Example: Model-View-Controller
15
0153045
15%
44%41%
0 33 67100
Views
yes 41no 44
abstain 15
Model
Votes
publish events
![Page 29: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/29.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Composing Services
Service Repository
Topic hierarchy:
Wildcard subscriptions
Additional level of abstraction
Service Repository
Client Service
Provider Service
publish subscribe
Root
Orders
Updates New
Online Fax
Payment
Credit Card
16
![Page 30: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/30.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
EDA: Benefits
Services are highly reusable
Highly reconfigurable (e.g. upgrades)
17
Old Service
Service
Replacement Service
retire
cancel subscription
synchronize
subscribe
![Page 31: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/31.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
EDA: Benefits
Unit Testing: testing services in isolation
18
Service under test
Client Service
Provider Service
Test Driver Mock-up service
Provides test data Verifies outgoing events
![Page 32: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/32.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
EDA: Benefits
Temporal decoupling:
services cannot block one another
more responsive applications
19
![Page 33: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/33.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Adaptor services easily introduced:
logging events
authenticating events
matching events to an updated interface
...
EDA: Benefits
20
Service A Service BAdaptor
![Page 34: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/34.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
EDA: Drawbacks
Loose coupling: implicit control flow
makes source code harder to understand
less compile-time checks, unit testing even more critical
tool support required for easy visualization and composition validation
21
![Page 35: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/35.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
EDA: Drawbacks
Temporal decoupling: non-determinism
Events may arrive in arbitrary order
make as little assumptions as possible on ordering
22
![Page 36: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/36.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Failure Handling
Pessimistic synchronization (e.g. 2PC protocol)
strong guarantees but...
kills asynchrony in the system
Optimistic synchronization (e.g. compensating actions)
works entirely asynchronously but...
system (temporarily) in inconsistent state23
![Page 37: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/37.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Conclusions
Event-driven programming = programming without a call stack
With flexibility comes more responsibility: return values, local state, ordering, ...
EDA: emphasis on loose coupling
Services easily reused
Concurrency becomes manageable
24
![Page 38: Event-driven Architectures - Vrije Universiteit Brusselsoft.vub.ac.be/~tvcutsem/talks/presentations/eda.pdf© 2006 Tom Van Cutsem - Programming Technology Lab Event-driven Architectures](https://reader034.vdocument.in/reader034/viewer/2022042308/5ed47b7d5b5aa30cb3151c4e/html5/thumbnails/38.jpg)
© 2006 Tom Van Cutsem - Programming Technology Lab
Concurrency among StrangersMiller, Tribble and ShapiroIn Symposium on Trustworthy global computing, LNCS Vol 3705, pp. 195-229, 2005
Enterprise Integration PatternsGregor Hohpe and Bobby WoolfAddison-Wesley
References
25
The Power of EventsDavid LuckhamAddison-Wesley
Programming without a call stackGregor HohpeAvailable online: www.enterpriseintegrationpatterns.com
Concurrent Object-oriented ProgrammingGul AghaIn Communications of the ACM, Vol 33 (9), p. 125, 1990