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
0
910
Debeziumを活用した RDBMSイベントソーシングの仕組み
突撃!隣のデータ設計・活用勉強会 vol.1の登壇資料です。
https://stafes.connpass.com/event/273805/
netprotections
April 07, 2023
Tweet
Share
More Decks by netprotections
See All by netprotections
新旧ツールを駆使した レガシーアプリの解読 #cm_odyssey
netprotections
0
44
Amazon Aurora Cluster Cloneを用いたDataLake構築
netprotections
2
520
株式会社ネットプロテクションズ 会社紹介資料
netprotections
1
58k
決済システムは一人ではつくれなかった話
netprotections
1
1.6k
株式会社ネットプロテクションズ エンジニア職向け会社紹介資料
netprotections
0
16k
Featured
See All Featured
Speed Design
sergeychernyshev
24
610
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
Code Review Best Practice
trishagee
64
17k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Music & Morning Musume
bryan
46
6.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
BBQ
matthewcrist
85
9.3k
Ruby is Unlike a Banana
tanoku
97
11k
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