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
Debeziumを活用した RDBMSイベントソーシングの仕組み
Search
netprotections
April 07, 2023
Technology
0
1.1k
Debeziumを活用した RDBMSイベントソーシングの仕組み
突撃!隣のデータ設計・活用勉強会 vol.1の登壇資料です。
https://stafes.connpass.com/event/273805/
netprotections
April 07, 2023
Tweet
Share
More Decks by netprotections
See All by netprotections
2025/2/6開催メディア向け説明会_株式会社ネットプロテクションズ_企業間決済ビジネスの事業戦略
netprotections
0
630
2025/2/6開催メディア向け説明会_株式会社 NCB Lab._企業間決済の最新トレンド 米国主要プレイヤーの戦略
netprotections
0
600
新旧ツールを駆使した レガシーアプリの解読 #cm_odyssey
netprotections
0
80
Amazon Aurora Cluster Cloneを用いたDataLake構築
netprotections
2
680
株式会社ネットプロテクションズ 会社紹介資料
netprotections
1
220k
決済システムは一人ではつくれなかった話
netprotections
1
1.9k
株式会社ネットプロテクションズ エンジニア職向け会社紹介資料
netprotections
0
26k
Other Decks in Technology
See All in Technology
american aa airlines®️ USA Contact Numbers: Complete 2025 Support Guide
aaguide
0
500
オーティファイ会社紹介資料 / Autify Company Deck
autifyhq
10
130k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
990
AI エージェントと考え直すデータ基盤
na0
18
7.3k
CDK Vibe Coding Fes
tomoki10
1
540
大量配信システムにおけるSLOの実践:「見えない」信頼性をSLOで可視化
plaidtech
PRO
0
290
TLSから見るSREの未来
atpons
2
250
60以上のプロダクトを持つ組織における開発者体験向上への取り組み - チームAPIとBackstageで構築する組織の可視化基盤 - / sre next 2025 Efforts to Improve Developer Experience in an Organization with Over 60 Products
vtryo
3
980
ABEMAの本番環境負荷試験への挑戦
mk2taiga
5
840
ソフトウェアテストのAI活用_ver1.25
fumisuke
1
570
話題の MCP と巡る OCI RAG ソリューションの旅 - Select AI with RAG と Generative AI Agents ディープダイブ
oracle4engineer
PRO
5
110
SRE不在の開発チームが障害対応と 向き合った100日間 / 100 days dealing with issues without SREs
shin1988
2
1.5k
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
740
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Designing for humans not robots
tammielis
253
25k
How STYLIGHT went responsive
nonsquared
100
5.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
Producing Creativity
orderedlist
PRO
346
40k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Transcript
Copyright(C) Net Protections,Inc. All Rights Reserved. Debeziumを活用した RDBMSイベントソーシングの仕組み - 結果生合成を担保するマイクロサービスの設計パターンのお話
-
Copyright(C) Net Protections,Inc. All Rights Reserved. 自己紹介 2 春田 岬
Haruta Misaki 2016年4月にネットプロテクションズに新卒入社。 入社後はシステム開発を担うビジネスアーキテクトグループにて決済事業の新 規機能開発PJTに関わる。 新卒3年目の時に関西オフィスを設立。 関西オフィスにて海外向け決済事業AFTEEの開発チームを立ち上げアプリケー ション構築〜インフラ基盤構築の推進を行い8月にローンチ。 2020年に全社的なAWS導入推進に向けた戦略の策定から推進を行い、2021年 にはNP掛け払いのオンプレミスで稼働する決済基盤のAWS移行をリード。 現在は1事業・領域に留まらず、事業横断で幅広く内製推進やプロダクト刷新 に関わっている。 株式会社ネットプロテクションズ ソリューションアーキテクトグループ 関西開発拠点長
Copyright(C) Net Protections,Inc. All Rights Reserved. 目次 3 01 |
はじめに • Net Protectionsの開発組織と事業を支える機能群 • 機能チームで取り組んだドメイン領域 02 | 本編 • アーキテクチャ • Sagaパターン • イベントソーシング・CQRS • Transactional Outboxパターン • Outboxパターンを利用したSagaの実装 • AWSアーキテクチャ構成(一部抜粋) • 障害対応時の対応 03 | おわりに • 本日のまとめ • 宣伝
Copyright(C) Net Protections,Inc. All Rights Reserved. ビジネスモデル 4 後払いによる未回収リスクを保証し、一連の決済業務をすべてアウトソースできるサービスです。 ※当社所定の審査を通過した取引が対象となります。審査通過後においても、当該取引に関して加盟店と購入者または購入企業の間に紛争が生じ、速やかに解決ができず、又はそのおそれがあると当社が判断し
たときその他当社が提供するサービスの加盟店規約所定の事由がある取引は、対象外となります。 ※
Copyright(C) Net Protections,Inc. All Rights Reserved. Net Protectionsの開発組織と事業を支える機能群 5 本日お話しする問題解決領域は決済ドメインの一部である取引先ドメイン領域のお話です
本日はココの話
Copyright(C) Net Protections,Inc. All Rights Reserved. アーキテクチャの種類 アーキテクチャ 6 モノリス
モジュラモノリス マイクロサービス サービス モジュール サービス モジュール モジュール モジュール サービス モジュール サービス モジュール
Copyright(C) Net Protections,Inc. All Rights Reserved. アーキテクチャ 7 今回はチーム開発で扱いやすいモジュラモノリスを採用しました モノリス
モジュラモノリス マイクロサービス サービス モジュール サービス モジュール モジュール モジュール サービス モジュール サービス モジュール
Copyright(C) Net Protections,Inc. All Rights Reserved. 契約サービス 審査サービス 申請サービス アーキテクチャ
8 データベースは共通のものを利用し、スキーマはドメインごとに分割 Apache Kafka モジュールA モジュールA モジュールB モジュールB モジュールA モジュールB RDBMS 申請スキーマ 審査スキーマ 契約スキーマ
Copyright(C) Net Protections,Inc. All Rights Reserved. Sagaパターン Sagaパターン 9 サービスA
サービスB サービスC DB ローカル トランザクション DB ローカル トランザクション DB ローカル トランザクション 結果生合成を担保するために分散トランザクションを避けたSagaパターンを採用 • 長時間のテーブルロックを防ぎ、トランザクションを最小単位に分離 • 各種サービスのトランザクションが完了すれば次のサービスに数珠繋ぎで連携
Copyright(C) Net Protections,Inc. All Rights Reserved. オーケストレーション(指揮型) コレオグラフィ(自律型) Sagaパターン 10
キュー サービスA topic A topic B topic C サービスB サービスC キュー topic A topic B topic C オ | ケ ス ト レ | タ サービスA サービスB サービスC topic T Sagaには指揮型と自律型の2種類が存在
Copyright(C) Net Protections,Inc. All Rights Reserved. Sagaパターン 11 オーケストレーション(指揮型) コレオグラフィ(自律型)
キュー サービスA topic A topic B topic C サービスB サービスC キュー topic A topic B topic C オ | ケ ス ト レ | タ サービスA サービスB サービスC topic T オーケストレーション型のSagaパターンを採用
Copyright(C) Net Protections,Inc. All Rights Reserved. イベント駆動システムにはイベントソーシングの設計パターンを導入 イベントソーシング/CQRS 12 •
唯一信頼できるデータはドメインイベントという考え方 • ドメインイベントは永続的なデータストアで管理 業務 DB イベント ストア ドメインイベントを記録 業務データ 更新プロセス イベントの受信 《イベントA》 id=1 企業名=(株)勉強会 《イベントB》 id=1 企業名=(株)勉強会 ドメインイベント 永続化プロセス 業務データに反映 業務データの読み込み
Copyright(C) Net Protections,Inc. All Rights Reserved. イベントソーシング/CQRS 13 ドメインイベントとしての業務データの書き込み先と業務データの参照先が別れる構成に(=CQRS) 読み込み:ドメインイベントの計算処理に必要なデータを業務DBから参照
書き込み:計算結果のデータをイベントストアに書き込み/非同期で業務DBに反映 業務 DB イベント ストア ドメインイベントを記録 業務データ 更新プロセス イベントの受信 《イベントA》 id=1 企業名=(株)勉強会 《イベントB》 id=1 企業名=(株)勉強会 ドメインイベント 永続化プロセス 業務データに反映 業務データの読み込み
Copyright(C) Net Protections,Inc. All Rights Reserved. 分散トランザクション Transactional Outbox Transactional
Outboxパターンについて 14 イベント ストア 業務DB モジュール RDBMS モジュール イベントデータ 業務データ 2フェーズコミット 単一コミット 業務テーブル Outboxテーブル データベースに追加したOutboxテーブルにイベントの内容を書き込むパターン • イベントの書き込みはDBのローカルトランザクションを利用 • 他の業務テーブルと単一コミットでイベント書き込みが可能に(脱2フェーズ)
Copyright(C) Net Protections,Inc. All Rights Reserved. RDBMSのDebeziumを利用したCDCの仕組み Debeziumを利用することでDBコミットをトリガーにKafkaにイベント連携が可能に(=CDC) • DebeziumをKafkaConnectとして稼働させる
• PostgresのChange Log(WAL)をDebeziumで監視 • 監視したWALファイルのデータをKafkaに連携 Transactional Outboxパターンについて 15 Kafka RDBMS Producer コミット Kafka Connect(Debezium) WAL
Copyright(C) Net Protections,Inc. All Rights Reserved. 具体処理層 オーケストレータ層 Outboxパターンを利用したSagaの実装 16
振り分け Consumer debezium タイムライントピック 具象トピック① 具象トピック② 具象トピック③ イベント依頼履歴テーブル Consumer① Consumer② Consumer③ イベント消費履歴テーブル 冪等チェック 次ドメインイベント依頼 Outboxパターンを利用することで下記のようなSagaを組むことが可能に
Copyright(C) Net Protections,Inc. All Rights Reserved. イベントソーシング:イベント永続化&伝播 業務スキーマ Transactional Outboxパターンについて
17 RDBMS 申請スキーマ 審査スキーマ 契約スキーマ タイムラインスキーマ イベント消費履歴テーブル イベント依頼履歴テーブル Debezium Kafka Outboxテーブルとして利用 WAL Consumerの冪等チェックで利用 タイムラインスキーマにイベント依頼・消費履歴テーブルを作成しイベント情報を統合管理 • イベント依頼履歴テーブルをOutboxテーブルとして利用 • イベント消費履歴テーブルは冪等チェックで利用
Copyright(C) Net Protections,Inc. All Rights Reserved. Transactional Outboxパターンについて 18 挿入されたレコードがCDCでDebeziumによりkafkaに連携される
冪等チェック用テーブルとしても利用 correration_id message_id topic message_key message_headers message_body consumer_group offset error_flag error_message ${ulid} ${ulid} イベント依頼履歴テーブル(Outboxテーブル) イベント消費履歴テーブル 誰が(Who)いつ(When)何を(What)どこに(Where)依頼し 誰が(Who)いつ(When)どこから(Where)何を(What)消費したのかが終える設計に correration_id message_id topic message_key message_headers message_body producer ${ulid} ${ulid}
Copyright(C) Net Protections,Inc. All Rights Reserved. AWSアーキテクチャについて(一部抜粋) 19 申請Consumer 審査Consumer
契約Consumer • Apache KafkaはマネージドサービスのMSKを利用 • ECS Fargate上でKafka Consumerを稼働させる AWSのマネージドサービスを利用することでシンプルなアーキテクチャ構成に RDS MSK Connect MSK 振り分けConsumer
Copyright(C) Net Protections,Inc. All Rights Reserved. 障害発生時の対応について 20 具体処理層 オーケストレータ層
振り分け Consumer debezium タイムライントピック 具象トピック① 具象トピック② 具象トピック③ イベント依頼履歴テーブル Consumer① Consumer② Consumer③ イベント消費履歴テーブル 正常処理は冪等チェックで スキップされる 障害を起こしたConsumerGroupの失敗したメッセージまでOffSetを戻し処理を再実行 リカバリ手順 ①障害原因を特定&対応 ②Consumerを停止 ③ConsumerのOffSetを戻す ④Consumerを再開
Copyright(C) Net Protections,Inc. All Rights Reserved. 本日のまとめ 21 Sagaオーケストレーションパターン •
結果生合成を担保するために分散トランザクションを避けた設計パターンを採用 • オーケストレータ層を作ることで、OutBoxテーブルの増加を抑えられた イベントソーシング/CQRSパターン • イベントの書き込みは永続データストアに格納することでイベントが揮発せず安定した非同期処理を実現 • 参照処理と書き込み処理の責務を完全に分離することで柔軟なパフォーマンス性の高いシステムに Transactional Outboxパターン • イベントの書き込みはDBのローカルトランザクションを利用 • 他の業務テーブルと単一コミットでイベント書き込みが可能になり脱2フェーズを実現
22 宣伝 ネットプロテクションズでは、 現在PdM / エンジニアポジションの方を 積極的に募集中です 本日の発表で興味を持っていただいた方は 下記QRよりカジュアル面談のお申し込みが可能です ぜひ一度お話ししましょう
None