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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Anton Davydov
June 10, 2018
Programming
1
210
Event Sourcing RubySPBConf 2k18
Anton Davydov
June 10, 2018
Tweet
Share
More Decks by Anton Davydov
See All by Anton Davydov
How to make a technical decision
davydovanton
0
120
МГТУ
davydovanton
0
78
Events. Events. Events! - krk.rb
davydovanton
0
150
Events. Events. Events!
davydovanton
0
820
Architecture of hanami applications
davydovanton
1
7.7k
Hanami Architecture
davydovanton
2
310
viewing ruby blossom kaigi2017
davydovanton
0
740
viewing ruby blossom rdrc2017
davydovanton
2
230
rodauth device and you
davydovanton
2
250
Other Decks in Programming
See All in Programming
AI時代のソフトウェア開発でも「人が仕様を書く」から始めよう-医療IT現場での実践とこれから
koukimiura
0
130
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.4k
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
440
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
0
190
AI主導でFastAPIのWebサービスを作るときに 人間が構造化すべき境界線
okajun35
0
510
Python’s True Superpower
hynek
0
200
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
450
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
150
TROCCOで実現するkintone+BigQueryによるオペレーション改善
ssxota
0
120
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
150
TipKitTips
ktcryomm
0
150
手戻りゼロ? Spec Driven Developmentとは@KAG AI week
tmhirai
1
160
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
11k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
68
Technical Leadership for Architectural Decision Making
baasie
3
270
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
67
37k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
470
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
140
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The SEO identity crisis: Don't let AI make you average
varn
0
400
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
140
Faster Mobile Websites
deanohume
310
31k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Documentation Writing (for coders)
carmenintech
77
5.3k
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 ❤