Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データ資産をシームレスに伝達するためのイベント駆動型アーキテクチャ

KAKEHASHI
February 17, 2025

 データ資産をシームレスに伝達するためのイベント駆動型アーキテクチャ

イベント駆動型アーキテクチャ - イベントを主役にすることで解決できること -
https://findy-tools.connpass.com/event/343692/
での登壇資料です

KAKEHASHI

February 17, 2025
Tweet

More Decks by KAKEHASHI

Other Decks in Technology

Transcript

  1. © KAKEHASHI Inc. 株式会社カケハシ 技術戦略室 2021年、カケハシに入社。サービス・データプラッ トフォームのアーキテクトを担った後に、技術戦略 室にて、開発組織全体の技術領域の戦略を推進。 キャリアを通して、プロダクトの立ち上げの初期か ら関わることが多く、大半はアーキテクトとしての

    役割を担ってきました。Data as a Serviceのよう なプロダクトを多く設計開発したこともあり、 「データ」を軸に設計することが多くあります。 カケハシ社内では、サービス間のデータ連携を含む 多くのアーキテクチャレビューに関わってきまし た。 自己紹介 @kimutyam @kimutyam 木村 彰宏 (あきひろ)
  2. © KAKEHASHI Inc. イベントソーシングのメリット - 監査 - タイムトラベル - イベント駆動型アーキテク

    チャへの拡張可能性 etc.. FYI: Kurrent(旧、EventStore)の 『A Beginner’s Guide to Event Sourcing』でメリットが詳しく説明 されています。 https://www.kurrent.io/event-sou rcing#Benefits-of-Event-Sourcing
  3. © KAKEHASHI Inc. ドメインイベントがないことによる機会損失 たいていのアプリケーションはス テートソーシングで実現は可能で す。 しかし、データ分析・利活用が当た り前になった昨今で、ドメインイベ ントを記録していないことが機会損

    失につながります。 イベントを記録していない場合に、 達成できない業務が存在します。 例えば、「月間の人事異動推移を把 握する」業務は、ドメインイベント データ「社員を部署異動した」がな いと達成できません。
  4. © KAKEHASHI Inc. リファレンスアーキテクチャ(CQRS + Transaction Outbox) ドメインイベントが追記されたこと をCDC(Change Data

    Capture)しま す。 CDCで受け取ったイベントは、シス テム境界内外への伝達でします。 ドメインイベントがインターフェー スとして機能します。 ※ システム境界内外に同じ仕組み で伝達できることを説明の例です。 CQRSパターンを導入する必要はあり ません。
  5. © KAKEHASHI Inc. AWSでのインフラ例(〜イベントストリームへレコードを伝達) - DynamoDB StreamでCDCを受け 取り、Lambdaでプライマリー キー毎に、シーケンス番号を 付与してKinesis

    Data Stream(以降、KDS)のシャード にPutすることで順序保証しま す(※1) - Lambdaでは、DynamoDB Stream の方言(※2)を解析し、イベン トスキーマに変換すること で、コンシューマは公表され た言語としてデータを消費で きます。 - Kinesis Data Stream(KDS)で ファンアウトします。 ※1 https://aws.amazon.com/jp/blogs/news/how-to-perform-ordered-data-replication-between-applications-by-using-amazon-dynamodb-streams/ ※2 https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/APIReference/API_streams_StreamRecord.html
  6. © KAKEHASHI Inc. AWSでのインフラ例(〜システム境界外への伝達) EventBridgeはイベントバスです。 ルールベースのフィルタリングや、 ルーティングも容易に実現可能で、 プロデューサーとコンシューマーを 疎通を疎結合にするマネージドサー ビスです。

    境界づけられたコンテキスト外との 疎通でよく取っているアプローチで す。 ※ 高いスケーラビリティ要求があ る場合は、KDSをシステム境界とす る場合もあります。
  7. © KAKEHASHI Inc. 現実解2: AWSでのインフラ例 (DebeziumでCDC) CDCツールを導入するのが有効で す。 ※ CDCツールはカケハシ社内で検証

    中ですので、一般解として記載して います。 以下の記事は国内事例です。 FYI: Amazon MSKを用いてMySQLに対して Change Data Captureを実現する https://techblog.zozo.com/entry/ change-data-capture-for-mysql-us ing-amazon-msk
  8. © KAKEHASHI Inc. イベントデータ 伝達用途でイベントデータは構造化 される。 イベントデータの構成要素。 - Header: -

    イベントのメタデータ - 伝達に利用するテクノロ ジに依存 - Key: - パーティショニングキー 用途 (オプション) - Value: - イベントを表す値 FYI: 「ドメインイベントを伝達するため のモデリング技法」 https://kakehashi-dev.hatenablog .com/entry/2024/05/15/090000
  9. © KAKEHASHI Inc. デルタイベントとファクトイベント イベントモデルは伝達の文脈だと、2種類に大別されます。 以下は、イベントデータの構成要素のValueの違い。(HeaderとKeyは同様。) { "組織ID": "Organization-ID-123" ,

    "部署": [ { "部署ID": "Department-ID-1234" , "社員IDリスト": [ "Employee-ID-1234" , "Employee-ID-5678" ] }, { "部署ID": "Department-ID-5678" , "社員IDリスト": [ "Employee-ID-2234" , "Employee-ID-6678" ] } ] } { "社員ID": "Employee-ID-1234" , "異動前部署ID": "Department-ID-1234" , "異動後部署ID": "Department-ID-5678" } デルタイベント ファクトイベント
  10. © KAKEHASHI Inc. デルタイベント 特徴: - ドメインイベントのこと - 変更のコンテキストを有する 向いている用途:

    - 特定の条件に反応 - ex. 通知 / 部署異動後に権限の切り替 え - イベントに基づいたカスタムビューの構成 (例: CQRS) - 関心のあるドメインイベントだけをサブスク ライブ 不向きな用途: - 現在の状態を取得したい場合 - 異なるコンテキストでイベント再生を する用途の場合、深いドメイン知識が 必要になるため結合度が高くなる
  11. © KAKEHASHI Inc. 特徴: - イベントのValueに(集約の)状態を持つ。 向いている用途: - Event-Carried State

    Transfer(ECST)パター ンで、状態を転送する。 - コンシューマーは、計算せずともイベ ントストリームのシャードの最新レ コードを取得するだけで、最新の状態 を再現できる。 向いていない用途(※1): - 特定の条件に反応する - 状態遷移した理由を辿る ファクトイベント
  12. © KAKEHASHI Inc. メリット - コンシューマーで状態を保持しなくてもいい - 転送コストを削減できる (ただし、参照コストとの天秤) -

    実現方法がシンプル デメリット - コンシューマーが増えるたびにプロバイダー側がSPoFにな る - 他のサービスを呼び出さなければ、本当の意味で機能しな い (可用性依存) - 索引方法が限定的。コンシューマーのコンテキスト独自の データの処理をしたい場合は不向きです。 
 Appendix: APIで状態を参照する
  13. © KAKEHASHI Inc. 昨今の業務ユースケースは、データ分析結果に依存することが増えています。 例: ECサイトの注文履歴データを、データ基盤でリアルタイム分析し、分析結果とユーザーのセッ ションに基づいて商品のレコメンドする。 イベントストリーミングは、アプリケーションとデータ基盤をシームレスに連携させる役目を果たし ます。 ※

    慣習的に、即応性のあるアプリケーションとデータ基盤をそれぞれOperational(運用)、 Analytical(分析)と表現することが多いです。 運用と分析の垣根をなくす 出典: INFINITE LAMBDA, "Event-Driven Data Mesh: Understanding the Fundamentals", https://infinitelambda.com/event-driven-data-mesh-fundamentals/
  14. © KAKEHASHI Inc. 現実解2: Databricks to EventBridge (Claim Check) Claim

    Checkとは: - ペイロードをデータストアに外部化し、イベントにはペイロードを含めずに、アクセスするため のパスやトークンを含めるデザインパターン 用途: - 分析結果のデータサイズが大きい場合 - ストリーミング処理をする必要がない場合 デメリット: - イベントバスとストレージの両方の通信の口を用意する必要がある
  15. © KAKEHASHI Inc. - ドメインイベントは記録する価値がある - CDCを使ってイベントストリームに展開できる - イベントストリーム・イベントバスを通じてサービス間連携を行う -

    ドメインイベント(デルタイベント)は、通知やカスタムビューの構成に向いている - ファクトイベントは、状態の転送に向いている - イベントストリームを通じてアプリケーションとデータ基盤はシームレスに連携できる まとめ