Slide 1

Slide 1 text

Copyright(C) Net Protections,Inc. All Rights Reserved. Debeziumを活用した RDBMSイベントソーシングの仕組み - 結果生合成を担保するマイクロサービスの設計パターンのお話 -

Slide 2

Slide 2 text

Copyright(C) Net Protections,Inc. All Rights Reserved. 自己紹介 2 春田 岬 Haruta Misaki 2016年4月にネットプロテクションズに新卒入社。 入社後はシステム開発を担うビジネスアーキテクトグループにて決済事業の新 規機能開発PJTに関わる。 新卒3年目の時に関西オフィスを設立。 関西オフィスにて海外向け決済事業AFTEEの開発チームを立ち上げアプリケー ション構築〜インフラ基盤構築の推進を行い8月にローンチ。 2020年に全社的なAWS導入推進に向けた戦略の策定から推進を行い、2021年 にはNP掛け払いのオンプレミスで稼働する決済基盤のAWS移行をリード。 現在は1事業・領域に留まらず、事業横断で幅広く内製推進やプロダクト刷新 に関わっている。 株式会社ネットプロテクションズ ソリューションアーキテクトグループ 関西開発拠点長

Slide 3

Slide 3 text

Copyright(C) Net Protections,Inc. All Rights Reserved. 目次 3 01 | はじめに ● Net Protectionsの開発組織と事業を支える機能群 ● 機能チームで取り組んだドメイン領域 02 | 本編 ● アーキテクチャ ● Sagaパターン ● イベントソーシング・CQRS ● Transactional Outboxパターン ● Outboxパターンを利用したSagaの実装 ● AWSアーキテクチャ構成(一部抜粋) ● 障害対応時の対応 03 | おわりに ● 本日のまとめ ● 宣伝

Slide 4

Slide 4 text

Copyright(C) Net Protections,Inc. All Rights Reserved. ビジネスモデル 4 後払いによる未回収リスクを保証し、一連の決済業務をすべてアウトソースできるサービスです。 ※当社所定の審査を通過した取引が対象となります。審査通過後においても、当該取引に関して加盟店と購入者または購入企業の間に紛争が生じ、速やかに解決ができず、又はそのおそれがあると当社が判断し たときその他当社が提供するサービスの加盟店規約所定の事由がある取引は、対象外となります。 ※

Slide 5

Slide 5 text

Copyright(C) Net Protections,Inc. All Rights Reserved. Net Protectionsの開発組織と事業を支える機能群 5 本日お話しする問題解決領域は決済ドメインの一部である取引先ドメイン領域のお話です 本日はココの話

Slide 6

Slide 6 text

Copyright(C) Net Protections,Inc. All Rights Reserved. アーキテクチャの種類 アーキテクチャ 6 モノリス モジュラモノリス マイクロサービス サービス モジュール サービス モジュール モジュール モジュール サービス モジュール サービス モジュール

Slide 7

Slide 7 text

Copyright(C) Net Protections,Inc. All Rights Reserved. アーキテクチャ 7 今回はチーム開発で扱いやすいモジュラモノリスを採用しました モノリス モジュラモノリス マイクロサービス サービス モジュール サービス モジュール モジュール モジュール サービス モジュール サービス モジュール

Slide 8

Slide 8 text

Copyright(C) Net Protections,Inc. All Rights Reserved. 契約サービス 審査サービス 申請サービス アーキテクチャ 8 データベースは共通のものを利用し、スキーマはドメインごとに分割 Apache Kafka モジュールA モジュールA モジュールB モジュールB モジュールA モジュールB RDBMS 申請スキーマ 審査スキーマ 契約スキーマ

Slide 9

Slide 9 text

Copyright(C) Net Protections,Inc. All Rights Reserved. Sagaパターン Sagaパターン 9 サービスA サービスB サービスC DB ローカル トランザクション DB ローカル トランザクション DB ローカル トランザクション 結果生合成を担保するために分散トランザクションを避けたSagaパターンを採用 ● 長時間のテーブルロックを防ぎ、トランザクションを最小単位に分離 ● 各種サービスのトランザクションが完了すれば次のサービスに数珠繋ぎで連携

Slide 10

Slide 10 text

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種類が存在

Slide 11

Slide 11 text

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パターンを採用

Slide 12

Slide 12 text

Copyright(C) Net Protections,Inc. All Rights Reserved. イベント駆動システムにはイベントソーシングの設計パターンを導入 イベントソーシング/CQRS 12 ● 唯一信頼できるデータはドメインイベントという考え方 ● ドメインイベントは永続的なデータストアで管理 業務 DB イベント ストア ドメインイベントを記録 業務データ 更新プロセス イベントの受信 《イベントA》 id=1 企業名=(株)勉強会 《イベントB》 id=1 企業名=(株)勉強会 ドメインイベント 永続化プロセス 業務データに反映 業務データの読み込み

Slide 13

Slide 13 text

Copyright(C) Net Protections,Inc. All Rights Reserved. イベントソーシング/CQRS 13 ドメインイベントとしての業務データの書き込み先と業務データの参照先が別れる構成に(=CQRS) 読み込み:ドメインイベントの計算処理に必要なデータを業務DBから参照 書き込み:計算結果のデータをイベントストアに書き込み/非同期で業務DBに反映 業務 DB イベント ストア ドメインイベントを記録 業務データ 更新プロセス イベントの受信 《イベントA》 id=1 企業名=(株)勉強会 《イベントB》 id=1 企業名=(株)勉強会 ドメインイベント 永続化プロセス 業務データに反映 業務データの読み込み

Slide 14

Slide 14 text

Copyright(C) Net Protections,Inc. All Rights Reserved. 分散トランザクション Transactional Outbox Transactional Outboxパターンについて 14 イベント ストア 業務DB モジュール RDBMS モジュール イベントデータ 業務データ 2フェーズコミット 単一コミット 業務テーブル Outboxテーブル データベースに追加したOutboxテーブルにイベントの内容を書き込むパターン ● イベントの書き込みはDBのローカルトランザクションを利用 ● 他の業務テーブルと単一コミットでイベント書き込みが可能に(脱2フェーズ)

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Copyright(C) Net Protections,Inc. All Rights Reserved. 具体処理層 オーケストレータ層 Outboxパターンを利用したSagaの実装 16 振り分け Consumer debezium タイムライントピック 具象トピック① 具象トピック② 具象トピック③ イベント依頼履歴テーブル Consumer① Consumer② Consumer③ イベント消費履歴テーブル 冪等チェック 次ドメインイベント依頼 Outboxパターンを利用することで下記のようなSagaを組むことが可能に

Slide 17

Slide 17 text

Copyright(C) Net Protections,Inc. All Rights Reserved. イベントソーシング:イベント永続化&伝播 業務スキーマ Transactional Outboxパターンについて 17 RDBMS 申請スキーマ 審査スキーマ 契約スキーマ タイムラインスキーマ イベント消費履歴テーブル イベント依頼履歴テーブル Debezium Kafka Outboxテーブルとして利用 WAL Consumerの冪等チェックで利用 タイムラインスキーマにイベント依頼・消費履歴テーブルを作成しイベント情報を統合管理 ● イベント依頼履歴テーブルをOutboxテーブルとして利用 ● イベント消費履歴テーブルは冪等チェックで利用

Slide 18

Slide 18 text

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}

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Copyright(C) Net Protections,Inc. All Rights Reserved. 障害発生時の対応について 20 具体処理層 オーケストレータ層 振り分け Consumer debezium タイムライントピック 具象トピック① 具象トピック② 具象トピック③ イベント依頼履歴テーブル Consumer① Consumer② Consumer③ イベント消費履歴テーブル 正常処理は冪等チェックで スキップされる 障害を起こしたConsumerGroupの失敗したメッセージまでOffSetを戻し処理を再実行 リカバリ手順 ①障害原因を特定&対応 ②Consumerを停止 ③ConsumerのOffSetを戻す ④Consumerを再開

Slide 21

Slide 21 text

Copyright(C) Net Protections,Inc. All Rights Reserved. 本日のまとめ 21 Sagaオーケストレーションパターン ● 結果生合成を担保するために分散トランザクションを避けた設計パターンを採用 ● オーケストレータ層を作ることで、OutBoxテーブルの増加を抑えられた イベントソーシング/CQRSパターン ● イベントの書き込みは永続データストアに格納することでイベントが揮発せず安定した非同期処理を実現 ● 参照処理と書き込み処理の責務を完全に分離することで柔軟なパフォーマンス性の高いシステムに Transactional Outboxパターン ● イベントの書き込みはDBのローカルトランザクションを利用 ● 他の業務テーブルと単一コミットでイベント書き込みが可能になり脱2フェーズを実現

Slide 22

Slide 22 text

22 宣伝 ネットプロテクションズでは、 現在PdM / エンジニアポジションの方を積極的に募集中です 本日の発表で興味を持っていただいた方は 下記QRよりカジュアル面談のお申し込みが可能です ぜひ一度お話ししましょう

Slide 23

Slide 23 text

No content