Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Event Sourcing RubySPBConf 2k18
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Anton Davydov
June 10, 2018
Programming
210
1
Share
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
140
МГТУ
davydovanton
0
100
Events. Events. Events! - krk.rb
davydovanton
0
160
Events. Events. Events!
davydovanton
0
840
Architecture of hanami applications
davydovanton
1
7.7k
Hanami Architecture
davydovanton
2
320
viewing ruby blossom kaigi2017
davydovanton
0
750
viewing ruby blossom rdrc2017
davydovanton
2
240
rodauth device and you
davydovanton
2
260
Other Decks in Programming
See All in Programming
サークル参加から学ぶ、小さな事業の回し方
yuzneri
0
210
UaaL×Androidアプリのメモリ計測 — Memory Profilerの先へ
rio432
0
160
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
3.2k
プラグインで拡張される Context をtype-safe にする難しさと設計判断
kazupon
1
200
AIを導入する前にやるべきこと
negima
2
370
「OSSがあるなら自作するな」は AI時代も正しいか ── Build vs Adopt の新しい判断基準
kumorn5s
7
2.8k
Structured Concurrency, Scoped Values and Joiners in the JDK 25 26 27
josepaumard
1
150
書き換えて学ぶTemporal #fukts
pirosikick
2
380
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Practices for Loading WebAssembly (Spring 2026)
petamoriken
5
1.1k
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
930
PHPでローカル環境用のSSL/TLS証明書を発行することはできるのか? #phpconkagawa
akase244
0
370
なぜあなたのコードには「コシ」がないのか?〜AI時代に問う、最後まで美味しい設計と戦略〜 #phpconkagawa / phpconkagawa2026
shogogg
0
210
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
180
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.2k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
54k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
150
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.1k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
560
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.9k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
810
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
360
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 ❤