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
720
2025/2/6開催メディア向け説明会_株式会社 NCB Lab._企業間決済の最新トレンド 米国主要プレイヤーの戦略
netprotections
0
690
新旧ツールを駆使した レガシーアプリの解読 #cm_odyssey
netprotections
0
84
Amazon Aurora Cluster Cloneを用いたDataLake構築
netprotections
2
700
株式会社ネットプロテクションズ 会社紹介資料
netprotections
1
220k
決済システムは一人ではつくれなかった話
netprotections
1
2k
株式会社ネットプロテクションズ エンジニア職向け会社紹介資料
netprotections
0
28k
Other Decks in Technology
See All in Technology
Snowflake Intelligenceにはこうやって立ち向かう!クラシルが考えるAI Readyなデータ基盤と活用のためのDataOps
gappy50
0
200
新アイテムをどう使っていくか?みんなであーだこーだ言ってみよう / 20250911-rpi-jam-tokyo
akkiesoft
0
250
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
110
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
5
1.6k
2つのフロントエンドと状態管理
mixi_engineers
PRO
3
100
Generative AI Japan 第一回生成AI実践研究会「AI駆動開発の現在地──ブレイクスルーの鍵を握るのはデータ領域」
shisyu_gaku
0
160
LLMを搭載したプロダクトの品質保証の模索と学び
qa
0
1k
共有と分離 - Compose Multiplatform "本番導入" の設計指針
error96num
2
410
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
940
5分でカオスエンジニアリングを分かった気になろう
pandayumi
0
240
データアナリストからアナリティクスエンジニアになった話
hiyokko_data
2
450
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
550
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Six Lessons from altMBA
skipperchong
28
4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Music & Morning Musume
bryan
46
6.8k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
Being A Developer After 40
akosma
90
590k
Side Projects
sachag
455
43k
Done Done
chrislema
185
16k
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