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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
netprotections
April 07, 2023
Technology
0
1.2k
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
1k
2025/2/6開催メディア向け説明会_株式会社 NCB Lab._企業間決済の最新トレンド 米国主要プレイヤーの戦略
netprotections
0
960
新旧ツールを駆使した レガシーアプリの解読 #cm_odyssey
netprotections
0
120
Amazon Aurora Cluster Cloneを用いたDataLake構築
netprotections
2
810
株式会社ネットプロテクションズ 会社紹介資料
netprotections
1
250k
決済システムは一人ではつくれなかった話
netprotections
1
2.2k
株式会社ネットプロテクションズ エンジニア職向け会社紹介資料
netprotections
0
37k
Other Decks in Technology
See All in Technology
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
qa
0
290
SaaSに宿る21g
kanyamaguc
2
160
_Architecture_Modernization_から学ぶ現状理解から設計への道のり.pdf
satohjohn
2
770
Embeddings : Symfony AI en pratique
lyrixx
0
270
AWS Systems Managerのハイブリッドアクティベーションを使用したガバメントクラウド環境の統合管理
toru_kubota
0
160
CloudFrontのHost Header転送設定でパケットの中身はどう変わるのか?
nagisa53
1
180
スケールアップ企業でQA組織が機能し続けるための組織設計と仕組み〜ボトムアップとトップダウンを両輪としたアプローチ〜
qa
0
280
Phase08_クイックウィン実装
overflowinc
0
1.7k
SSoT(Single Source of Truth)で「壊して再生」する設計
kawauso
2
330
「AIエージェントで変わる開発プロセス―レビューボトルネックからの脱却」
lycorptech_jp
PRO
0
120
テストプロセスにおけるAI活用 :人間とAIの共存
hacomono
PRO
0
160
Physical AI on AWS リファレンスアーキテクチャ / Physical AI on AWS Reference Architecture
aws_shota
1
130
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
460
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
It's Worth the Effort
3n
188
29k
The Spectacular Lies of Maps
axbom
PRO
1
640
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
120
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
89
Agile that works and the tools we love
rasmusluckow
331
21k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
300
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
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