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
ステートソーシング型イベント駆動の視点で捉えるCQRS+ES
Search
shinnosuke0522
March 14, 2025
Programming
790
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ステートソーシング型イベント駆動の視点で捉えるCQRS+ES
shinnosuke0522
March 14, 2025
More Decks by shinnosuke0522
See All by shinnosuke0522
テストコードのために読みたい本3選
shinnosuke0522
1
56
非同期連携のための メッセージングサービスを考える
shinnosuke0522
2
200
Other Decks in Programming
See All in Programming
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
220
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
1
180
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
200
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
110
Android CLI
fornewid
0
210
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
250
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
820
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
550
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
130
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
460
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
240
Thoughts on Productivity
jonyablonski
76
5.3k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
560
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Agile that works and the tools we love
rasmusluckow
331
22k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Ethics towards AI in product and experience design
skipperchong
2
340
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
Transcript
ステートソーシング型 イベント駆動 の視点で捉える CQRS + ES
Introduction 名前 廣田新之典 (@shin_developer) ECサイト開発のバックエンド開発 業務 経験 Java / Spring
Boot: 5年 Kotlin / Spring Boot : 3ヶ月
Archtecture 現在開発を行っているシステムの概要図。 それぞれ基幹マイクロサービスのProduceする Eventを外部連携用のマイクロービスが Consumeし、外部サービスへの連携をしたりし ている。 また逆に外部から受けたリクエスを基幹サービス へ連携する場合もある。 基本的にはステートソーシングでデータは永続化 されている
本日はそのようなシステムの開発に携わっている 視点からCQRS+ESをみていく
Eventのreplayが大変 1. 2. 過去状態を辿るのが大変 Problems StateSourcingのため最新の状態にデータが書き換わってしまう。 履歴が重要の情報だけデータモデルとして履歴にすることもできるが、 まったく意図しない挙動をしてしまった時はログから調査が必要になるが 運用方針次第ではProd環境で完全に遡ることが困難である場合もある 基本的にはEventは処理されると消えてしまうので、何か不具合が発生し
た場合にイベントを再作成に苦労する。また本番環境ではドメインイベン トをログとして出力しない運用になっている場合、その時何が起きたのか も失われてしまう可能性がある。
Eventのreplayが大変 1. 2. 過去状態を辿るのが大変 Problems StateSourcingのため最新の状態にデータが書き換わってしまう。 履歴が重要の情報だけデータモデルとして履歴にすることもできるが、 まったく意図しない挙動をしてしまった時はログから調査が必要になるが 運用方針次第ではProd環境で完全に遡ることが困難である場合もある 基本的にはEventは処理されると消えてしまうので、何か不具合が発生し
た場合にイベントを再作成に苦労する。また本番環境ではドメインイベン トをログとして出力しない運用になっている場合、その時何が起きたのか も失われてしまう可能性がある。 運用でカバーできなくはないがEventStoreがほしい
EventStoreを導入するなら もはやCQRS +ESにしたほうがいいのでは?
What is Event Store ドメインイベントを時系列順に記 録するデータストアとしての特性 を持つ。一度記録されたデータは 基本的に更新されることがなく、 データの更新の際には新たなイベ ントが記録される。
イベント履歴 ドメインイベントの種別にデータ 構造が異なる可能性が高い。その ようなデータを蓄積する必要があ るため、柔軟なスキーマを併せ持 つNoSQL系DBがイベントストア として採用されるケースが多い。 Kurrent(旧EventStore)のような 専用データストアを用いるケース もある。 柔軟なスキーマ バージョン管理 による拡張 ドメインイベントのを履歴として 管理する必要があり、各イベント 履歴はImmutableである必要が ある。よってバージョンを用いた デシリアライズが一般的である。
CQRS+ES によって どう変わるか 01 イベント履歴の永続化 イベントが履歴として永続化されることで、障害 時の原因調査や、イベントの再構築が容易にな る。また監査ログとしても利用できる。 Read/Writeのデータモデル衝突の回避 ソフトウェアは性質上記録したい情報と、見せたい情
報で形式が異なりこれを一つのデータモデルで再現し ようとしてバッティングが生じてきた。書き込み側は ビジネスロジックや整合性を重視するのに対し、読み 取り側は迅速なデータ取得や集計を優先したデータ構 造を使用したい。これらを分離することで、システム の保守性の向上が期待できる。 スケーラブルなWriterアプリケーションの構築 柔軟なスキーマ設計を行える点からWrite側のアプリケーシ ョンのデータストアとしてMongoDBのようなNoSQLを用 いるケースが多い。そのためRDBのように複数のインスタ ンスに対して書き込み処理を行えるため、書き込みがスケー ルしない問題を解消することが期待できる。 02 03
とはいえ移行は相当大変なので そこまでしたいほどのモチベはない (その権限もない) 個人的にはトレンドを 趣味で追う程度で現状満足....
Thank you