Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Event Sourcing RubySPBConf 2k18
Search
Anton Davydov
June 10, 2018
Programming
230
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Event Sourcing RubySPBConf 2k18
Anton Davydov
June 10, 2018
More Decks by Anton Davydov
See All by Anton Davydov
How to make a technical decision
davydovanton
0
160
МГТУ
davydovanton
0
120
Events. Events. Events! - krk.rb
davydovanton
0
170
Events. Events. Events!
davydovanton
0
870
Architecture of hanami applications
davydovanton
1
7.8k
Hanami Architecture
davydovanton
2
350
viewing ruby blossom kaigi2017
davydovanton
0
780
viewing ruby blossom rdrc2017
davydovanton
2
250
rodauth device and you
davydovanton
2
270
Other Decks in Programming
See All in Programming
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
1
330
sbt 2.0: takeoff
eed3si9n
0
160
JIS keyboard support in Omarchy
lef237
0
140
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.7k
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
Agents on Rails - Rails at Scale 2026
irinanazarova
0
570
Kotlinの15年とServer-Side Kotlin
n_takehata
1
160
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
330
Seven New Principles of Software Engineering
yegor256
0
110
phperだってパンチカードでコーディングしたい
o0h
PRO
0
360
ジョジョの世界をXRで再現する
mofurune
0
180
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
130
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
820
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
460
Un-Boring Meetings
codingconduct
0
460
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
640
Marketing to machines
jonoalderson
1
5.9k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
890
Building the Perfect Custom Keyboard
takai
2
910
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
540
Crafting Experiences
bethany
1
390
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Transcript
->
[email protected]
title: SPBRuby2k18
None
None
None
None
@palkan_tula
me
What I learned in Japan?
Ruby is still dying language
None
Java is popular
None
Pascal is popular too
None
Best shell ever
None
❤ Руддщ ЫЗИ! ❤
❤ Hello SPB! ❤
None
None
None
Anton Davydov github.com/davydovanton twitter.com/anton_davydov davydovanton.com
• Software developer at Hippo • Hanami core developer •
OpenSource evangelist
None
Stickers
None
Part 1: Real World
DEMO
Part 2: Software
None
None
None
None
None
Pros • easy for understand • easy for implement
Cons • we have only current state of the system
• impossible to understand what happened before
Sometimes we need more work for one event
Imagine what will happen if we will work only with
events?
None
None
None
None
None
Congrats, you know event sourcing!
Part 3: Event Sourcing
– Event Sourcing pattern https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing “Instead of storing just the
current state of the data in a domain, use an append-only store to record the full series of actions taken on that data”
How to get business events?
Event Storming
DDD
Part 4: Event Store
None
None
Can be anything
None
Rules
Immutable events
Immutable everything
How to store events?
None
None
None
None
None
How get current state?
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
How we can improve it?
None
None
None
None
None
None
None
Part 5: Conclusions
Event Sourcing pros
Easier to communicate with domain experts
• time traveling • restore a system • logging out
from box
• You don’t work with tables you work with events
• Experemental data structures • Easy to change database implementations
• Easy to add instances for service • Can be
written on any language and you can call it from any app • Persistance
event sourcing cons
• Hard for understand and complicated abstraction • Not popular
in ruby and bad tooling here • Developers need deprogramming
• Hard to get state • Hard to understand the
whole chain of events • Another architecture type with different DB structure
• Async world • Versions and versions compatibility • Updating
or deleting events • Eventual Consistency
Part 6: Usage
Simple way
gems
None
github.com/zilverline/sequent
Brave way
Build all stuff by self
None
None
None
hanami-events
Just pub sub transport layer with event versions and types
microservices
microservices
None
How to share state across DBs?
Idea #1: send data to specific service
None
Problems
One service know about data from other
1 -> N
None
None
Idea #2: events
None
None
None
Important
Make events full as you can
None
None
None
Part 7: Next Steps
CQRS (Command Query Responsibility Segregation)
– Martin Fowler “You can use a different model to
update information than the model you use to read information”
None
None
None
None
None
None
DDD
None
None
None
Books
None
->
[email protected]
title: SPBRuby2k18
github.com/davydovanton twitter.com/anton_davydov davydovanton.com Thank you ❤