SlideShare ist ein Scribd-Unternehmen logo
1 von 41
Occassionally Connected Applications 
With Event Sourcing 
Dennis Doomen 
© 2014 Aviva Solutions 21 november 2014 
dennis.doomen@avivasolutions.nl
About Me 
• Principal Consultant 
• 17 years in IT 
• C++ origins but C# since 2001 
• Specialties 
• .NET 
• Architecture 
• Scrum/Kanban/XP 
• ALM 
• Speaker 
• Public initiatives 
• C# Coding Guidelines 
• Fluent Assertions 
• Internet 
• www.dennisdoomen.net 
• DZone MVB 
• @ddoomen 
© 2014 Aviva Solutions Dennis Doomen 21 november 2014
Contents 
• What we tried to solve 
• Our options 
• What we choose for 
• Design Challenges 
• Scalability Challenges 
• Architectural Challenges 
• Concurrency Challenges 
• Future? 
© 2014 Aviva Solutions 21 november 2014
What we tried to 
solve 
© 2014 Aviva Solutions 21 november 2014
Central Farm 
Seaborn 
Servers 
High- 
Latency 
LAN 
Decentralized 
Servers 
attachments) 
Mobile 
Clients 
Intermittent 
Satellite 
Connection 
3G (w/o 
WLAN 
(attachments) 
Only synchronize 
what is relevant! 
>100 
XCopy RDBMS 
© 2014 Aviva Solutions 21 november 2014
What we had 
Commands 
Web Application 
Command Service 
Projections 
Queries 
Query Processor Command Handlers 
Domain Model 
Repositories 
Domain Services 
SQL / 
Oracle 
Service Agents 
Backoffice 
Systems 
Query Handlers 
Repositories 
Patterns & Principles 
• Domain Driven Design 
• CQRS 
• Repository Abstraction 
• TDD/BDD 
• SOLID 
Framework & Libraries 
• NHibernate 
• Autofac 
• ASP.NET WebForms / MVC 
• SQLite 
© 2014 Aviva Solutions 21 november 2014
Our options 
1. SQL Server Replication 
2. Command Synchronization 
3. Aggregate Serialization 
4. RavenDB 
5. Event Sourcing 
© 2014 Aviva Solutions 21 november 2014
1. SQL Server Replication 
Automatic reconnects 
Proven technology 
Automatic schema updates 
Development can be outsourced 
Synchronization over HTTP 
Only SQL Server (Express) 
Filtering is limited 
Affects client infrastructure 
No real-world examples 
Unsure about limitations 
Requires SQL expertize. 
Difficult to diagnose issues during 
development 
© 2014 Aviva Solutions 21 november 2014
2. Command Synchronization 
Supports any database 
No special deployments requirements 
Potentially unresolvable out-of-sync 
issue 
Requires bypassing business rules 
Command != actual change 
Limited filtering possibilities 
Custom serialization 
Separate queue of commands 
© 2014 Aviva Solutions 21 november 2014
3. Aggregate Serialization 
Supports any database 
No special deployments requirements 
Doesn’t interfere with business rules 
No out-of-sync issues 
Requires specialized code per 
aggregate 
Needs an enforced order of 
synchronization. 
Payload is not optimized 
Requires a lot of querying and change 
tracking 
© 2014 Aviva Solutions 21 november 2014
4. RavenDB 
Reduces complexity 
Smart reconnects 
Synchronization built-in 
Archiving built-in 
Built-in caching 
Very scalable 
Improves productivity 
Improves query performance 
Lucene based 
Acceptance by enterprise clients 
New querying (map/reduce) concepts 
Limited track record 
© 2014 Aviva Solutions 21 november 2014
Event Sourcing 
Web 
Application 
Command 
Service 
Execute query ChangeUserEmailCommand 
Query 
Processor 
ChangeUser 
EmailHandler 
Invoke method 
User 
Aggregate 
Submit changes 
Get<TAggregateRoot>(key, version) 
Domain 
UOW 
UserProjector 
Query 
Handler 
LINQ, HQL, SQL 
Projections 
UOW 
Read DB 
Load(events) 
DAO 
Commits 
Write DB 
Submit 
Apply 
Get changes 
Dispatcher Commit 
Handle(UserEmailChangedEvent) 
© 2014 Aviva Solutions 21 november 2014
5. Event Sourcing 
Transparent to clients 
Works with any SQL/No-SQL DB 
Can improve performance 
Advance conflict resolution 
Natural unit of synchronization 
Can be very scalable 
Lots of new concepts 
Big impact on domain model 
Synchronization must be custom-built 
Lots of unforeseen challenges 
© 2014 Aviva Solutions 21 november 2014
What we chose for 
© 2014 Aviva Solutions 21 november 2014
The Revised Architecture 
Commands 
Command Service 
Domain Model 
Events 
Dispatcher 
Domain Repository 
Command Handlers 
Domain Services 
Event 
Store 
Service Agents 
Web Application 
Backoffice 
Systems 
Queries 
Projections 
Query Processor 
Query Handler 
Projectors 
Projection 
Repositories 
Query 
Store 
Events 
© 2014 Aviva Solutions 21 november 2014
Advantages 
• Optimized projections 
• Projections = cache -> rebuild 
anytime 
• Reporting node 
• Intrinsic auditing 
• Supports temporal projections 
© 2014 Aviva Solutions 21 november 2014
Synchronization Overview 
Just changes 
ownership of an 
aggregate and 
Primary Node Laptop / Secondary Node 
Check-out / Check-in 
forces 
synchronization 
Each aggregate is owned by a 
node to prevent functional 
conflicts 
SOAP/WS-* 
E.g. UserPasswordChanged, 
DocumentSigned, 
Contains a 
subset of the 
master 
Changes Changes 
Images, etc 
6298 
6298 
6297 
3 
2 
1 
User Interface 
Changes Queries 
Attachments, 
Blobs 
Query Data 
Users 
Groups 
Documents 
Objects 
Folders 
6301 
6300 
6299 
3 
2 
1 
User Interface 
Queries Changes 
Attachments, 
Images, etc 
Blobs 
Can be rebuild from the 
changes table at any point 
in time 
Query Data 
Users 
Groups 
Documents 
Objects 
Folders 
TitleChanged, RoleRevoked 
WIFI/LAN/3G 
WIFI/LAN 
Optimized for querying 
SOAP/WS-* 
HTTPS-REST 
© 2014 Aviva Solutions 21 november 2014
Design Challenges 
© 2014 Aviva Solutions 21 november 2014
NEventStore vs Lokad.CQRS vs NCQRS 
Apply(EmailChangedEvent) 
User Aggregate 
new User() 
EventStoreDataMapper 
Caller 
ChangeEmail() 
Open Stream(guid) 
Write Into Stream Per Aggregate 
NEventStore 3 
Commits 
User State 
GetAggregateRoot(key) 
Domain Unit Of Work 
Load(key) 
Load(events) 
OnEventApplied() 
SubmitChanges 
© 2014 Aviva Solutions 21 november 2014
Immediate vs Eventual Consistency 
Submit Changes 
EventStoreDataMapper 
NEventStore 3 
Queries 
Projector 
NHibernate 
Dispatched Event 
Projections Commits 
Transactional Boundary Transactional Boundary 
© 2014 Aviva Solutions 21 november 2014
Event Versioning 
Event V1 Event V2 
Some Event 
Combined Event 
Other Event 
Combined Event 
Separate Event 
Separate Event 
© 2014 Aviva Solutions 21 november 2014
Other Challenges 
• No direct AR dependencies 
• Granularity of events 
• Domain Events as facts, not triggers 
© 2014 Aviva Solutions 21 november 2014
Scalability Issues 
© 2014 Aviva Solutions 21 november 2014
Scalability Limitations 
• Commits table grows and gets slower 
• No partitioning of global data 
• Single point of failure 
• Upgrades take too much time 
© 2014 Aviva Solutions 21 november 2014
Out-of-place migration 
Version 1.0 Version 3.0 
Changes 
6299 
6298 
6297 
3 
2 
1 
Blobs 
Query Data 
Users 
Groups 
Documents 
Objects 
Folders 
Changes 
6301 
6300 
6299 
3 
2 
1 
Blobs 
Query Data 
Users 
Groups 
Documents 
Objects 
Folders 
Schema 1.0 
Pass 2= down time 
Pass 1= no down time 
Schema 3.0 
Setup 
Upconverts 
commits, 
blobs, etc 
© 2014 Aviva Solutions 21 november 2014
Multi-Tenant Scaling 
systems Specific reporting 
Integration Node 
Reporting 
Server 
Connects to back-office 
Node 
(owns tenants 1 & 2) 
Node 
(owns tenants 3 & 4) 
Node 
(owns tenants 5 & 6) 
Node (failover for 
tenants 5 & 6) 
representations of 
the data 
Node 
(owns tenants 9 & 10) 
Node 
(owns ref. data & 
node config) 
Node (uses tenants 1 
& 2, owns tenant 11) 
Decentralized node 
Node 
(uses tenants 1 & 11) 
Node 
(uses tenants 3 & 5) 
Node 
(uses tenants 5 & 10) 
Owns global data 
and ownership 
configuration 
© 2014 Aviva Solutions 21 november 2014
Architectural Issues 
© 2014 Aviva Solutions 21 november 2014
Limiting Constraints 
• Recovery in web farm 
• Selective rebuilding of projections 
• No asynchronous dispatching 
• Relational database is bottleneck during load 
balancing 
• Network overhead web->database 
© 2014 Aviva Solutions 21 november 2014
Load Balancer 
First Attempt 
Web Site Web Site 
Worker 
Thread 
RDBMS 
Projections 
Worker 
Thread 
RDBMS 
Commits 
Application Tier 
Database Tier 
© 2014 Aviva Solutions 21 november 2014
Load Balancer 
Second Attempt 
Web Site Web Site 
Worker 
Thread 
RDBMS 
Projections 
RDBMS 
Commits 
Worker 
Thread 
RDBMS 
Projections 
Application Tier 
Database Tier 
© 2014 Aviva Solutions 21 november 2014
Final Attempt 
Load Balancer 
Web Site Web Site 
Application Tier 
Worker 
Thread 
RavenDB 
Projections 
RDBMS 
Commits 
Worker 
Thread 
RavenDB 
Projections 
Database Tier 
© 2014 Aviva Solutions 21 november 2014
RavenDB 
Advantages 
• No migrations needed 
• No more column length problems 
• Faster 
• Less SQL Server load 
• More scalable 
• Dynamic Indexing 
• Keyboard/faceted search w/ 
Lucene 
• Concious decision on 
asynchronicity 
Disadvantages 
• New technology, new concepts 
• No LINQ 
• Async indexes 
• Requires rewrite of all 
projectors and queries 
© 2014 Aviva Solutions 21 november 2014
Front-End Server 
Web Site WCF Services 
? 
Worker 
Thread ? ? 
RavenDB 
Projections 
Commits 
Application Tier 
Database Tier 
Job 
Scheduler 
? 
© 2014 Aviva Solutions 21 november 2014
Front-End Server 
/queries/{query} 
Worker Job Scheduler 
Thread 
RavenDB 
Projections 
Web Site 
Commits 
Application Tier 
Database Tier 
WCF Services 
© 2014 Aviva Solutions 21 november 2014
OWIN 
Startup 
Main Repository Component Repository 
Web Site 
Module Module 
Queries Queries 
Query 
Handlers 
QueryHost RavenDB 
Query 
RavenSession Checkpoint Store 
HTTP-based 
QueryProcessor Interfaces 
Query 
Handlers HTTP (network or memory) 
Projectors Projectors 
RavenDB 
Commit 
EventStore 
QueryHost Raven 
QueryHost Client 
QueryHost 
/queries/{query} 
Querying 
Controller 
Thread Pool 
Owin 
WebAPI 2 
NEventStore 
Katana 
Autofac 
Query Host 
Settings 
Durable Commit 
Dispatcher 
© 2014 Aviva Solutions 21 november 2014
Concurrency 
Issues 
© 2014 Aviva Solutions 21 november 2014
Event Merging 
Primary Node Laptop / Secondary Node 
StreamId: User-Dedo, Rev: 6 
RoleRevokedEvent 
StreamId: User-Dedo 
PasswordChangedEvent 
StreamId: User-Dedo, Rev: 5 
PasswordChangedEvent 
StreamId: User-Dedo, Rev: 4 
GrantedRoleEvent 
StreamId: User-Dedo, Rev: 3 
PhoneNumberAddedEvent 
GrantedRoleEvent 
UserCreatedEvent 
StreamId: User-Dedo, Rev: 7 
PasswordChangedEvent 
StreamId: User-Dedo, Rev: 6 
GrantedRoleEvent 
StreamId: User-Dedo, Rev: 5 
RoleRevokedEvent 
StreamId: User-Dedo, Rev: 4 
PasswordChangedEvent 
StreamId: User-Dedo, Rev: 3 
PhoneNumberAddedEvent 
GrantedRoleEvent 
UserCreatedEvent 
Last Sync Point 
Time 
© 2014 Aviva Solutions 21 november 2014
Future? 
© 2014 Aviva Solutions 21 november 2014
Opportunities 
• In-memory projections 
• Gossip-based detection 
• ATOM feeds 
© 2014 Aviva Solutions 21 november 2014
Reading Material 
• NEventStore on GitHub 
• Domain Events by Udi Dahan 
• Event Versioning by Rinat Abdullin 
• Effective Aggregate Design by Vaughn Vernon 
• NHibernate vs Entity Framework in DDD by me… 
• DomainDrivenDesign.org 
• RAFT, a distributed consensus protocol 
• Cedar by Damian Hickey 
© 2014 Aviva Solutions 21 november 2014
Email 
dennis.doomen@avivasolutions.nl 
Twitter 
@ddoomen 
Blog 
www.dennisdoomen.net 
© 2014 Aviva Solutions 21 november 2014

Weitere ähnliche Inhalte

Was ist angesagt?

Virtualization Explained | What Is Virtualization Technology? | Virtualizatio...
Virtualization Explained | What Is Virtualization Technology? | Virtualizatio...Virtualization Explained | What Is Virtualization Technology? | Virtualizatio...
Virtualization Explained | What Is Virtualization Technology? | Virtualizatio...Simplilearn
 
Event-driven microservices
Event-driven microservicesEvent-driven microservices
Event-driven microservicesAndrew Schofield
 
Microservices + Events + Docker = A Perfect Trio (dockercon)
Microservices + Events + Docker = A Perfect Trio (dockercon)Microservices + Events + Docker = A Perfect Trio (dockercon)
Microservices + Events + Docker = A Perfect Trio (dockercon)Chris Richardson
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architectureThe Software House
 
Kubernetes Concepts And Architecture Powerpoint Presentation Slides
Kubernetes Concepts And Architecture Powerpoint Presentation SlidesKubernetes Concepts And Architecture Powerpoint Presentation Slides
Kubernetes Concepts And Architecture Powerpoint Presentation SlidesSlideTeam
 
CQRS and Event Sourcing
CQRS and Event Sourcing CQRS and Event Sourcing
CQRS and Event Sourcing Inho Kang
 
Lessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure codeLessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure codeYevgeniy Brikman
 
WebLogic Scripting Tool Overview
WebLogic Scripting Tool OverviewWebLogic Scripting Tool Overview
WebLogic Scripting Tool OverviewJames Bayer
 
Virtualization
VirtualizationVirtualization
Virtualizationvishnurk
 
Micro services vs Monolith Architecture
Micro services vs Monolith ArchitectureMicro services vs Monolith Architecture
Micro services vs Monolith ArchitectureMohamedElGohary71
 
Big Data Redis Mongodb Dynamodb Sharding
Big Data Redis Mongodb Dynamodb ShardingBig Data Redis Mongodb Dynamodb Sharding
Big Data Redis Mongodb Dynamodb ShardingAraf Karsh Hamid
 
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...
Developing event-driven microservices with event sourcing and CQRS  (svcc, sv...Developing event-driven microservices with event sourcing and CQRS  (svcc, sv...
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...Chris Richardson
 
Hci solution with VxRail
Hci solution with VxRailHci solution with VxRail
Hci solution with VxRailAnton An
 
Introduction to Hyper-V
Introduction to Hyper-VIntroduction to Hyper-V
Introduction to Hyper-VMark Wilson
 
Azure Databricks - An Introduction (by Kris Bock)
Azure Databricks - An Introduction (by Kris Bock)Azure Databricks - An Introduction (by Kris Bock)
Azure Databricks - An Introduction (by Kris Bock)Daniel Toomey
 
Designing Microservices
Designing MicroservicesDesigning Microservices
Designing MicroservicesDavid Chou
 
Jmeter vs loadrunner vs neoload
Jmeter vs loadrunner vs neoloadJmeter vs loadrunner vs neoload
Jmeter vs loadrunner vs neoloadpratik mohite
 

Was ist angesagt? (20)

Virtualization Explained | What Is Virtualization Technology? | Virtualizatio...
Virtualization Explained | What Is Virtualization Technology? | Virtualizatio...Virtualization Explained | What Is Virtualization Technology? | Virtualizatio...
Virtualization Explained | What Is Virtualization Technology? | Virtualizatio...
 
Event-driven microservices
Event-driven microservicesEvent-driven microservices
Event-driven microservices
 
Microservices + Events + Docker = A Perfect Trio (dockercon)
Microservices + Events + Docker = A Perfect Trio (dockercon)Microservices + Events + Docker = A Perfect Trio (dockercon)
Microservices + Events + Docker = A Perfect Trio (dockercon)
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architecture
 
Kubernetes Concepts And Architecture Powerpoint Presentation Slides
Kubernetes Concepts And Architecture Powerpoint Presentation SlidesKubernetes Concepts And Architecture Powerpoint Presentation Slides
Kubernetes Concepts And Architecture Powerpoint Presentation Slides
 
CQRS and Event Sourcing
CQRS and Event Sourcing CQRS and Event Sourcing
CQRS and Event Sourcing
 
Lessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure codeLessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure code
 
WebLogic Scripting Tool Overview
WebLogic Scripting Tool OverviewWebLogic Scripting Tool Overview
WebLogic Scripting Tool Overview
 
Virtualization
VirtualizationVirtualization
Virtualization
 
Micro services vs Monolith Architecture
Micro services vs Monolith ArchitectureMicro services vs Monolith Architecture
Micro services vs Monolith Architecture
 
Big Data Redis Mongodb Dynamodb Sharding
Big Data Redis Mongodb Dynamodb ShardingBig Data Redis Mongodb Dynamodb Sharding
Big Data Redis Mongodb Dynamodb Sharding
 
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...
Developing event-driven microservices with event sourcing and CQRS  (svcc, sv...Developing event-driven microservices with event sourcing and CQRS  (svcc, sv...
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...
 
Hci solution with VxRail
Hci solution with VxRailHci solution with VxRail
Hci solution with VxRail
 
DevOps @ OpenShift Online
DevOps @ OpenShift OnlineDevOps @ OpenShift Online
DevOps @ OpenShift Online
 
Microservices
MicroservicesMicroservices
Microservices
 
Introduction to Hyper-V
Introduction to Hyper-VIntroduction to Hyper-V
Introduction to Hyper-V
 
Azure Databricks - An Introduction (by Kris Bock)
Azure Databricks - An Introduction (by Kris Bock)Azure Databricks - An Introduction (by Kris Bock)
Azure Databricks - An Introduction (by Kris Bock)
 
Designing Microservices
Designing MicroservicesDesigning Microservices
Designing Microservices
 
Code Refactoring Cheatsheet
Code Refactoring CheatsheetCode Refactoring Cheatsheet
Code Refactoring Cheatsheet
 
Jmeter vs loadrunner vs neoload
Jmeter vs loadrunner vs neoloadJmeter vs loadrunner vs neoload
Jmeter vs loadrunner vs neoload
 

Andere mochten auch

The Good, The Bad and The Ugly of Event Sourcing
The Good, The Bad and The Ugly of Event SourcingThe Good, The Bad and The Ugly of Event Sourcing
The Good, The Bad and The Ugly of Event SourcingDennis Doomen
 
CQRS and Event Sourcing, An Alternative Architecture for DDD
CQRS and Event Sourcing, An Alternative Architecture for DDDCQRS and Event Sourcing, An Alternative Architecture for DDD
CQRS and Event Sourcing, An Alternative Architecture for DDDDennis Doomen
 
How to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the footHow to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the footDennis Doomen
 
Events at the tip of your fingers
Events at the tip of your fingersEvents at the tip of your fingers
Events at the tip of your fingersCédric Pontet
 
Microservices - Architekturansatz mit grossen Herausforderungen und gewissen ...
Microservices - Architekturansatz mit grossen Herausforderungen und gewissen ...Microservices - Architekturansatz mit grossen Herausforderungen und gewissen ...
Microservices - Architekturansatz mit grossen Herausforderungen und gewissen ...engelschall
 
Functional and Event Driven - another approach to domain modeling
Functional and Event Driven - another approach to domain modelingFunctional and Event Driven - another approach to domain modeling
Functional and Event Driven - another approach to domain modelingDebasish Ghosh
 
Decoupling with Domain Events
Decoupling with Domain EventsDecoupling with Domain Events
Decoupling with Domain EventsSteven Smith
 
Redes Sociais - Planejamento e Mensuração
Redes Sociais - Planejamento e MensuraçãoRedes Sociais - Planejamento e Mensuração
Redes Sociais - Planejamento e MensuraçãoMarcelo Ivanovitch
 
Self-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to MicroservicesSelf-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to MicroservicesEberhard Wolff
 
codecentric AG: CQRS and Event Sourcing Applications with Cassandra
codecentric AG: CQRS and Event Sourcing Applications with Cassandracodecentric AG: CQRS and Event Sourcing Applications with Cassandra
codecentric AG: CQRS and Event Sourcing Applications with CassandraDataStax Academy
 
RISELab:Enabling Intelligent Real-Time Decisions
RISELab:Enabling Intelligent Real-Time DecisionsRISELab:Enabling Intelligent Real-Time Decisions
RISELab:Enabling Intelligent Real-Time DecisionsJen Aman
 
Digital foundations - Paving the road to cloud solutions
Digital foundations - Paving the road to cloud solutionsDigital foundations - Paving the road to cloud solutions
Digital foundations - Paving the road to cloud solutionsEric D. Schabell
 
Microservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale AgileMicroservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale AgileEberhard Wolff
 
ALLUXIO (formerly Tachyon): Unify Data at Memory Speed - Effective using Spar...
ALLUXIO (formerly Tachyon): Unify Data at Memory Speed - Effective using Spar...ALLUXIO (formerly Tachyon): Unify Data at Memory Speed - Effective using Spar...
ALLUXIO (formerly Tachyon): Unify Data at Memory Speed - Effective using Spar...Alluxio, Inc.
 
Distributed Stream Processing - Spark Summit East 2017
Distributed Stream Processing - Spark Summit East 2017Distributed Stream Processing - Spark Summit East 2017
Distributed Stream Processing - Spark Summit East 2017Petr Zapletal
 
Linkedin for-branding-business
Linkedin for-branding-businessLinkedin for-branding-business
Linkedin for-branding-businessDML Srl
 
SnappyData, the Spark Database. A unified cluster for streaming, transactions...
SnappyData, the Spark Database. A unified cluster for streaming, transactions...SnappyData, the Spark Database. A unified cluster for streaming, transactions...
SnappyData, the Spark Database. A unified cluster for streaming, transactions...SnappyData
 
A look under the hood at Apache Spark's API and engine evolutions
A look under the hood at Apache Spark's API and engine evolutionsA look under the hood at Apache Spark's API and engine evolutions
A look under the hood at Apache Spark's API and engine evolutionsDatabricks
 
Tuning and Monitoring Deep Learning on Apache Spark
Tuning and Monitoring Deep Learning on Apache SparkTuning and Monitoring Deep Learning on Apache Spark
Tuning and Monitoring Deep Learning on Apache SparkDatabricks
 
Improving Python and Spark (PySpark) Performance and Interoperability
Improving Python and Spark (PySpark) Performance and InteroperabilityImproving Python and Spark (PySpark) Performance and Interoperability
Improving Python and Spark (PySpark) Performance and InteroperabilityWes McKinney
 

Andere mochten auch (20)

The Good, The Bad and The Ugly of Event Sourcing
The Good, The Bad and The Ugly of Event SourcingThe Good, The Bad and The Ugly of Event Sourcing
The Good, The Bad and The Ugly of Event Sourcing
 
CQRS and Event Sourcing, An Alternative Architecture for DDD
CQRS and Event Sourcing, An Alternative Architecture for DDDCQRS and Event Sourcing, An Alternative Architecture for DDD
CQRS and Event Sourcing, An Alternative Architecture for DDD
 
How to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the footHow to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the foot
 
Events at the tip of your fingers
Events at the tip of your fingersEvents at the tip of your fingers
Events at the tip of your fingers
 
Microservices - Architekturansatz mit grossen Herausforderungen und gewissen ...
Microservices - Architekturansatz mit grossen Herausforderungen und gewissen ...Microservices - Architekturansatz mit grossen Herausforderungen und gewissen ...
Microservices - Architekturansatz mit grossen Herausforderungen und gewissen ...
 
Functional and Event Driven - another approach to domain modeling
Functional and Event Driven - another approach to domain modelingFunctional and Event Driven - another approach to domain modeling
Functional and Event Driven - another approach to domain modeling
 
Decoupling with Domain Events
Decoupling with Domain EventsDecoupling with Domain Events
Decoupling with Domain Events
 
Redes Sociais - Planejamento e Mensuração
Redes Sociais - Planejamento e MensuraçãoRedes Sociais - Planejamento e Mensuração
Redes Sociais - Planejamento e Mensuração
 
Self-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to MicroservicesSelf-contained Systems: A Different Approach to Microservices
Self-contained Systems: A Different Approach to Microservices
 
codecentric AG: CQRS and Event Sourcing Applications with Cassandra
codecentric AG: CQRS and Event Sourcing Applications with Cassandracodecentric AG: CQRS and Event Sourcing Applications with Cassandra
codecentric AG: CQRS and Event Sourcing Applications with Cassandra
 
RISELab:Enabling Intelligent Real-Time Decisions
RISELab:Enabling Intelligent Real-Time DecisionsRISELab:Enabling Intelligent Real-Time Decisions
RISELab:Enabling Intelligent Real-Time Decisions
 
Digital foundations - Paving the road to cloud solutions
Digital foundations - Paving the road to cloud solutionsDigital foundations - Paving the road to cloud solutions
Digital foundations - Paving the road to cloud solutions
 
Microservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale AgileMicroservices and Self-contained System to Scale Agile
Microservices and Self-contained System to Scale Agile
 
ALLUXIO (formerly Tachyon): Unify Data at Memory Speed - Effective using Spar...
ALLUXIO (formerly Tachyon): Unify Data at Memory Speed - Effective using Spar...ALLUXIO (formerly Tachyon): Unify Data at Memory Speed - Effective using Spar...
ALLUXIO (formerly Tachyon): Unify Data at Memory Speed - Effective using Spar...
 
Distributed Stream Processing - Spark Summit East 2017
Distributed Stream Processing - Spark Summit East 2017Distributed Stream Processing - Spark Summit East 2017
Distributed Stream Processing - Spark Summit East 2017
 
Linkedin for-branding-business
Linkedin for-branding-businessLinkedin for-branding-business
Linkedin for-branding-business
 
SnappyData, the Spark Database. A unified cluster for streaming, transactions...
SnappyData, the Spark Database. A unified cluster for streaming, transactions...SnappyData, the Spark Database. A unified cluster for streaming, transactions...
SnappyData, the Spark Database. A unified cluster for streaming, transactions...
 
A look under the hood at Apache Spark's API and engine evolutions
A look under the hood at Apache Spark's API and engine evolutionsA look under the hood at Apache Spark's API and engine evolutions
A look under the hood at Apache Spark's API and engine evolutions
 
Tuning and Monitoring Deep Learning on Apache Spark
Tuning and Monitoring Deep Learning on Apache SparkTuning and Monitoring Deep Learning on Apache Spark
Tuning and Monitoring Deep Learning on Apache Spark
 
Improving Python and Spark (PySpark) Performance and Interoperability
Improving Python and Spark (PySpark) Performance and InteroperabilityImproving Python and Spark (PySpark) Performance and Interoperability
Improving Python and Spark (PySpark) Performance and Interoperability
 

Ähnlich wie Building occasionally connected applications using event sourcing

The Fastest Way to Redis on Pivotal Cloud Foundry
The Fastest Way to Redis on Pivotal Cloud FoundryThe Fastest Way to Redis on Pivotal Cloud Foundry
The Fastest Way to Redis on Pivotal Cloud FoundryVMware Tanzu
 
ukoug-soa-sig-june-2016 v0.5
ukoug-soa-sig-june-2016 v0.5ukoug-soa-sig-june-2016 v0.5
ukoug-soa-sig-june-2016 v0.5Bruno Alves
 
Upgrading to Oracle SOA 12.1 & 12.2 - Practical Steps and Project Experiences
Upgrading to Oracle SOA 12.1 & 12.2 - Practical Steps and Project ExperiencesUpgrading to Oracle SOA 12.1 & 12.2 - Practical Steps and Project Experiences
Upgrading to Oracle SOA 12.1 & 12.2 - Practical Steps and Project ExperiencesBruno Alves
 
Cloud computing & Batch processing: potentiels & perspectives
Cloud computing & Batch processing:  potentiels & perspectives  Cloud computing & Batch processing:  potentiels & perspectives
Cloud computing & Batch processing: potentiels & perspectives Claude Riousset
 
Some Domestic & Global projects executed by our team.
Some Domestic & Global projects executed by our team.Some Domestic & Global projects executed by our team.
Some Domestic & Global projects executed by our team.Vasant Bhanushali
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as CodeRobert Greiner
 
Windows Server 2012 R2 Jump Start - WEB
Windows Server 2012 R2 Jump Start - WEBWindows Server 2012 R2 Jump Start - WEB
Windows Server 2012 R2 Jump Start - WEBPaulo Freitas
 
.NET Cloud-Native Bootcamp
.NET Cloud-Native Bootcamp.NET Cloud-Native Bootcamp
.NET Cloud-Native BootcampVMware Tanzu
 
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...jeckels
 
Geographically Distributed Multi-Master MySQL Clusters
Geographically Distributed Multi-Master MySQL ClustersGeographically Distributed Multi-Master MySQL Clusters
Geographically Distributed Multi-Master MySQL ClustersContinuent
 
MySQL in the Cloud, is Amazon RDS for you?
MySQL in the Cloud, is Amazon RDS for you?MySQL in the Cloud, is Amazon RDS for you?
MySQL in the Cloud, is Amazon RDS for you?Continuent
 
Morning Coffee - Windows Server 2016
Morning Coffee - Windows Server 2016Morning Coffee - Windows Server 2016
Morning Coffee - Windows Server 2016Primend
 
Microsoft Windows Server 2012 R2 Overview - Presented by Atidan
Microsoft Windows Server 2012 R2 Overview - Presented by AtidanMicrosoft Windows Server 2012 R2 Overview - Presented by Atidan
Microsoft Windows Server 2012 R2 Overview - Presented by AtidanDavid J Rosenthal
 
Jelastic - DevOps for Java with Docker Containers - Madrid 2015
Jelastic - DevOps for Java with Docker Containers - Madrid 2015Jelastic - DevOps for Java with Docker Containers - Madrid 2015
Jelastic - DevOps for Java with Docker Containers - Madrid 2015Jelastic Multi-Cloud PaaS
 
Docker for the enterprise
Docker for the enterpriseDocker for the enterprise
Docker for the enterpriseBert Poller
 
AWS and VMware: How to Architect and Manage Hybrid Environments
AWS and VMware: How to Architect and Manage Hybrid EnvironmentsAWS and VMware: How to Architect and Manage Hybrid Environments
AWS and VMware: How to Architect and Manage Hybrid EnvironmentsRightScale
 
Cloud for agile_sw_projects-final
Cloud for agile_sw_projects-finalCloud for agile_sw_projects-final
Cloud for agile_sw_projects-finalAlain Delafosse
 
VMworld 2013: Three Advantages of Running Cloud Foundry in a VMware Private C...
VMworld 2013: Three Advantages of Running Cloud Foundry in a VMware Private C...VMworld 2013: Three Advantages of Running Cloud Foundry in a VMware Private C...
VMworld 2013: Three Advantages of Running Cloud Foundry in a VMware Private C...VMworld
 

Ähnlich wie Building occasionally connected applications using event sourcing (20)

The Fastest Way to Redis on Pivotal Cloud Foundry
The Fastest Way to Redis on Pivotal Cloud FoundryThe Fastest Way to Redis on Pivotal Cloud Foundry
The Fastest Way to Redis on Pivotal Cloud Foundry
 
ukoug-soa-sig-june-2016 v0.5
ukoug-soa-sig-june-2016 v0.5ukoug-soa-sig-june-2016 v0.5
ukoug-soa-sig-june-2016 v0.5
 
Upgrading to Oracle SOA 12.1 & 12.2 - Practical Steps and Project Experiences
Upgrading to Oracle SOA 12.1 & 12.2 - Practical Steps and Project ExperiencesUpgrading to Oracle SOA 12.1 & 12.2 - Practical Steps and Project Experiences
Upgrading to Oracle SOA 12.1 & 12.2 - Practical Steps and Project Experiences
 
Cloud computing & Batch processing: potentiels & perspectives
Cloud computing & Batch processing:  potentiels & perspectives  Cloud computing & Batch processing:  potentiels & perspectives
Cloud computing & Batch processing: potentiels & perspectives
 
Some Domestic & Global projects executed by our team.
Some Domestic & Global projects executed by our team.Some Domestic & Global projects executed by our team.
Some Domestic & Global projects executed by our team.
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as Code
 
Windows Server 2012 R2 Jump Start - WEB
Windows Server 2012 R2 Jump Start - WEBWindows Server 2012 R2 Jump Start - WEB
Windows Server 2012 R2 Jump Start - WEB
 
.NET Cloud-Native Bootcamp
.NET Cloud-Native Bootcamp.NET Cloud-Native Bootcamp
.NET Cloud-Native Bootcamp
 
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...
 
Geographically Distributed Multi-Master MySQL Clusters
Geographically Distributed Multi-Master MySQL ClustersGeographically Distributed Multi-Master MySQL Clusters
Geographically Distributed Multi-Master MySQL Clusters
 
MySQL in the Cloud, is Amazon RDS for you?
MySQL in the Cloud, is Amazon RDS for you?MySQL in the Cloud, is Amazon RDS for you?
MySQL in the Cloud, is Amazon RDS for you?
 
Morning Coffee - Windows Server 2016
Morning Coffee - Windows Server 2016Morning Coffee - Windows Server 2016
Morning Coffee - Windows Server 2016
 
Microsoft Windows Server 2012 R2 Overview - Presented by Atidan
Microsoft Windows Server 2012 R2 Overview - Presented by AtidanMicrosoft Windows Server 2012 R2 Overview - Presented by Atidan
Microsoft Windows Server 2012 R2 Overview - Presented by Atidan
 
OPNFVSummitNov2015-v4
OPNFVSummitNov2015-v4OPNFVSummitNov2015-v4
OPNFVSummitNov2015-v4
 
Jelastic - DevOps for Java with Docker Containers - Madrid 2015
Jelastic - DevOps for Java with Docker Containers - Madrid 2015Jelastic - DevOps for Java with Docker Containers - Madrid 2015
Jelastic - DevOps for Java with Docker Containers - Madrid 2015
 
Designing microservices
Designing microservicesDesigning microservices
Designing microservices
 
Docker for the enterprise
Docker for the enterpriseDocker for the enterprise
Docker for the enterprise
 
AWS and VMware: How to Architect and Manage Hybrid Environments
AWS and VMware: How to Architect and Manage Hybrid EnvironmentsAWS and VMware: How to Architect and Manage Hybrid Environments
AWS and VMware: How to Architect and Manage Hybrid Environments
 
Cloud for agile_sw_projects-final
Cloud for agile_sw_projects-finalCloud for agile_sw_projects-final
Cloud for agile_sw_projects-final
 
VMworld 2013: Three Advantages of Running Cloud Foundry in a VMware Private C...
VMworld 2013: Three Advantages of Running Cloud Foundry in a VMware Private C...VMworld 2013: Three Advantages of Running Cloud Foundry in a VMware Private C...
VMworld 2013: Three Advantages of Running Cloud Foundry in a VMware Private C...
 

Mehr von Dennis Doomen

Getting a grip on your code dependencies (2023-10)
Getting a grip on your code dependencies (2023-10)Getting a grip on your code dependencies (2023-10)
Getting a grip on your code dependencies (2023-10)Dennis Doomen
 
Tools and practices to help you deal with legacy code
Tools and practices to help you deal with legacy codeTools and practices to help you deal with legacy code
Tools and practices to help you deal with legacy codeDennis Doomen
 
What you can learn from an open-source project with 250 million downloads
What you can learn from an open-source project with 250 million downloadsWhat you can learn from an open-source project with 250 million downloads
What you can learn from an open-source project with 250 million downloadsDennis Doomen
 
Getting a grip on your code dependencies
Getting a grip on your code dependenciesGetting a grip on your code dependencies
Getting a grip on your code dependenciesDennis Doomen
 
My Laws of Test Driven Development (2023)
My Laws of Test Driven Development (2023)My Laws of Test Driven Development (2023)
My Laws of Test Driven Development (2023)Dennis Doomen
 
Design patterns for Event Sourcing in .NET
Design patterns for Event Sourcing in .NETDesign patterns for Event Sourcing in .NET
Design patterns for Event Sourcing in .NETDennis Doomen
 
Automate Infrastructure with Pulumi and C#
Automate Infrastructure with Pulumi and C#Automate Infrastructure with Pulumi and C#
Automate Infrastructure with Pulumi and C#Dennis Doomen
 
What is the right unit in unit testing (UpdateConf 2022)
What is the right unit in unit testing (UpdateConf 2022)What is the right unit in unit testing (UpdateConf 2022)
What is the right unit in unit testing (UpdateConf 2022)Dennis Doomen
 
Slow Event Sourcing (re)projections - Just make them faster!
Slow Event Sourcing (re)projections - Just make them faster!Slow Event Sourcing (re)projections - Just make them faster!
Slow Event Sourcing (re)projections - Just make them faster!Dennis Doomen
 
50 things software teams should not do.pptx
50 things software teams should not do.pptx50 things software teams should not do.pptx
50 things software teams should not do.pptxDennis Doomen
 
What is the right "unit" in unit testing and why it is not a class?
What is the right "unit" in unit testing and why it is not a class?What is the right "unit" in unit testing and why it is not a class?
What is the right "unit" in unit testing and why it is not a class?Dennis Doomen
 
A lab around the principles and practices for writing maintainable code
A lab around the principles and practices for writing maintainable codeA lab around the principles and practices for writing maintainable code
A lab around the principles and practices for writing maintainable codeDennis Doomen
 
How to Practice TDD Without Shooting Yourself in the Foot
How to Practice TDD Without Shooting Yourself in the FootHow to Practice TDD Without Shooting Yourself in the Foot
How to Practice TDD Without Shooting Yourself in the FootDennis Doomen
 
Decomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservicesDecomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservicesDennis Doomen
 
Event Sourcing from the Trenches (DDD Europe 2020)
Event Sourcing from the Trenches (DDD Europe 2020)Event Sourcing from the Trenches (DDD Europe 2020)
Event Sourcing from the Trenches (DDD Europe 2020)Dennis Doomen
 
Practical introduction to DDD, CQRS and Event Sourcing
Practical introduction to DDD, CQRS and Event SourcingPractical introduction to DDD, CQRS and Event Sourcing
Practical introduction to DDD, CQRS and Event SourcingDennis Doomen
 
How to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the footHow to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the footDennis Doomen
 
Decomposing the Monolith (Riga Dev Days 2019)
Decomposing the Monolith (Riga Dev Days 2019)Decomposing the Monolith (Riga Dev Days 2019)
Decomposing the Monolith (Riga Dev Days 2019)Dennis Doomen
 
A lab around the principles and practices for writing maintainable code (2019)
A lab around the principles and practices for writing maintainable code (2019)A lab around the principles and practices for writing maintainable code (2019)
A lab around the principles and practices for writing maintainable code (2019)Dennis Doomen
 
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software developmentLessons learned from two decades of professional software development
Lessons learned from two decades of professional software developmentDennis Doomen
 

Mehr von Dennis Doomen (20)

Getting a grip on your code dependencies (2023-10)
Getting a grip on your code dependencies (2023-10)Getting a grip on your code dependencies (2023-10)
Getting a grip on your code dependencies (2023-10)
 
Tools and practices to help you deal with legacy code
Tools and practices to help you deal with legacy codeTools and practices to help you deal with legacy code
Tools and practices to help you deal with legacy code
 
What you can learn from an open-source project with 250 million downloads
What you can learn from an open-source project with 250 million downloadsWhat you can learn from an open-source project with 250 million downloads
What you can learn from an open-source project with 250 million downloads
 
Getting a grip on your code dependencies
Getting a grip on your code dependenciesGetting a grip on your code dependencies
Getting a grip on your code dependencies
 
My Laws of Test Driven Development (2023)
My Laws of Test Driven Development (2023)My Laws of Test Driven Development (2023)
My Laws of Test Driven Development (2023)
 
Design patterns for Event Sourcing in .NET
Design patterns for Event Sourcing in .NETDesign patterns for Event Sourcing in .NET
Design patterns for Event Sourcing in .NET
 
Automate Infrastructure with Pulumi and C#
Automate Infrastructure with Pulumi and C#Automate Infrastructure with Pulumi and C#
Automate Infrastructure with Pulumi and C#
 
What is the right unit in unit testing (UpdateConf 2022)
What is the right unit in unit testing (UpdateConf 2022)What is the right unit in unit testing (UpdateConf 2022)
What is the right unit in unit testing (UpdateConf 2022)
 
Slow Event Sourcing (re)projections - Just make them faster!
Slow Event Sourcing (re)projections - Just make them faster!Slow Event Sourcing (re)projections - Just make them faster!
Slow Event Sourcing (re)projections - Just make them faster!
 
50 things software teams should not do.pptx
50 things software teams should not do.pptx50 things software teams should not do.pptx
50 things software teams should not do.pptx
 
What is the right "unit" in unit testing and why it is not a class?
What is the right "unit" in unit testing and why it is not a class?What is the right "unit" in unit testing and why it is not a class?
What is the right "unit" in unit testing and why it is not a class?
 
A lab around the principles and practices for writing maintainable code
A lab around the principles and practices for writing maintainable codeA lab around the principles and practices for writing maintainable code
A lab around the principles and practices for writing maintainable code
 
How to Practice TDD Without Shooting Yourself in the Foot
How to Practice TDD Without Shooting Yourself in the FootHow to Practice TDD Without Shooting Yourself in the Foot
How to Practice TDD Without Shooting Yourself in the Foot
 
Decomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservicesDecomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservices
 
Event Sourcing from the Trenches (DDD Europe 2020)
Event Sourcing from the Trenches (DDD Europe 2020)Event Sourcing from the Trenches (DDD Europe 2020)
Event Sourcing from the Trenches (DDD Europe 2020)
 
Practical introduction to DDD, CQRS and Event Sourcing
Practical introduction to DDD, CQRS and Event SourcingPractical introduction to DDD, CQRS and Event Sourcing
Practical introduction to DDD, CQRS and Event Sourcing
 
How to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the footHow to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the foot
 
Decomposing the Monolith (Riga Dev Days 2019)
Decomposing the Monolith (Riga Dev Days 2019)Decomposing the Monolith (Riga Dev Days 2019)
Decomposing the Monolith (Riga Dev Days 2019)
 
A lab around the principles and practices for writing maintainable code (2019)
A lab around the principles and practices for writing maintainable code (2019)A lab around the principles and practices for writing maintainable code (2019)
A lab around the principles and practices for writing maintainable code (2019)
 
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software developmentLessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
 

Kürzlich hochgeladen

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 

Kürzlich hochgeladen (20)

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 

Building occasionally connected applications using event sourcing

  • 1. Occassionally Connected Applications With Event Sourcing Dennis Doomen © 2014 Aviva Solutions 21 november 2014 dennis.doomen@avivasolutions.nl
  • 2. About Me • Principal Consultant • 17 years in IT • C++ origins but C# since 2001 • Specialties • .NET • Architecture • Scrum/Kanban/XP • ALM • Speaker • Public initiatives • C# Coding Guidelines • Fluent Assertions • Internet • www.dennisdoomen.net • DZone MVB • @ddoomen © 2014 Aviva Solutions Dennis Doomen 21 november 2014
  • 3. Contents • What we tried to solve • Our options • What we choose for • Design Challenges • Scalability Challenges • Architectural Challenges • Concurrency Challenges • Future? © 2014 Aviva Solutions 21 november 2014
  • 4. What we tried to solve © 2014 Aviva Solutions 21 november 2014
  • 5. Central Farm Seaborn Servers High- Latency LAN Decentralized Servers attachments) Mobile Clients Intermittent Satellite Connection 3G (w/o WLAN (attachments) Only synchronize what is relevant! >100 XCopy RDBMS © 2014 Aviva Solutions 21 november 2014
  • 6. What we had Commands Web Application Command Service Projections Queries Query Processor Command Handlers Domain Model Repositories Domain Services SQL / Oracle Service Agents Backoffice Systems Query Handlers Repositories Patterns & Principles • Domain Driven Design • CQRS • Repository Abstraction • TDD/BDD • SOLID Framework & Libraries • NHibernate • Autofac • ASP.NET WebForms / MVC • SQLite © 2014 Aviva Solutions 21 november 2014
  • 7. Our options 1. SQL Server Replication 2. Command Synchronization 3. Aggregate Serialization 4. RavenDB 5. Event Sourcing © 2014 Aviva Solutions 21 november 2014
  • 8. 1. SQL Server Replication Automatic reconnects Proven technology Automatic schema updates Development can be outsourced Synchronization over HTTP Only SQL Server (Express) Filtering is limited Affects client infrastructure No real-world examples Unsure about limitations Requires SQL expertize. Difficult to diagnose issues during development © 2014 Aviva Solutions 21 november 2014
  • 9. 2. Command Synchronization Supports any database No special deployments requirements Potentially unresolvable out-of-sync issue Requires bypassing business rules Command != actual change Limited filtering possibilities Custom serialization Separate queue of commands © 2014 Aviva Solutions 21 november 2014
  • 10. 3. Aggregate Serialization Supports any database No special deployments requirements Doesn’t interfere with business rules No out-of-sync issues Requires specialized code per aggregate Needs an enforced order of synchronization. Payload is not optimized Requires a lot of querying and change tracking © 2014 Aviva Solutions 21 november 2014
  • 11. 4. RavenDB Reduces complexity Smart reconnects Synchronization built-in Archiving built-in Built-in caching Very scalable Improves productivity Improves query performance Lucene based Acceptance by enterprise clients New querying (map/reduce) concepts Limited track record © 2014 Aviva Solutions 21 november 2014
  • 12. Event Sourcing Web Application Command Service Execute query ChangeUserEmailCommand Query Processor ChangeUser EmailHandler Invoke method User Aggregate Submit changes Get<TAggregateRoot>(key, version) Domain UOW UserProjector Query Handler LINQ, HQL, SQL Projections UOW Read DB Load(events) DAO Commits Write DB Submit Apply Get changes Dispatcher Commit Handle(UserEmailChangedEvent) © 2014 Aviva Solutions 21 november 2014
  • 13. 5. Event Sourcing Transparent to clients Works with any SQL/No-SQL DB Can improve performance Advance conflict resolution Natural unit of synchronization Can be very scalable Lots of new concepts Big impact on domain model Synchronization must be custom-built Lots of unforeseen challenges © 2014 Aviva Solutions 21 november 2014
  • 14. What we chose for © 2014 Aviva Solutions 21 november 2014
  • 15. The Revised Architecture Commands Command Service Domain Model Events Dispatcher Domain Repository Command Handlers Domain Services Event Store Service Agents Web Application Backoffice Systems Queries Projections Query Processor Query Handler Projectors Projection Repositories Query Store Events © 2014 Aviva Solutions 21 november 2014
  • 16. Advantages • Optimized projections • Projections = cache -> rebuild anytime • Reporting node • Intrinsic auditing • Supports temporal projections © 2014 Aviva Solutions 21 november 2014
  • 17. Synchronization Overview Just changes ownership of an aggregate and Primary Node Laptop / Secondary Node Check-out / Check-in forces synchronization Each aggregate is owned by a node to prevent functional conflicts SOAP/WS-* E.g. UserPasswordChanged, DocumentSigned, Contains a subset of the master Changes Changes Images, etc 6298 6298 6297 3 2 1 User Interface Changes Queries Attachments, Blobs Query Data Users Groups Documents Objects Folders 6301 6300 6299 3 2 1 User Interface Queries Changes Attachments, Images, etc Blobs Can be rebuild from the changes table at any point in time Query Data Users Groups Documents Objects Folders TitleChanged, RoleRevoked WIFI/LAN/3G WIFI/LAN Optimized for querying SOAP/WS-* HTTPS-REST © 2014 Aviva Solutions 21 november 2014
  • 18. Design Challenges © 2014 Aviva Solutions 21 november 2014
  • 19. NEventStore vs Lokad.CQRS vs NCQRS Apply(EmailChangedEvent) User Aggregate new User() EventStoreDataMapper Caller ChangeEmail() Open Stream(guid) Write Into Stream Per Aggregate NEventStore 3 Commits User State GetAggregateRoot(key) Domain Unit Of Work Load(key) Load(events) OnEventApplied() SubmitChanges © 2014 Aviva Solutions 21 november 2014
  • 20. Immediate vs Eventual Consistency Submit Changes EventStoreDataMapper NEventStore 3 Queries Projector NHibernate Dispatched Event Projections Commits Transactional Boundary Transactional Boundary © 2014 Aviva Solutions 21 november 2014
  • 21. Event Versioning Event V1 Event V2 Some Event Combined Event Other Event Combined Event Separate Event Separate Event © 2014 Aviva Solutions 21 november 2014
  • 22. Other Challenges • No direct AR dependencies • Granularity of events • Domain Events as facts, not triggers © 2014 Aviva Solutions 21 november 2014
  • 23. Scalability Issues © 2014 Aviva Solutions 21 november 2014
  • 24. Scalability Limitations • Commits table grows and gets slower • No partitioning of global data • Single point of failure • Upgrades take too much time © 2014 Aviva Solutions 21 november 2014
  • 25. Out-of-place migration Version 1.0 Version 3.0 Changes 6299 6298 6297 3 2 1 Blobs Query Data Users Groups Documents Objects Folders Changes 6301 6300 6299 3 2 1 Blobs Query Data Users Groups Documents Objects Folders Schema 1.0 Pass 2= down time Pass 1= no down time Schema 3.0 Setup Upconverts commits, blobs, etc © 2014 Aviva Solutions 21 november 2014
  • 26. Multi-Tenant Scaling systems Specific reporting Integration Node Reporting Server Connects to back-office Node (owns tenants 1 & 2) Node (owns tenants 3 & 4) Node (owns tenants 5 & 6) Node (failover for tenants 5 & 6) representations of the data Node (owns tenants 9 & 10) Node (owns ref. data & node config) Node (uses tenants 1 & 2, owns tenant 11) Decentralized node Node (uses tenants 1 & 11) Node (uses tenants 3 & 5) Node (uses tenants 5 & 10) Owns global data and ownership configuration © 2014 Aviva Solutions 21 november 2014
  • 27. Architectural Issues © 2014 Aviva Solutions 21 november 2014
  • 28. Limiting Constraints • Recovery in web farm • Selective rebuilding of projections • No asynchronous dispatching • Relational database is bottleneck during load balancing • Network overhead web->database © 2014 Aviva Solutions 21 november 2014
  • 29. Load Balancer First Attempt Web Site Web Site Worker Thread RDBMS Projections Worker Thread RDBMS Commits Application Tier Database Tier © 2014 Aviva Solutions 21 november 2014
  • 30. Load Balancer Second Attempt Web Site Web Site Worker Thread RDBMS Projections RDBMS Commits Worker Thread RDBMS Projections Application Tier Database Tier © 2014 Aviva Solutions 21 november 2014
  • 31. Final Attempt Load Balancer Web Site Web Site Application Tier Worker Thread RavenDB Projections RDBMS Commits Worker Thread RavenDB Projections Database Tier © 2014 Aviva Solutions 21 november 2014
  • 32. RavenDB Advantages • No migrations needed • No more column length problems • Faster • Less SQL Server load • More scalable • Dynamic Indexing • Keyboard/faceted search w/ Lucene • Concious decision on asynchronicity Disadvantages • New technology, new concepts • No LINQ • Async indexes • Requires rewrite of all projectors and queries © 2014 Aviva Solutions 21 november 2014
  • 33. Front-End Server Web Site WCF Services ? Worker Thread ? ? RavenDB Projections Commits Application Tier Database Tier Job Scheduler ? © 2014 Aviva Solutions 21 november 2014
  • 34. Front-End Server /queries/{query} Worker Job Scheduler Thread RavenDB Projections Web Site Commits Application Tier Database Tier WCF Services © 2014 Aviva Solutions 21 november 2014
  • 35. OWIN Startup Main Repository Component Repository Web Site Module Module Queries Queries Query Handlers QueryHost RavenDB Query RavenSession Checkpoint Store HTTP-based QueryProcessor Interfaces Query Handlers HTTP (network or memory) Projectors Projectors RavenDB Commit EventStore QueryHost Raven QueryHost Client QueryHost /queries/{query} Querying Controller Thread Pool Owin WebAPI 2 NEventStore Katana Autofac Query Host Settings Durable Commit Dispatcher © 2014 Aviva Solutions 21 november 2014
  • 36. Concurrency Issues © 2014 Aviva Solutions 21 november 2014
  • 37. Event Merging Primary Node Laptop / Secondary Node StreamId: User-Dedo, Rev: 6 RoleRevokedEvent StreamId: User-Dedo PasswordChangedEvent StreamId: User-Dedo, Rev: 5 PasswordChangedEvent StreamId: User-Dedo, Rev: 4 GrantedRoleEvent StreamId: User-Dedo, Rev: 3 PhoneNumberAddedEvent GrantedRoleEvent UserCreatedEvent StreamId: User-Dedo, Rev: 7 PasswordChangedEvent StreamId: User-Dedo, Rev: 6 GrantedRoleEvent StreamId: User-Dedo, Rev: 5 RoleRevokedEvent StreamId: User-Dedo, Rev: 4 PasswordChangedEvent StreamId: User-Dedo, Rev: 3 PhoneNumberAddedEvent GrantedRoleEvent UserCreatedEvent Last Sync Point Time © 2014 Aviva Solutions 21 november 2014
  • 38. Future? © 2014 Aviva Solutions 21 november 2014
  • 39. Opportunities • In-memory projections • Gossip-based detection • ATOM feeds © 2014 Aviva Solutions 21 november 2014
  • 40. Reading Material • NEventStore on GitHub • Domain Events by Udi Dahan • Event Versioning by Rinat Abdullin • Effective Aggregate Design by Vaughn Vernon • NHibernate vs Entity Framework in DDD by me… • DomainDrivenDesign.org • RAFT, a distributed consensus protocol • Cedar by Damian Hickey © 2014 Aviva Solutions 21 november 2014
  • 41. Email dennis.doomen@avivasolutions.nl Twitter @ddoomen Blog www.dennisdoomen.net © 2014 Aviva Solutions 21 november 2014

Hinweis der Redaktion

  1. Disadvantages No concurrency; conflicting service requests are simply rejected Staleness ignored; Scalability limited; No domain verbs; domain model does contain concepts from the domain model, just not the business actions Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten. Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching Conflicting demands; query demands denormalized schema, commands require normalized integer schema
  2. Disadvantages No concurrency; conflicting service requests are simply rejected Staleness ignored; Scalability limited; No domain verbs; domain model does contain concepts from the domain model, just not the business actions Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten. Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching Conflicting demands; query demands denormalized schema, commands require normalized integer schema
  3. Disadvantages No concurrency; conflicting service requests are simply rejected Staleness ignored; Scalability limited; No domain verbs; domain model does contain concepts from the domain model, just not the business actions Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten. Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching Conflicting demands; query demands denormalized schema, commands require normalized integer schema
  4. Disadvantages No concurrency; conflicting service requests are simply rejected Staleness ignored; Scalability limited; No domain verbs; domain model does contain concepts from the domain model, just not the business actions Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten. Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching Conflicting demands; query demands denormalized schema, commands require normalized integer schema
  5. Disadvantages No concurrency; conflicting service requests are simply rejected Staleness ignored; Scalability limited; No domain verbs; domain model does contain concepts from the domain model, just not the business actions Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten. Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching Conflicting demands; query demands denormalized schema, commands require normalized integer schema
  6. Disadvantages No concurrency; conflicting service requests are simply rejected Staleness ignored; Scalability limited; No domain verbs; domain model does contain concepts from the domain model, just not the business actions Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten. Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching Conflicting demands; query demands denormalized schema, commands require normalized integer schema
  7. Disadvantages No concurrency; conflicting service requests are simply rejected Staleness ignored; Scalability limited; No domain verbs; domain model does contain concepts from the domain model, just not the business actions Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten. Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching Conflicting demands; query demands denormalized schema, commands require normalized integer schema