SlideShare a Scribd company logo
1 of 41
Download to read offline
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
From C to Q,
one Event at a time
1
Lorenzo Nicora
OpenCredo
Event Sourcing illustrated
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
Lorenzo Nicora
@nicusX
lorenzo.nicora@opencredo.com
https://opencredo.com/author/lorenzo/
Senior Consultant @ OpenCredo
• Microservices
• Cloud
• Event-driven, Event Sourcing, Reactive
• Java, Spring, Akka…
2
3
Concepts from DDD
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
Aggregate
Event Sourcing,CQRS => DDD/
State: f(t)
Domain Event
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 4
Once upon a time…
Everything was Synchronous
Request <-> Response
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 5
Scaling out…
Updates —> Locks —> Contention!
<— Block! <—
-> Distributed

still Synchronous
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 6
Let’s go Asynchronous
-> Distributed & Message-driven
Request/Response ACID Transactions
• Distributed: Propagation takes time
• Async: No global order strictly guaranteed
Updates applied in the wrong order
=> Inconsistent state!
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 7
Command Sourcing
💡
• Append Only —> No Contention, No Update
• Build State from Commands history
K/V Store
Distributed
Command
“Submit this Order! (Please)”
-> A request (imperative sentence)
-> May fail, be rejected
-> May affect multiple Aggregates
8
Commands
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
✉
Rebuild Aggregate State 

from Commands
9
Events
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
Event
“Order submitted”
-> Statement of facts (past tense)
-> Never fails
-> Can’t be changed
-> May be designed 

to affect a single Aggregate
✉
Rebuild Aggregate State 

from Events
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 10
Command > Event Sourcing
💡
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 11
Commands to Events
X
Y
Z
?
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 12
(Business) Consistency
(ACID) Transactions
Eventual (Business) Consistency
Guess —> Compensate—> Apologies
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 13
e.g. Saga
Stateful
Out of band
Corrective Action

(Command / Event)
Saga
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
–Greg Young
“Accountants don’t use pencils.
They use pens”
Corrective Actions
14
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 15
Benefits of Event Sourcing
History
(for free)
Rebuild State 

at a point in Time
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 16
Benefits of Event Sourcing
Easier

Eventual Business Consistency
—> Corrective Events
Robust to data corruption
(bugs, malicious, fat fingers…)
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 17
Benefits of Event Sourcing
Horizontal Scalability
&

Low Latency writes
-> Distributed systems & data store
—> Append-only Log
—> Asynchronous processing
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
18
Commands to Events
Stateful: Events depends 0n current State
Stateless: Validate, split by Aggregate…
Depends on
Business
Domain
x Point of synchronisation

? Out-of-order commands (IoT, Mobile)
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 19
Thinking fast or slow
Stateless:

Think fast,
Write fast,
More thinking later
Stateful:

Think slow…(rebuild state),
Write fast,
Less thinking later
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
What about reads?
20
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 21
Retrieving the State
How do I retrieve the State?
“Get details of Order ‘AB123’”
❔
not very efficient, but…
…may work
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 22
Querying (Searching) the State
❓ How do query the State?
“Get all Orders delivered to ‘SE1 0NZ’”
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 23
CQRS
Command
Query
Responsibility
Segregation
💡
Separate
• Code
• muService
• Datastore
-> Update
-—> Retrieve
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 24
Not a new idea
Specialised
Downstream
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 25
CQRS and Event Sourcing
for low-latency writes
Event Sourcing => CQRS
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 26
Materialised Views
• In Memory

K/V Store

Graph DB

RDBMS

• Rebuildable

from Events
💡
a.k.a.
Read-optimised Views
Read Views
Projections…
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 27
Materialised Views
* Views are optimised for 

specific query use cases
—> multiple Views from same Events
* May be updated asynchronously
+ low latency writes, scalability
- delayed
+ may reorder Events
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 28
Materialised Views
The Event Log
is your Source of Truth
* Easy to evolve or fix
—> change or fix logic;
rebuild view from events
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 29
Indexes
• Search Engines

K/V Stores

Graph DB
+ Optimised for querying (less for retrieving)
+ Reduced delay of State
💡
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 30
Hybrid solutions: e.g. Snapshots
+ Speed up rebuilding the State
+ Use recent Events to rebuild up-to-date
💡 Long delayed
Distributed + Asynchronous system

Distributed ACID Transactions (2PC)
31
No Global Current State
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
AS
S
A
B
Information propagates 

at a finite speed
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 32
Lesson

from the Trenches
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 33
Lesson Learned #1
If you put data in…
…you will eventually

have to get them out!
The “Query” side 

is not secondary
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 34
Lessons Learned #2
In old days:

normalising one DB 

to support as many queries as possible
With CQRS (also No SQL in general) 

multiple denormalised “data stores”

optimised for different queries
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 35
Lessons Learned #3
Centralised Event Store

= Event-sourced monolith
Each microservice owns its state

(Event Store)
Microservices:
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
+++ Summing up +++
36
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 37
ES/CQRS Optimal Use Cases
• High Volume, Low Latency writes
• Out-of-order Commands (IoT, Mobile)
Event Sourcing + CQRS 😋
Domain: stateless Command-> Event
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 38
ES/CQRS Drawbacks
x No “One-Size-Fits-All”

—> Multiple “Q” implementations
x Delayed reads
x No ACID Transactions
x Additional complexity (!!!)
🙁
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 39
ES/CQRS Benefits
+ No “One-Size-Fits-All”
—> “Q” optimised per use cases
+ Distributed systems (Microservices)
+ Eventual (Business) Consistency
+ History, Temporal queries
+ Robust to data corruption
😀
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
That’s all, Folks!
40
Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX
??? Questions ???
41
Thanks.
⏳

More Related Content

Viewers also liked

Haufe #msaday - Building a Microservice Ecosystem by Daniel Bryant
Haufe #msaday - Building a Microservice Ecosystem by Daniel Bryant Haufe #msaday - Building a Microservice Ecosystem by Daniel Bryant
Haufe #msaday - Building a Microservice Ecosystem by Daniel Bryant OpenCredo
 
A Visual Introduction to Event Sourcing and CQRS by Lorenzo Nicora
A Visual Introduction to Event Sourcing and CQRS by Lorenzo NicoraA Visual Introduction to Event Sourcing and CQRS by Lorenzo Nicora
A Visual Introduction to Event Sourcing and CQRS by Lorenzo NicoraOpenCredo
 
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt LongLondon Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt LongOpenCredo
 
GOTO LONDON 2016: Concursus Event sourcing Evolved (Updated)
GOTO LONDON 2016: Concursus Event sourcing Evolved (Updated)GOTO LONDON 2016: Concursus Event sourcing Evolved (Updated)
GOTO LONDON 2016: Concursus Event sourcing Evolved (Updated)OpenCredo
 
Evolving Project Management: from the sin to the virtue by Antonio Cobo
Evolving Project Management: from the sin to the virtue by Antonio CoboEvolving Project Management: from the sin to the virtue by Antonio Cobo
Evolving Project Management: from the sin to the virtue by Antonio CoboOpenCredo
 
Haufe #msaday - The Actor model: an alternative approach to concurrency By Lo...
Haufe #msaday - The Actor model: an alternative approach to concurrency By Lo...Haufe #msaday - The Actor model: an alternative approach to concurrency By Lo...
Haufe #msaday - The Actor model: an alternative approach to concurrency By Lo...OpenCredo
 
High Load Strategy 2016 - Project Management: from Stone Age to DevOps
High Load Strategy 2016 - Project Management: from Stone Age to DevOps High Load Strategy 2016 - Project Management: from Stone Age to DevOps
High Load Strategy 2016 - Project Management: from Stone Age to DevOps OpenCredo
 
muCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David BorsosmuCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David BorsosOpenCredo
 
Microservices Manchester: Microservices and Macro-Economics - A Shorty Histor...
Microservices Manchester: Microservices and Macro-Economics - A Shorty Histor...Microservices Manchester: Microservices and Macro-Economics - A Shorty Histor...
Microservices Manchester: Microservices and Macro-Economics - A Shorty Histor...OpenCredo
 
Vault: Beyond secret storage - Using Vault to harden your infrastructure
Vault: Beyond secret storage - Using Vault to harden your infrastructureVault: Beyond secret storage - Using Vault to harden your infrastructure
Vault: Beyond secret storage - Using Vault to harden your infrastructureOpenCredo
 
Microservices Manchester: Security, Microservces and Vault by Nicki Watt
Microservices Manchester:  Security, Microservces and Vault by Nicki WattMicroservices Manchester:  Security, Microservces and Vault by Nicki Watt
Microservices Manchester: Security, Microservces and Vault by Nicki WattOpenCredo
 
Microservices Manchester: Authentication in Microservice Systems by David Borsos
Microservices Manchester: Authentication in Microservice Systems by David BorsosMicroservices Manchester: Authentication in Microservice Systems by David Borsos
Microservices Manchester: Authentication in Microservice Systems by David BorsosOpenCredo
 
Spring Boot Microservices vs Akka Actor Cluster
Spring Boot Microservices vs Akka Actor Cluster Spring Boot Microservices vs Akka Actor Cluster
Spring Boot Microservices vs Akka Actor Cluster OpenCredo
 
Microservices Manchester: Concursus - Event Sourcing Evolved By Domonic Fox
Microservices Manchester: Concursus - Event Sourcing Evolved By Domonic FoxMicroservices Manchester: Concursus - Event Sourcing Evolved By Domonic Fox
Microservices Manchester: Concursus - Event Sourcing Evolved By Domonic FoxOpenCredo
 
Event sourcing with Eventuate
Event sourcing with EventuateEvent sourcing with Eventuate
Event sourcing with EventuateKnoldus Inc.
 
ThingMonk 2016 - Concursus Event sourcing for the IOT By Tareq Abedrabbo & Do...
ThingMonk 2016 - Concursus Event sourcing for the IOT By Tareq Abedrabbo & Do...ThingMonk 2016 - Concursus Event sourcing for the IOT By Tareq Abedrabbo & Do...
ThingMonk 2016 - Concursus Event sourcing for the IOT By Tareq Abedrabbo & Do...OpenCredo
 
Chronix as Long-Term Storage for Prometheus
Chronix as Long-Term Storage for PrometheusChronix as Long-Term Storage for Prometheus
Chronix as Long-Term Storage for PrometheusQAware GmbH
 
Microservice Architecture with CQRS and Event Sourcing
Microservice Architecture with CQRS and Event SourcingMicroservice Architecture with CQRS and Event Sourcing
Microservice Architecture with CQRS and Event SourcingBen Wilcock
 
55 New Features in JDK 9
55 New Features in JDK 955 New Features in JDK 9
55 New Features in JDK 9Simon Ritter
 

Viewers also liked (19)

Haufe #msaday - Building a Microservice Ecosystem by Daniel Bryant
Haufe #msaday - Building a Microservice Ecosystem by Daniel Bryant Haufe #msaday - Building a Microservice Ecosystem by Daniel Bryant
Haufe #msaday - Building a Microservice Ecosystem by Daniel Bryant
 
A Visual Introduction to Event Sourcing and CQRS by Lorenzo Nicora
A Visual Introduction to Event Sourcing and CQRS by Lorenzo NicoraA Visual Introduction to Event Sourcing and CQRS by Lorenzo Nicora
A Visual Introduction to Event Sourcing and CQRS by Lorenzo Nicora
 
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt LongLondon Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
 
GOTO LONDON 2016: Concursus Event sourcing Evolved (Updated)
GOTO LONDON 2016: Concursus Event sourcing Evolved (Updated)GOTO LONDON 2016: Concursus Event sourcing Evolved (Updated)
GOTO LONDON 2016: Concursus Event sourcing Evolved (Updated)
 
Evolving Project Management: from the sin to the virtue by Antonio Cobo
Evolving Project Management: from the sin to the virtue by Antonio CoboEvolving Project Management: from the sin to the virtue by Antonio Cobo
Evolving Project Management: from the sin to the virtue by Antonio Cobo
 
Haufe #msaday - The Actor model: an alternative approach to concurrency By Lo...
Haufe #msaday - The Actor model: an alternative approach to concurrency By Lo...Haufe #msaday - The Actor model: an alternative approach to concurrency By Lo...
Haufe #msaday - The Actor model: an alternative approach to concurrency By Lo...
 
High Load Strategy 2016 - Project Management: from Stone Age to DevOps
High Load Strategy 2016 - Project Management: from Stone Age to DevOps High Load Strategy 2016 - Project Management: from Stone Age to DevOps
High Load Strategy 2016 - Project Management: from Stone Age to DevOps
 
muCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David BorsosmuCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David Borsos
 
Microservices Manchester: Microservices and Macro-Economics - A Shorty Histor...
Microservices Manchester: Microservices and Macro-Economics - A Shorty Histor...Microservices Manchester: Microservices and Macro-Economics - A Shorty Histor...
Microservices Manchester: Microservices and Macro-Economics - A Shorty Histor...
 
Vault: Beyond secret storage - Using Vault to harden your infrastructure
Vault: Beyond secret storage - Using Vault to harden your infrastructureVault: Beyond secret storage - Using Vault to harden your infrastructure
Vault: Beyond secret storage - Using Vault to harden your infrastructure
 
Microservices Manchester: Security, Microservces and Vault by Nicki Watt
Microservices Manchester:  Security, Microservces and Vault by Nicki WattMicroservices Manchester:  Security, Microservces and Vault by Nicki Watt
Microservices Manchester: Security, Microservces and Vault by Nicki Watt
 
Microservices Manchester: Authentication in Microservice Systems by David Borsos
Microservices Manchester: Authentication in Microservice Systems by David BorsosMicroservices Manchester: Authentication in Microservice Systems by David Borsos
Microservices Manchester: Authentication in Microservice Systems by David Borsos
 
Spring Boot Microservices vs Akka Actor Cluster
Spring Boot Microservices vs Akka Actor Cluster Spring Boot Microservices vs Akka Actor Cluster
Spring Boot Microservices vs Akka Actor Cluster
 
Microservices Manchester: Concursus - Event Sourcing Evolved By Domonic Fox
Microservices Manchester: Concursus - Event Sourcing Evolved By Domonic FoxMicroservices Manchester: Concursus - Event Sourcing Evolved By Domonic Fox
Microservices Manchester: Concursus - Event Sourcing Evolved By Domonic Fox
 
Event sourcing with Eventuate
Event sourcing with EventuateEvent sourcing with Eventuate
Event sourcing with Eventuate
 
ThingMonk 2016 - Concursus Event sourcing for the IOT By Tareq Abedrabbo & Do...
ThingMonk 2016 - Concursus Event sourcing for the IOT By Tareq Abedrabbo & Do...ThingMonk 2016 - Concursus Event sourcing for the IOT By Tareq Abedrabbo & Do...
ThingMonk 2016 - Concursus Event sourcing for the IOT By Tareq Abedrabbo & Do...
 
Chronix as Long-Term Storage for Prometheus
Chronix as Long-Term Storage for PrometheusChronix as Long-Term Storage for Prometheus
Chronix as Long-Term Storage for Prometheus
 
Microservice Architecture with CQRS and Event Sourcing
Microservice Architecture with CQRS and Event SourcingMicroservice Architecture with CQRS and Event Sourcing
Microservice Architecture with CQRS and Event Sourcing
 
55 New Features in JDK 9
55 New Features in JDK 955 New Features in JDK 9
55 New Features in JDK 9
 

Similar to Voxxed Bristol 2017 - From C to Q, one event at a time: Event Sourcing illustrated By Lorenzo Nicora

From C to Q, one event at the time: Event sourcing illustrated [Voxxed Ticino...
From C to Q, one event at the time: Event sourcing illustrated [Voxxed Ticino...From C to Q, one event at the time: Event sourcing illustrated [Voxxed Ticino...
From C to Q, one event at the time: Event sourcing illustrated [Voxxed Ticino...Lorenzo Nicora
 
Event Sourcing in an Eventually Consistent World
Event Sourcing in an Eventually Consistent WorldEvent Sourcing in an Eventually Consistent World
Event Sourcing in an Eventually Consistent WorldLorenzo Nicora
 
Event sourcing for IoT and mobile - JAX London 2017
Event sourcing for IoT and mobile - JAX London 2017Event sourcing for IoT and mobile - JAX London 2017
Event sourcing for IoT and mobile - JAX London 2017Lorenzo Nicora
 
.NET Fest 2017. Денис Резник. Исполнение Запроса в SQL Server. Ожидание - Реа...
.NET Fest 2017. Денис Резник. Исполнение Запроса в SQL Server. Ожидание - Реа....NET Fest 2017. Денис Резник. Исполнение Запроса в SQL Server. Ожидание - Реа...
.NET Fest 2017. Денис Резник. Исполнение Запроса в SQL Server. Ожидание - Реа...NETFest
 
Managing the network of networks
Managing the network of networksManaging the network of networks
Managing the network of networksRIPE NCC
 
ETW - Monitor Anything, Anytime, Anywhere (NDC Oslo 2017)
ETW - Monitor Anything, Anytime, Anywhere (NDC Oslo 2017)ETW - Monitor Anything, Anytime, Anywhere (NDC Oslo 2017)
ETW - Monitor Anything, Anytime, Anywhere (NDC Oslo 2017)Dina Goldshtein
 
Ntxissacsc5 blue 5-holistic approach to cybersecurity-abu_sadeq
Ntxissacsc5 blue 5-holistic approach to cybersecurity-abu_sadeqNtxissacsc5 blue 5-holistic approach to cybersecurity-abu_sadeq
Ntxissacsc5 blue 5-holistic approach to cybersecurity-abu_sadeqNorth Texas Chapter of the ISSA
 
Sizing MongoDB Clusters
Sizing MongoDB Clusters Sizing MongoDB Clusters
Sizing MongoDB Clusters MongoDB
 
MongoDB .local Paris 2020: Les bonnes pratiques pour travailler avec les donn...
MongoDB .local Paris 2020: Les bonnes pratiques pour travailler avec les donn...MongoDB .local Paris 2020: Les bonnes pratiques pour travailler avec les donn...
MongoDB .local Paris 2020: Les bonnes pratiques pour travailler avec les donn...MongoDB
 
Cisco and Splunk: Under the Hood of Cisco IT Breakout Session
Cisco and Splunk: Under the Hood of Cisco IT Breakout SessionCisco and Splunk: Under the Hood of Cisco IT Breakout Session
Cisco and Splunk: Under the Hood of Cisco IT Breakout SessionSplunk
 
Ontology of citizen science @ Siena 2016 11 24
Ontology of citizen science @ Siena 2016 11 24Ontology of citizen science @ Siena 2016 11 24
Ontology of citizen science @ Siena 2016 11 24Luigi Ceccaroni
 
Sizing Your MongoDB Cluster
Sizing Your MongoDB ClusterSizing Your MongoDB Cluster
Sizing Your MongoDB ClusterMongoDB
 
Scylla Summit 2022: Stream Processing with ScyllaDB
Scylla Summit 2022: Stream Processing with ScyllaDBScylla Summit 2022: Stream Processing with ScyllaDB
Scylla Summit 2022: Stream Processing with ScyllaDBScyllaDB
 
UKSG webinar: Blockchain in research and education with Martin Hamilton, Jisc
UKSG webinar: Blockchain in research and education with Martin Hamilton, JiscUKSG webinar: Blockchain in research and education with Martin Hamilton, Jisc
UKSG webinar: Blockchain in research and education with Martin Hamilton, JiscUKSG: connecting the knowledge community
 
Alex Pshul: What We Learned by Testing Execution of 300K Messages/Min in a Se...
Alex Pshul: What We Learned by Testing Execution of 300K Messages/Min in a Se...Alex Pshul: What We Learned by Testing Execution of 300K Messages/Min in a Se...
Alex Pshul: What We Learned by Testing Execution of 300K Messages/Min in a Se...CodeValue
 

Similar to Voxxed Bristol 2017 - From C to Q, one event at a time: Event Sourcing illustrated By Lorenzo Nicora (20)

From C to Q, one event at the time: Event sourcing illustrated [Voxxed Ticino...
From C to Q, one event at the time: Event sourcing illustrated [Voxxed Ticino...From C to Q, one event at the time: Event sourcing illustrated [Voxxed Ticino...
From C to Q, one event at the time: Event sourcing illustrated [Voxxed Ticino...
 
Event Sourcing in an Eventually Consistent World
Event Sourcing in an Eventually Consistent WorldEvent Sourcing in an Eventually Consistent World
Event Sourcing in an Eventually Consistent World
 
Event sourcing for IoT and mobile - JAX London 2017
Event sourcing for IoT and mobile - JAX London 2017Event sourcing for IoT and mobile - JAX London 2017
Event sourcing for IoT and mobile - JAX London 2017
 
Purple seven-ntxissacsc5 walcutt
Purple seven-ntxissacsc5 walcuttPurple seven-ntxissacsc5 walcutt
Purple seven-ntxissacsc5 walcutt
 
An Introduction to event sourcing and CQRS
An Introduction to event sourcing and CQRSAn Introduction to event sourcing and CQRS
An Introduction to event sourcing and CQRS
 
.NET Fest 2017. Денис Резник. Исполнение Запроса в SQL Server. Ожидание - Реа...
.NET Fest 2017. Денис Резник. Исполнение Запроса в SQL Server. Ожидание - Реа....NET Fest 2017. Денис Резник. Исполнение Запроса в SQL Server. Ожидание - Реа...
.NET Fest 2017. Денис Резник. Исполнение Запроса в SQL Server. Ожидание - Реа...
 
Managing the network of networks
Managing the network of networksManaging the network of networks
Managing the network of networks
 
ETW - Monitor Anything, Anytime, Anywhere (NDC Oslo 2017)
ETW - Monitor Anything, Anytime, Anywhere (NDC Oslo 2017)ETW - Monitor Anything, Anytime, Anywhere (NDC Oslo 2017)
ETW - Monitor Anything, Anytime, Anywhere (NDC Oslo 2017)
 
Ntxissacsc5 blue 5-holistic approach to cybersecurity-abu_sadeq
Ntxissacsc5 blue 5-holistic approach to cybersecurity-abu_sadeqNtxissacsc5 blue 5-holistic approach to cybersecurity-abu_sadeq
Ntxissacsc5 blue 5-holistic approach to cybersecurity-abu_sadeq
 
Sizing MongoDB Clusters
Sizing MongoDB Clusters Sizing MongoDB Clusters
Sizing MongoDB Clusters
 
MongoDB .local Paris 2020: Les bonnes pratiques pour travailler avec les donn...
MongoDB .local Paris 2020: Les bonnes pratiques pour travailler avec les donn...MongoDB .local Paris 2020: Les bonnes pratiques pour travailler avec les donn...
MongoDB .local Paris 2020: Les bonnes pratiques pour travailler avec les donn...
 
Cisco and Splunk: Under the Hood of Cisco IT Breakout Session
Cisco and Splunk: Under the Hood of Cisco IT Breakout SessionCisco and Splunk: Under the Hood of Cisco IT Breakout Session
Cisco and Splunk: Under the Hood of Cisco IT Breakout Session
 
Ntxissacsc5 purple 5-insider threat-_andy_thompson
Ntxissacsc5 purple 5-insider threat-_andy_thompsonNtxissacsc5 purple 5-insider threat-_andy_thompson
Ntxissacsc5 purple 5-insider threat-_andy_thompson
 
Ontology of citizen science @ Siena 2016 11 24
Ontology of citizen science @ Siena 2016 11 24Ontology of citizen science @ Siena 2016 11 24
Ontology of citizen science @ Siena 2016 11 24
 
Sizing Your MongoDB Cluster
Sizing Your MongoDB ClusterSizing Your MongoDB Cluster
Sizing Your MongoDB Cluster
 
Ntxissacsc5 blue 4-the-attack_life_cycle_erich_mueller
Ntxissacsc5 blue 4-the-attack_life_cycle_erich_muellerNtxissacsc5 blue 4-the-attack_life_cycle_erich_mueller
Ntxissacsc5 blue 4-the-attack_life_cycle_erich_mueller
 
Ntxissacsc5 yellow 1-beginnerslinux bill-petersen
Ntxissacsc5 yellow 1-beginnerslinux bill-petersenNtxissacsc5 yellow 1-beginnerslinux bill-petersen
Ntxissacsc5 yellow 1-beginnerslinux bill-petersen
 
Scylla Summit 2022: Stream Processing with ScyllaDB
Scylla Summit 2022: Stream Processing with ScyllaDBScylla Summit 2022: Stream Processing with ScyllaDB
Scylla Summit 2022: Stream Processing with ScyllaDB
 
UKSG webinar: Blockchain in research and education with Martin Hamilton, Jisc
UKSG webinar: Blockchain in research and education with Martin Hamilton, JiscUKSG webinar: Blockchain in research and education with Martin Hamilton, Jisc
UKSG webinar: Blockchain in research and education with Martin Hamilton, Jisc
 
Alex Pshul: What We Learned by Testing Execution of 300K Messages/Min in a Se...
Alex Pshul: What We Learned by Testing Execution of 300K Messages/Min in a Se...Alex Pshul: What We Learned by Testing Execution of 300K Messages/Min in a Se...
Alex Pshul: What We Learned by Testing Execution of 300K Messages/Min in a Se...
 

More from OpenCredo

Webinar - Design Thinking for Platform Engineering
Webinar - Design Thinking for Platform EngineeringWebinar - Design Thinking for Platform Engineering
Webinar - Design Thinking for Platform EngineeringOpenCredo
 
MuCon 2019: Exploring Your Microservices Architecture Through Network Science...
MuCon 2019: Exploring Your Microservices Architecture Through Network Science...MuCon 2019: Exploring Your Microservices Architecture Through Network Science...
MuCon 2019: Exploring Your Microservices Architecture Through Network Science...OpenCredo
 
Goto Chicago; Journeys To Cloud Native Architecture: Sun, Sea And Emergencies...
Goto Chicago; Journeys To Cloud Native Architecture: Sun, Sea And Emergencies...Goto Chicago; Journeys To Cloud Native Architecture: Sun, Sea And Emergencies...
Goto Chicago; Journeys To Cloud Native Architecture: Sun, Sea And Emergencies...OpenCredo
 
Mucon 2018: Heuristics for Identifying Microservice Boundaries By Erich Eichi...
Mucon 2018: Heuristics for Identifying Microservice Boundaries By Erich Eichi...Mucon 2018: Heuristics for Identifying Microservice Boundaries By Erich Eichi...
Mucon 2018: Heuristics for Identifying Microservice Boundaries By Erich Eichi...OpenCredo
 
Journeys To Cloud Native Architecture: Sun, Sea And Emergencies - Nicki Watt
Journeys To Cloud Native Architecture: Sun, Sea And Emergencies - Nicki WattJourneys To Cloud Native Architecture: Sun, Sea And Emergencies - Nicki Watt
Journeys To Cloud Native Architecture: Sun, Sea And Emergencies - Nicki WattOpenCredo
 
Machine Learning Game Changer for IT - Maartens Lourens
Machine Learning Game Changer for IT - Maartens LourensMachine Learning Game Changer for IT - Maartens Lourens
Machine Learning Game Changer for IT - Maartens LourensOpenCredo
 
Kafka Summit 2018: A Journey Building Kafka Connectors - Pegerto Fernandez
Kafka Summit 2018: A Journey Building Kafka Connectors - Pegerto FernandezKafka Summit 2018: A Journey Building Kafka Connectors - Pegerto Fernandez
Kafka Summit 2018: A Journey Building Kafka Connectors - Pegerto FernandezOpenCredo
 
MuCon 2017: A not So(A) Trivial Question by Tareq Abedrabbo
MuCon 2017: A not So(A) Trivial Question by Tareq AbedrabboMuCon 2017: A not So(A) Trivial Question by Tareq Abedrabbo
MuCon 2017: A not So(A) Trivial Question by Tareq AbedrabboOpenCredo
 
DevOpsCon Berlin 2017: Project Management from Stone Age to DevOps By Antoni...
DevOpsCon Berlin 2017: Project Management from Stone Age to DevOps  By Antoni...DevOpsCon Berlin 2017: Project Management from Stone Age to DevOps  By Antoni...
DevOpsCon Berlin 2017: Project Management from Stone Age to DevOps By Antoni...OpenCredo
 
Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki ...
Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki ...Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki ...
Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki ...OpenCredo
 
Succeeding with DevOps Transformation - Rafal Gancarz
Succeeding with DevOps Transformation - Rafal GancarzSucceeding with DevOps Transformation - Rafal Gancarz
Succeeding with DevOps Transformation - Rafal GancarzOpenCredo
 
Progscon 2017: Serverless Architectures - Rafal Gancarz
Progscon 2017: Serverless Architectures - Rafal GancarzProgscon 2017: Serverless Architectures - Rafal Gancarz
Progscon 2017: Serverless Architectures - Rafal GancarzOpenCredo
 

More from OpenCredo (12)

Webinar - Design Thinking for Platform Engineering
Webinar - Design Thinking for Platform EngineeringWebinar - Design Thinking for Platform Engineering
Webinar - Design Thinking for Platform Engineering
 
MuCon 2019: Exploring Your Microservices Architecture Through Network Science...
MuCon 2019: Exploring Your Microservices Architecture Through Network Science...MuCon 2019: Exploring Your Microservices Architecture Through Network Science...
MuCon 2019: Exploring Your Microservices Architecture Through Network Science...
 
Goto Chicago; Journeys To Cloud Native Architecture: Sun, Sea And Emergencies...
Goto Chicago; Journeys To Cloud Native Architecture: Sun, Sea And Emergencies...Goto Chicago; Journeys To Cloud Native Architecture: Sun, Sea And Emergencies...
Goto Chicago; Journeys To Cloud Native Architecture: Sun, Sea And Emergencies...
 
Mucon 2018: Heuristics for Identifying Microservice Boundaries By Erich Eichi...
Mucon 2018: Heuristics for Identifying Microservice Boundaries By Erich Eichi...Mucon 2018: Heuristics for Identifying Microservice Boundaries By Erich Eichi...
Mucon 2018: Heuristics for Identifying Microservice Boundaries By Erich Eichi...
 
Journeys To Cloud Native Architecture: Sun, Sea And Emergencies - Nicki Watt
Journeys To Cloud Native Architecture: Sun, Sea And Emergencies - Nicki WattJourneys To Cloud Native Architecture: Sun, Sea And Emergencies - Nicki Watt
Journeys To Cloud Native Architecture: Sun, Sea And Emergencies - Nicki Watt
 
Machine Learning Game Changer for IT - Maartens Lourens
Machine Learning Game Changer for IT - Maartens LourensMachine Learning Game Changer for IT - Maartens Lourens
Machine Learning Game Changer for IT - Maartens Lourens
 
Kafka Summit 2018: A Journey Building Kafka Connectors - Pegerto Fernandez
Kafka Summit 2018: A Journey Building Kafka Connectors - Pegerto FernandezKafka Summit 2018: A Journey Building Kafka Connectors - Pegerto Fernandez
Kafka Summit 2018: A Journey Building Kafka Connectors - Pegerto Fernandez
 
MuCon 2017: A not So(A) Trivial Question by Tareq Abedrabbo
MuCon 2017: A not So(A) Trivial Question by Tareq AbedrabboMuCon 2017: A not So(A) Trivial Question by Tareq Abedrabbo
MuCon 2017: A not So(A) Trivial Question by Tareq Abedrabbo
 
DevOpsCon Berlin 2017: Project Management from Stone Age to DevOps By Antoni...
DevOpsCon Berlin 2017: Project Management from Stone Age to DevOps  By Antoni...DevOpsCon Berlin 2017: Project Management from Stone Age to DevOps  By Antoni...
DevOpsCon Berlin 2017: Project Management from Stone Age to DevOps By Antoni...
 
Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki ...
Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki ...Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki ...
Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki ...
 
Succeeding with DevOps Transformation - Rafal Gancarz
Succeeding with DevOps Transformation - Rafal GancarzSucceeding with DevOps Transformation - Rafal Gancarz
Succeeding with DevOps Transformation - Rafal Gancarz
 
Progscon 2017: Serverless Architectures - Rafal Gancarz
Progscon 2017: Serverless Architectures - Rafal GancarzProgscon 2017: Serverless Architectures - Rafal Gancarz
Progscon 2017: Serverless Architectures - Rafal Gancarz
 

Recently uploaded

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 

Recently uploaded (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 

Voxxed Bristol 2017 - From C to Q, one event at a time: Event Sourcing illustrated By Lorenzo Nicora

  • 1. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX From C to Q, one Event at a time 1 Lorenzo Nicora OpenCredo Event Sourcing illustrated
  • 2. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX Lorenzo Nicora @nicusX lorenzo.nicora@opencredo.com https://opencredo.com/author/lorenzo/ Senior Consultant @ OpenCredo • Microservices • Cloud • Event-driven, Event Sourcing, Reactive • Java, Spring, Akka… 2
  • 3. 3 Concepts from DDD Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX Aggregate Event Sourcing,CQRS => DDD/ State: f(t) Domain Event
  • 4. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 4 Once upon a time… Everything was Synchronous Request <-> Response
  • 5. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 5 Scaling out… Updates —> Locks —> Contention! <— Block! <— -> Distributed
 still Synchronous
  • 6. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 6 Let’s go Asynchronous -> Distributed & Message-driven Request/Response ACID Transactions • Distributed: Propagation takes time • Async: No global order strictly guaranteed Updates applied in the wrong order => Inconsistent state!
  • 7. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 7 Command Sourcing 💡 • Append Only —> No Contention, No Update • Build State from Commands history K/V Store Distributed
  • 8. Command “Submit this Order! (Please)” -> A request (imperative sentence) -> May fail, be rejected -> May affect multiple Aggregates 8 Commands Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX ✉ Rebuild Aggregate State 
 from Commands
  • 9. 9 Events Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX Event “Order submitted” -> Statement of facts (past tense) -> Never fails -> Can’t be changed -> May be designed 
 to affect a single Aggregate ✉ Rebuild Aggregate State 
 from Events
  • 10. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 10 Command > Event Sourcing 💡
  • 11. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 11 Commands to Events X Y Z ?
  • 12. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 12 (Business) Consistency (ACID) Transactions Eventual (Business) Consistency Guess —> Compensate—> Apologies
  • 13. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 13 e.g. Saga Stateful Out of band Corrective Action
 (Command / Event) Saga
  • 14. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX –Greg Young “Accountants don’t use pencils. They use pens” Corrective Actions 14
  • 15. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 15 Benefits of Event Sourcing History (for free) Rebuild State 
 at a point in Time
  • 16. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 16 Benefits of Event Sourcing Easier
 Eventual Business Consistency —> Corrective Events Robust to data corruption (bugs, malicious, fat fingers…)
  • 17. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 17 Benefits of Event Sourcing Horizontal Scalability &
 Low Latency writes -> Distributed systems & data store —> Append-only Log —> Asynchronous processing
  • 18. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 18 Commands to Events Stateful: Events depends 0n current State Stateless: Validate, split by Aggregate… Depends on Business Domain x Point of synchronisation
 ? Out-of-order commands (IoT, Mobile)
  • 19. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 19 Thinking fast or slow Stateless:
 Think fast, Write fast, More thinking later Stateful:
 Think slow…(rebuild state), Write fast, Less thinking later
  • 20. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX What about reads? 20
  • 21. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 21 Retrieving the State How do I retrieve the State? “Get details of Order ‘AB123’” ❔ not very efficient, but… …may work
  • 22. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 22 Querying (Searching) the State ❓ How do query the State? “Get all Orders delivered to ‘SE1 0NZ’”
  • 23. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 23 CQRS Command Query Responsibility Segregation 💡 Separate • Code • muService • Datastore -> Update -—> Retrieve
  • 24. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 24 Not a new idea Specialised Downstream
  • 25. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 25 CQRS and Event Sourcing for low-latency writes Event Sourcing => CQRS
  • 26. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 26 Materialised Views • In Memory
 K/V Store
 Graph DB
 RDBMS
 • Rebuildable
 from Events 💡 a.k.a. Read-optimised Views Read Views Projections…
  • 27. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 27 Materialised Views * Views are optimised for 
 specific query use cases —> multiple Views from same Events * May be updated asynchronously + low latency writes, scalability - delayed + may reorder Events
  • 28. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 28 Materialised Views The Event Log is your Source of Truth * Easy to evolve or fix —> change or fix logic; rebuild view from events
  • 29. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 29 Indexes • Search Engines
 K/V Stores
 Graph DB + Optimised for querying (less for retrieving) + Reduced delay of State 💡
  • 30. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 30 Hybrid solutions: e.g. Snapshots + Speed up rebuilding the State + Use recent Events to rebuild up-to-date 💡 Long delayed
  • 31. Distributed + Asynchronous system
 Distributed ACID Transactions (2PC) 31 No Global Current State Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX AS S A B Information propagates 
 at a finite speed
  • 32. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 32 Lesson
 from the Trenches
  • 33. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 33 Lesson Learned #1 If you put data in… …you will eventually
 have to get them out! The “Query” side 
 is not secondary
  • 34. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 34 Lessons Learned #2 In old days:
 normalising one DB 
 to support as many queries as possible With CQRS (also No SQL in general) 
 multiple denormalised “data stores”
 optimised for different queries
  • 35. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 35 Lessons Learned #3 Centralised Event Store
 = Event-sourced monolith Each microservice owns its state
 (Event Store) Microservices:
  • 36. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX +++ Summing up +++ 36
  • 37. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 37 ES/CQRS Optimal Use Cases • High Volume, Low Latency writes • Out-of-order Commands (IoT, Mobile) Event Sourcing + CQRS 😋 Domain: stateless Command-> Event
  • 38. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 38 ES/CQRS Drawbacks x No “One-Size-Fits-All”
 —> Multiple “Q” implementations x Delayed reads x No ACID Transactions x Additional complexity (!!!) 🙁
  • 39. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX 39 ES/CQRS Benefits + No “One-Size-Fits-All” —> “Q” optimised per use cases + Distributed systems (Microservices) + Eventual (Business) Consistency + History, Temporal queries + Robust to data corruption 😀
  • 40. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX That’s all, Folks! 40
  • 41. Voxxed Days Bristol 2017 Lorenzo Nicora - @nicusX ??? Questions ??? 41 Thanks. ⏳