メインコンテンツまでスキップ

イベント駆動アーキテクチャ

システムの状態変化を「イベント」として捉え、それを中心にアーキテクチャを構築するパターンを学びます。


なぜ学ぶのか

┌─────────────────────────────────────────────────────────────┐
│ よくある成長の壁 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 最初: │
│ ┌─────────┐ │
│ │ App │ → PostgreSQL(読み書き全部ここ) │
│ └─────────┘ │
│ → シンプル、十分速い │
│ │
│ 成長すると: │
│ ┌─────────┐ │
│ │ App │ → PostgreSQL │
│ └─────────┘ ├── 認証処理(OLTP) │
│ ├── 統計集計(OLAP)← 遅い!ロック競合! │
│ ├── 監査ログ検索 ← 遅い! │
│ └── 通知送信 ← トランザクション内でI/O! │
│ │
│ → 1つのDBに責務が集中して限界に │
│ │
│ イベント駆動で解決: │
│ ┌─────────┐ イベント │
│ │ App │ → 「ログインした」→ PostgreSQL(認証データ) │
│ └─────────┘ │ │
│ ├──→ ClickHouse(統計・分析) │
│ ├──→ Elasticsearch(監査ログ検索) │
│ └──→ メール/Slack(通知) │
│ │
│ → 各システムが得意なことに専念 │
│ │
└─────────────────────────────────────────────────────────────┘

このセクションで学ぶ3つの概念

┌─────────────────────────────────────────────────────────────┐
│ │
│ ドメインイベント │
│ 「何が起きたか」を表す │
│ ├── LoginSucceeded, TokenIssued, PasswordChanged │
│ └── ビジネス上の出来事をオブジェクトとして表現 │
│ │ │
│ │ これを記録し続けると... │
│ ▼ │
│ イベントソーシング │
│ 「起きたことの履歴」がデータの本体 │
│ ├── 現在の状態はイベントの再生で導出する │
│ └── 監査証跡が自然に残る、時間を遡れる │
│ │ │
│ │ 書き込みと読み取りで最適な形が違うなら... │
│ ▼ │
│ CQRS │
│ 「書く側」と「読む側」を分離する │
│ ├── Command: イベントを書く(PostgreSQL) │
│ └── Query: 集計を読む(ClickHouse 等) │
│ │
└─────────────────────────────────────────────────────────────┘

これらは DDD(ドメイン駆動設計)の文脈で語られることが多いですが、本質はアーキテクチャパターンです。DDD を採用していなくても、大量データの処理やシステム間連携で広く適用されています。


学習の流れ

┌─────────────────────────────────────────────────────────────┐
│ 学習ロードマップ │
├─────────────────────────────────────────────────────────────┤
│ │
│ 概念 │
│ ├── ドメインイベント │
│ │ └── 何が起きたかを表すオブジェクト │
│ ├── イベントソーシング │
│ │ └── イベントの履歴がデータの本体 │
│ └── CQRS │
│ └── 書き込みと読み取りの分離 │
│ │
│ 実現パターン │
│ ├── イベント伝搬の方法 │
│ │ └── CDC, メッセージキュー, アプリ内Pub/Sub │
│ ├── イベントストアの選択 │
│ │ └── RDB, Kafka, EventStoreDB │
│ └── 読み取りモデルの構築 │
│ └── ClickHouse, Elasticsearch, マテビュー │
│ │
└─────────────────────────────────────────────────────────────┘

ドキュメント一覧

概念

#ドキュメント説明
01ドメインイベント「何が起きたか」をオブジェクトとして表現する
02イベントソーシングイベントの履歴をデータの本体とするパターン
03CQRS書き込みと読み取りを分離するアーキテクチャ

実現パターン

#ドキュメント説明
04実現パターンCDC, メッセージキュー, イベントストアの選択
05スケーリングパターン高速・大量トランザクション時のボトルネックと対策
06AWS での構築Small / Medium / Large の3段階構成

関連ドキュメント

OLAP(読み取り側の最適化)

idp-server の実装

パフォーマンス