Slide 1

Slide 1 text

5分で分かる DCB (Dynamic Consistency Boundary) イベントソーシング・CQRS 勉強会 #4 2025年 9月 15日 株式会社ジェイテックジャパン 川江貴志

Slide 2

Slide 2 text

DCB (Dynamic Consistency Boundary) の概要 Sara Pellegrini 氏が提唱した概念 https://sara.event-thinking.io/2023/05/dynamic-consistency-boundary.html https://dcb.events/ の説明によると、 ‟ 動的一貫性境界 (DCB) は、厳格なトランザクション境界に依存せずに イベント駆動型システム (event-driven systems) の一貫性を強制する手法” 注目ポイント i. イベントを1つ以上のタグに紐づけることで、 技術上の制限のない純粋なビジネス事実として扱う ii. 条件に合致するイベントだけを取得・再生することで、 柔軟で負荷の低いデータ読み出しを行う

Slide 3

Slide 3 text

集約アプローチ 1つのビジネス上の事実が2つの集約 に影響を与える場合、2つのイベント が保存される 学生にコースを登録し、 コースにも学生を登録 複数の集約間の整合性を保つことが 必要で、処理の複雑さが増大する コースが満員なので、 コースに学生を登録できない → 補償イベントの追加が必要

Slide 4

Slide 4 text

DCB アプローチ イベントを1つの集約に帰属させる代 わりに、1つ以上のタグと紐づける イベントが複数のエンティティつま り概念に影響を与えられる 1つのビジネスイベントを、技術 上の制約のために2つ以上に分け る必要がない 境界付けられたコンテキストごとに1 つのイベントストリームのみが存在 する

Slide 5

Slide 5 text

events + lastEventId state newEvents なし→ 保存 あり→ リトライ Event Store イベントID: ...590, 591, 592 Query 必要最⼩限のイベントを取得 lastEventId = 592 を記憶 Projection イベントから状態を再構築 Validation ビジネスルール検証 OK → 新イベント作成 Conditional Append 整合性チェック 592 の後に新イベントはない? Event Store 新イベント保存 → 593 DCB の処理フロー イベントタイプやタグによって絞り込んだ必要最小 限のイベントだけを読み込む (動的なクエリ) 例: コース名が変更されたイベントは、 コースが満員かどうかの判断には不要 プロジェクションで状態を再構築する (Decision Model) Decision Model でビジネスルールによる検証を行う 取得している最後のイベントの後に新たにイベント が追加されていないか確認し、なければイベントを 書き込む (整合性の確保)

Slide 6

Slide 6 text

DCB の特徴 複数エンティティの一貫性を単一イベントで保証可能 整合性を保つための Saga 等が不要になる イベントストリームの再構築なしに一貫性境界を変更可能 実行時に必要最小限のイベントのみ読み込み 固定的な集約境界に縛られず高いパフォーマンスを実現

Slide 7

Slide 7 text

Sekiban は DCB 対応を進めています https://dcb.events/resources/libraries/ にあるリンクから ぜひ DCB 版 Sekiban のリソースにアクセスしてください!