前置き
モノリシックDWHにイベントソーシングはオーバーエンジニアリングです。
従来のモノリシックDWH
従来のDWHは「状態(State)」をバッチで集約・保存する思想であり、イベントソーシングは「事実(Event)」の不変な連鎖として状態を定義する思想であり、これらは哲学的に対極にあります。
データメッシュとの親和性
しかし、データメッシュ(DM)は、イベントソーシングの思想と完璧にフィットします。
前回の記事でも触れたように、
DMが「何をすべきか(ドメイン中心、プロダクトとしてのデータ)」 を定義するのに対し、イベントソーシングは、その「何を」を実現するための最も強力な実装パターン(How) の一つ
だからです。
イベントソーシングの導入は、技術的な流行ではなく、明確なビジネス上の動機 によって行われるべきです。
🍣 アナロジー:巨大冷凍庫 vs 専門屋台のフードコート
この移行プロセスを、レストランの食材管理で例えます。
モノリシックDWH
すべての食材(データ)をごちゃ混ぜに保管する、巨大な中央冷凍庫です。
分析(料理)のたびに、分析官(シェフ)が凍った食材を掘り出し、解読・解凍(ETL)するのに膨大な時間がかかります。
食材がいつ入ってきたのか、なぜここにあるのか(来歴)は不明瞭です。
データメッシュ (DM)
「寿司屋」「ピザ屋」「タコス屋」といった**専門屋台(データプロダクト)**が集まるフードコートです。
各屋台は、自分の専門食材(ドメインデータ)の品質と提供に責任を持ちます。
イベントソーシングの導入
ここで、「寿司屋」がイベントソーシングを導入することを決意します。
なぜ?
寿司は「鮮度」と「信頼」が命だからです。
どうする?
「冷凍マグロが10kg入庫した」という状態を記録するのではなく、
「AM10:00:豊洲からマグロAが到着」
「AM10:05:注文#1に大トロを提供」
「AM10:10:注文#2に中トロを提供」
という不変の「出来事(イベント)」
を台帳に記録し続けます。
結果
・監査性
この台帳を見れば、マグロの**完璧な履歴(トレーサビリティ)**がわかります。
・データプロダクト
この台帳(イベントストリーム)そのものが、「リアルタイムマグロ消費フィード」という最高のデータプロダクトとして、他の屋台(例:仕入れ部門、会計部門)に提供されます。
1. 動機:なぜイベントソーシングが必要になるのか
ESの導入は、従来のDWH(状態のバッチ)では絶対に満たせない、以下のようなビジネス上の動機が明確になった時に検討されます。
「いつ、なぜ?」が「何を?」より重要になった時 (監査性とトレーサビリティ)
動機
モノリシックDWHは「現在の顧客の住所」しか教えてくれません。
しかし、金融の不正検知や物流の追跡ドメインでは、
「顧客の住所がいつ、誰によって、どの古い住所から変更されたか」という
履歴(来歴) そのものが分析対象
となります。
イベントソーシングの価値
イベントソーシングは、その設計自体が完璧な監査ログです。
「昨日のデータ」ではビジネスにならない時 (リアルタイム性)
動機
「昨日の売上集計」は経営分析には役立ちますが、
「リアルタイムの不正決済検知」や「パーソナライズされた即時クーポン発行」といった
「今、この瞬間のイベント」 に対応する必要があるデータプロダクトでは、バッチ処理は無意味です。
イベントソーシングの価値
イベントソーシングはイベントのストリームを生成するため、リアルタイム分析と極めて相性が良いです。
「データが信頼できない」問題が頻発する時 (信頼性)
動機
DWHのデータは、多くのETLバッチを経て加工されるため、
「この数字は本当に正しいのか?」という信頼性の問題
が常につきまといます。
イベントソーシングの価値
イベントソーシングは、加工されていない 「生の事実(イベント)」 の記録です。
これは、システム内で最も信頼できる唯一の真実の源泉(Source of Truth)となります。
2. タイミング:いつイベントソーシングを導入するのか
YAGNIの原則に従い、最初から導入すべきではありません。
DMの第一歩
まずは、既存のモノリシックDWHや業務DBの 「状態」 を、そのままデータプロダクトとして公開する(例:DBのリードレプリカを分析用に提供する)ことから始めます。
トリガー(動機の発生)
上記の「動機」で挙げたような、特定のビジネス課題(「リアルタイムで不正検知がしたい」)が、次の開発イテレーションの最優先課題になった時が、そのドメインにおける導入のタイミングです。
最適なタイミング
グリーンフィールド(新規開発)
最も簡単なのは、データメッシュ内で新しい業務(OLTP)サービスを構築する際です。
例えば、新しい「配送」サービスを、最初からイベントソーシングパターンで設計します。
ストラングラー(段階的移行)
既存のモノリスから「注文」ドメインを切り出す際、その新しい「注文マイクロサービス」をイベントソーシングで再設計します。
3. どのように:どう導入・連携するのか
イベントソーシングは、分析基盤(DWH)ではなく、業務(OLTP)システムのアーキテクチャパターンとして導入されます。
①. ドメインを特定する
リアルタイム性や監査性が求められる単一のドメイン(例:注文ドメイン)を選定します。
②. 業務サービス(OLTP)にイベントソーシングを実装
注文ドメインの業務マイクロサービスは、OrderPlaced, OrderShipped といったドメインイベントを生成し、自身のイベントストア(例: Kafka, DynamoDB)に保存します。
これが唯一の真実の源泉となります。
③. イベントストリームを「データプロダクト」として公開
この業務サービスが生成したドメインイベントのストリーム(または、個人情報などをマスキングした公開用のストリーム)こそが、このドメインがデータメッシュに提供する、
最も高忠実度な「データプロダクト」 となります。
④. 他ドメインが「購読」する
・分析ドメインは、このイベントストリームを購読し、DWH(例: Snowflake, BigQuery)にデータをロードして、分析用のリードモデルを構築します。
・不正検知ドメインは、このストリームをリアルタイムで購読し、即時アラートを発します。
結論
このように、ESは「分析基盤の作り方」ではなく、「分析基盤に、最も信頼できるリアルタイムの生データ(イベント)を提供する、業務サービスの作り方」として、データメッシュアーキテクチャの根幹を支えるのです。