The document discusses how event-driven architecture and event-based design principles are reshaping modern systems. Some key points:
- Events increase autonomy, reduce risk, help systems move faster, improve loose coupling, stability, scalability, resilience and traceability.
- Modern architectures like cloud, microservices and distributed systems benefit from event-driven approaches. Events also help with data-centric applications and meeting increasing customer demands.
- High-level abstractions powered by message-driven fabrics are needed to address limitations of low-level event loops and callbacks. Event-driven services publish facts as events and use event streams for integration.
- Thinking in terms of immutable events and promises can help increase certainty
4. 1. Events drive autonomy
2. Events help reduce risk
3. Events help you move faster
4. Events Increase Loose coupling
5. Events increase stability
6. Events increase scalability
7. Events increase resilience
8. Events increase traceability
9. Events allow for time-travel
Why Should you care?
5. 1. Cloud and multicore architectures
2. Microservices and distributed systems
3. Data-centric applications
4. “We want more, of everything, and we
want it now.” - Your Customers
6. Why Now?
1. Cloud and multicore architectures
2. Microservices and distributed systems
3. Data-centric applications
4. “We want more, of everything, and we
want it now.” - Your Customers
9. “Event-Driven Architecture (EDA) is a design paradigm
in which a software component executes in response
to receiving one or more event notifications.”
- Gartner
Event Driven
Architecture
To The Rescue
14. ✴Events represent Facts of information
➡ Facts are immutable
➡ Facts Accrue - Knowledge can only grow
The Nature of Events
15. ✴Events represent Facts of information
➡ Facts are immutable
➡ Facts Accrue - Knowledge can only grow
✴ Events/Facts can be disregarded/Ignored
The Nature of Events
16. ✴Events represent Facts of information
➡ Facts are immutable
➡ Facts Accrue - Knowledge can only grow
✴ Events/Facts can be disregarded/Ignored
✴ Events/Facts Can not be retracted (once accepted)
The Nature of Events
17. ✴Events represent Facts of information
➡ Facts are immutable
➡ Facts Accrue - Knowledge can only grow
✴ Events/Facts can be disregarded/Ignored
✴ Events/Facts Can not be retracted (once accepted)
✴ Events/Facts Can not be deleted (once accepted)
➡ Might be needed for legal or moral reasons
The Nature of Events
18. ✴Events represent Facts of information
➡ Facts are immutable
➡ Facts Accrue - Knowledge can only grow
✴ Events/Facts can be disregarded/Ignored
✴ Events/Facts Can not be retracted (once accepted)
✴ Events/Facts Can not be deleted (once accepted)
➡ Might be needed for legal or moral reasons
✴ Events/Facts (new) can invalidate existing Facts
The Nature of Events
20. ✴ Queue + anonymous Callbacks
✴ The Hollywood principle
✴ At-Most-Once delivery guarantees
✴ Local context only
✴ Sync or AsynC
✴ Limited and quite powerless
The Event Loop
21. ✴ Queue + anonymous Callbacks
✴ The Hollywood principle
✴ At-Most-Once delivery guarantees
✴ Local context only
✴ Sync or AsynC
✴ Limited and quite powerless
The Event Loop
*
* Too limited as a general model of computation, and programming model for modern distributed systems. But is a useful building block.
22. ✴ Ephemeral and anonymous
✴ No sane failure model
Error Channel - console.log(‘4/0=err’, err)
✴ No composition
Signature: Input => Side-effect - (Any => Unit)
✴ Hard to Debug
✴ Hard to reason about
✴ Leads to Callback hell
The Problem With
Event Callbacks
25. ✴Patterns
Observer, Pub-Sub, Broadcast, …
✴Futures & PRomises
✴Dataflow Variables
✴Stream Processing
✴ Event-driven Microservices
✴ FaaS
We Need High Level
Abstractions
26. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Ladder of
abstraction
27. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Network Boundary
Ladder of
abstraction
28. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Network Boundary
Ladder of
abstraction
29. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Network Boundary
Ladder of
abstraction
30. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Unified API (Event-driven Microservices, Patterns, Streams, Futures, FaaS,…)
Network Boundary
Ladder of
abstraction
31. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Unified API (Event-driven Microservices, Patterns, Streams, Futures, FaaS,…)
Network Boundary
Event 1Ladder of
abstraction
32. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Unified API (Event-driven Microservices, Patterns, Streams, Futures, FaaS,…)
Local Event Loop
Network Boundary
Event 1Ladder of
abstraction
33. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Unified API (Event-driven Microservices, Patterns, Streams, Futures, FaaS,…)
Local Event Loop
Distribution Fabric
Network Boundary
Event 1Ladder of
abstraction
34. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Unified API (Event-driven Microservices, Patterns, Streams, Futures, FaaS,…)
Local Event Loop
Distribution Fabric Distribution Fabric
Network Boundary
Message Passing
Event 1Ladder of
abstraction
35. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Unified API (Event-driven Microservices, Patterns, Streams, Futures, FaaS,…)
Local Event Loop
Distribution Fabric
Local Event Loop
Distribution Fabric
Network Boundary
Message Passing
Event 1Ladder of
abstraction
36. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Unified API (Event-driven Microservices, Patterns, Streams, Futures, FaaS,…)
Local Event Loop
Distribution Fabric
Local Event Loop
Distribution Fabric
Network Boundary
Message Passing
Event 1Ladder of
abstraction
37. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Unified API (Event-driven Microservices, Patterns, Streams, Futures, FaaS,…)
Local Event Loop
Distribution Fabric
Local Event Loop
Distribution Fabric
Network Boundary
Message Passing
Event 1 Event 1Ladder of
abstraction
38. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Unified API (Event-driven Microservices, Patterns, Streams, Futures, FaaS,…)
Local Event Loop
Distribution Fabric
Local Event Loop
Distribution Fabric
Network Boundary
Message Passing
Event 1 Event 1
Reactive Systems is doing the heavy lifting
Ladder of
abstraction
39. Unified Event Driven Abstractions
Powered By
Message Driven Fabric
Unified API (Event-driven Microservices, Patterns, Streams, Futures, FaaS,…)
Local Event Loop
Distribution Fabric
Local Event Loop
Distribution Fabric
Network Boundary
Message Passing
Event 1 Event 1
Reactive Systems is doing the heavy lifting
Ladder of
abstraction Reactive Programming
40. 1. REceive and react to facts (or not), that
are coming its way
2. Publish new facts (as events) to the rest
of the world
3. Invert the control flow to minimize
coupling and increase autonomy
Event Driven
Services
63. Welcome To The Wild Ocean Of
Non Determinism
Distributed Systems
64. “In a system which cannot count on
distributed transactions, the
management of uncertainty must be
implemented in the business logic.”
- Pat Helland
Life Beyond Distributed Transactions - An Apostate’s Opinion, Pat Helland (2007)
We Need To Model
Uncertainty
74. ✴Impositions diverge
into unpredictable outcomes
from definite beginnings
Distributed information
Decreased certainty
Convergence
vs.
Divergence
of information
✴Promises converge
towards a definite outcome
from unpredictable beginnings
Local information
Improved certainty
75. “Autonomy makes information local,
leading to greater certainty and stability.”
“An autonomus component can only
promise its own behavior.”
- Mark Burgess
In Search of Certainty, Thinking in Promises - Mark Burgess
77. ✴ If a service only promises its own behavior
Then all information needed to
➡ Resolve a conflict
➡ Repair under failure
➡ Is available within the service itself
Benefits of Thinking in Promises
78. ✴ If a service only promises its own behavior
Then all information needed to
➡ Resolve a conflict
➡ Repair under failure
➡ Is available within the service itself
✴ Promises remove the need for needless
1. Communication
2. Coordination
3. Consensus
Benefits of Thinking in Promises
79. “The first principle of successful
scalability is to batter the consistency
mechanisms down to a minimum.”
- James Hamilton
As transcribed in: Toward a Cloud Computing Research Agenda. SIGACT News, 40(2):68–80, June 2009.
82. “When you start modeling events, it
forces you to think about the behavior
of the system. As opposed to thinking
about the structure of the system.”
- Greg Young
A Decade of DDD, CQRS, Event Sourcing, Greg Young (Presentation from 2016)
83. ✴ Don’t focus on the things
The Nouns
The Domain Objects
✴ Focus on what happens
The Verbs
The Events
89. ✴ IntentS
➡ Communication
➡ Conversations
➡ Expectations
➡ Contracts
➡ Control Transfer
Event Driven Design
✴ Facts
➡ State
➡ History
➡ Causality
➡ Notifications
➡ State Transfer
90. ✴ IntentS
➡ Communication
➡ Conversations
➡ Expectations
➡ Contracts
➡ Control Transfer
Event Driven Design
✴ Facts
➡ State
➡ History
➡ Causality
➡ Notifications
➡ State Transfer
Commands
91. ✴ IntentS
➡ Communication
➡ Conversations
➡ Expectations
➡ Contracts
➡ Control Transfer
Event Driven Design
✴ Facts
➡ State
➡ History
➡ Causality
➡ Notifications
➡ State Transfer
Commands Events
99. Commands Eventsvs
1. All about intent
2. Directed
3. Single addressable
destination
1. Intentless
2. Anonymous
3. Just happens - for
others (0-N) to observe
100. Commands Eventsvs
1. All about intent
2. Directed
3. Single addressable
destination
4. Models personal
communication
1. Intentless
2. Anonymous
3. Just happens - for
others (0-N) to observe
4. Models broadcast
(speakers corner)
101. Commands Eventsvs
1. All about intent
2. Directed
3. Single addressable
destination
4. Models personal
communication
5. Distributed focus
1. Intentless
2. Anonymous
3. Just happens - for
others (0-N) to observe
4. Models broadcast
(speakers corner)
5. Local focus
102. Commands Eventsvs
1. All about intent
2. Directed
3. Single addressable
destination
4. Models personal
communication
5. Distributed focus
6. Command & Control
1. Intentless
2. Anonymous
3. Just happens - for
others (0-N) to observe
4. Models broadcast
(speakers corner)
5. Local focus
6. Autonomy
105. 1. Convergency
Promises should reach a desired state,
a stable outcome - idempotent behavior
Principles For
Promise Theory Driven
Protocol Design
106. 1. Convergency
Promises should reach a desired state,
a stable outcome - idempotent behavior
2. Embracing Failure
Expect things to go wrong
Promises may or may not be kept
Principles For
Promise Theory Driven
Protocol Design
107. 1. Convergency
Promises should reach a desired state,
a stable outcome - idempotent behavior
2. Embracing Failure
Expect things to go wrong
Promises may or may not be kept
3. Autonomy
You can’t rely on other services
Principles For
Promise Theory Driven
Protocol Design
108. ✴ Maintains Integrity & consistency
✴ Is our Unit of Consistency
✴ Is our Unit of Failure
✴ Is our Unit of Determinism
✴ Is fully Autonomous
The Aggregate
109. Enough Talk
Show Me The
Code
Sample in Java: https://gist.github.com/jboner/4361c710d2e2386be8bddc39edb0528a
Sample in Scala: https://gist.github.com/jboner/dea4aa819e127d543d684208d74081b5
110. Enough Talk
Show Me The
Code
Sample in Java: https://gist.github.com/jboner/4361c710d2e2386be8bddc39edb0528a
Sample in Scala: https://gist.github.com/jboner/dea4aa819e127d543d684208d74081b5
117. “Update-in-place strikes systems
designers as a cardinal sin: it violates
traditional accounting practices that have
been observed for hundreds of years.”
- jim Gray
The Transaction Concept, Jim Gray (1981)
126. Happy Path
Event
Sourced
Services
2) Create new Event
(“PaymentApproved”)
1) Receive and verify Command
(“ApprovePayment”)
3) Append Event
to Event Log
4) Update internal
component state
127. Happy Path
Event
Sourced
Services
5) Run side-effects
(approve the payment)
2) Create new Event
(“PaymentApproved”)
1) Receive and verify Command
(“ApprovePayment”)
3) Append Event
to Event Log
4) Update internal
component state
128. SAD Path - recovering from failure
Happy Path
Event
Sourced
Services
5) Run side-effects
(approve the payment)
2) Create new Event
(“PaymentApproved”)
1) Receive and verify Command
(“ApprovePayment”)
3) Append Event
to Event Log
4) Update internal
component state
129. SAD Path - recovering from failure
Happy Path
Event
Sourced
Services
5) Run side-effects
(approve the payment)
2) Create new Event
(“PaymentApproved”)
1) Receive and verify Command
(“ApprovePayment”)
3) Append Event
to Event Log
4) Update internal
component state
1) Rehydrate Events
from Event Log
130. SAD Path - recovering from failure
Happy Path
Event
Sourced
Services
5) Run side-effects
(approve the payment)
2) Create new Event
(“PaymentApproved”)
1) Receive and verify Command
(“ApprovePayment”)
3) Append Event
to Event Log
4) Update internal
component state
1) Rehydrate Events
from Event Log
2) Update internal
component state
131. SAD Path - recovering from failure
Happy Path
Event
Sourced
Services
5) Run side-effects
(approve the payment)
2) Create new Event
(“PaymentApproved”)
1) Receive and verify Command
(“ApprovePayment”)
3) Append Event
to Event Log
4) Update internal
component state
1) Rehydrate Events
from Event Log
2) Update internal
component state
Memory Image
132. Event Sourcing
✴ One single Source of Truth with All history
✴ Allows for Memory Image - durable in-memory state
✴ Avoids the Object-relational mismatch
✴ Allows others to Subscribe to state changes
✴ Mechanical sympathy (Single Writer Principle etc.)
133. ✴ Unfamiliar model
✴ Versioning of events
✴ Deletion of events (legal or moral reasons)
Disadvantages
Of Using Event Sourcing
135. “Modeling events forces you to have a temporal
focus on what’s going on in the system.
Time becomes a crucial factor of the system.”
- Greg Young
A Decade of DDD, CQRS, Event Sourcing, Greg Young (Presentation from 2016)
139. Time Is the Succession Of
Causally Related Events
140. ✴ Event is a snapshot in time
✴ Event ID is an index for time
✴ Event Log is our full history
The database of Our past
The path to Our present
Event Sourcing
Allows Us To
Model Time
143. Event Sourcing
Allows For
Time Travel
✴Replay the log for historic debugging
✴Replay the log for auditing & traceability
✴Replay the log on failure
✴Replay the log for replication
144. “The future is a function of the past.”
- A. P. Robertson
163. Key Takeaways
Event driven design helps you to:
✴ Design autonomous services
✴ Move Faster towards a Reactive architecture
✴ reduce risk when modernizing applications
✴ Balance Certainty and Uncertainty
164. Key Takeaways
Event driven design helps you to:
✴ Design autonomous services
✴ Move Faster towards a Reactive architecture
✴ reduce risk when modernizing applications
✴ Balance Certainty and Uncertainty
Event Logging allows you to:
✴ take control of your system’s history
✴ time-travel
✴ Balance Strong and eventual consistency