Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ビジネスを止めずにシステムリプレースを進める為のCDCという選択肢/osc24ng-2-b

 ビジネスを止めずにシステムリプレースを進める為のCDCという選択肢/osc24ng-2-b

Open Source Conference 2024 Nagaoka で発表した発表資料です。

https://ospn.connpass.com/event/325425/

私はキャリアの中で、多くのシステムリプレースに携わってきました。リソースが限られる中、開発を可能な限り止めずに並行稼働しながらリプレースを成功させるために、CDC(チェンジデータキャプチャ)を採用した手法をご紹介します。具体的には、Debeziumを使った実践例を通じて、Webアプリケーション開発者向けに効果的な方法をお伝えします。

対象者:
- Webアプリケーション開発者
- スタートアップなどにお勤めのシステムエンジニアの方

Takahashi Ikki

October 10, 2024
Tweet

More Decks by Takahashi Ikki

Other Decks in Programming

Transcript

  1. ・ Webアプリケーションエンジニア(12年目) ・ バックエンドエンジニア | テックリード ・ 日本PostgreSQLユーザー会 中国地方支部長 ・

    妻と息子と娘と岡山在住 自己紹介 01 高橋 一騎 (@ikkitang) TakahashiIkki TakahashiIkki ikkitang ikkitang
  2. 宣伝 (2) 01 2024年12月06日 (金) PostgreSQL Conference Japan 2024 https://www.postgresql.jp/jpug-pgcon2024

    PostgreSQLをテーマにカンファレンス を開催します。 絶賛チケット販売中!!
  3. 宣伝 (3) 01 (不定期) PostgreSQL アンカンファレンス https://pgunconf.connpass.com/ オフライン or オンラインで

    PostgreSQLをテーマに勉強会を開催 1セッションが10~20分と短くて 参加や聴講などが気軽にできます
  4. 予約ID ... 性別 ゲスト会員 フラグ 1 ... “男性” 1 2

    ... “女性” 0 ... ... ... ... 1000 ... “1” 0 システム開発のジレンマ 02 予約レコード ゲスト会員予約は 撤廃されてて カラムは使ってない 性別の書式が 定まってない
  5. フレームワークのバージョンを上げる! TypeScript ( or Go or Rust ) で書き直す! SPA化して、Reactを採用する!

    開発のしやすさが上がって、価値提供までの速度は上がるが 一方で「キレイな旧システム」を作ってしまう可能性もある システムリプレースをやる 02
  6. CDC : Change Data Capture データベースの変更( Insert / Update /

    Delete ) を検知し   別のアプリケーションに伝達する為の技術や手法 採用事例 食べログさん: ElasticSearch Indexのリアルタイム更新 Chatworkさん: CQRSモデルの更新 オミカレさん: DBリファクタリングの実践 CDC 03
  7. 伝搬 伝 搬 CDC 03 旧システム DB 新システム DB 新システム

    イベント / メッセージ 更新SQL ここが CDC
  8. メリット SQL標準でも規定されており、ほとんどのDBMSで利用可能 各DBMS毎に方言・仕様がある デメリット データベースに追加の負荷が掛かる トランザクション処理にも影響がある ( ※ 後述 )

    SQLで書く必要がある(好みによりそう) PostgreSQLなら 他言語で書ける (ざっと調べた感じ、テスト手法があんまり確立されてなさそう) トリガーベースのCDC 03
  9. users before insert トリガー after insert トリガー Begin Commit トリガーベースのCDC

    03 Insert SQL before トリガー after トリガー Insert SQL トランザクションの確定前に トリガーが順に実行される ↑ 設定のとき... app側で 右のような 処理をする
  10. users before insert トリガー after insert トリガー Begin Commit after

    トリガー トリガーベースのCDC 03 Insert SQL before トリガー Insert SQL トランザクションの確定前に トリガーが順に実行される ↑ 設定のとき... app側で 右のような 処理をする beforeトリガー や after トリガー で 失敗すると Insert SQL 全体が ロールバックされてしまう
  11. データベースのトランザクションログを直接読み取る手法 一般的にはサポートするツールを導入する手法が取られる Debezium / AWS DMS / Azure Data Factory

    / GoldenGate ... 各RDBMS固有のトランザクションログを出力する設定を有効化する 上記ツールのセットアップを行う ログベースのCDC 03
  12. Begin Commit 監視 users debezium ログベースのCDC 03 Insert SQL トランザクションは

    Insert SQL が成功すれば コミットされる ↑ 設定のとき... app側で 右のような 処理をする 監視 users 監視 Consumer Insert SQL users 監視 Consumer Begin Commit リファクタリング users 監視 Consumer は 別ライフサイクルで トランザクションを実行する
  13. Begin Commit 監視 users debezium ログベースのCDC 03 Insert SQL トランザクションは

    Insert SQL が成功すれば コミットされる ↑ 設定のとき... app側で 右のような 処理をする 監視 users 監視 Consumer Insert SQL users 監視 Consumer Begin Commit リファクタリング users 監視 Consumer は 別ライフサイクルで トランザクションを実行する ※ 詳しくは後ほど
  14. CDC 手法まとめ 03 トリガーベース ログベース 手法 データベースのトリガーを 使用して変更を検出する手法 データベースのトランザクシ ョンログを直接監視する手法

    メリット ほとんどのDBMSで利用可能 追加の負荷を最小限に 抑える事ができる デメリット データベースの動作に追加の オーバーヘッドが発生する セットアップの複雑性
  15. AWS DMS 03 AWS DMS ( Database Migration Service )

    データストアから別のデータストアへ移行できるようにするサービス 移行元をソース / 移行先をターゲットという ソースやターゲットとして主要なRDBMSをサポート(オンプレやS3とかも対象) 特徴 フルマネージドサービスなので管理が楽 ( Terraformなどでも管理できる) データ移行ツール なので アプリケーションを起動させるとかは一工夫必要
  16. AWS DMSの実例 03 MySQL MySQL AWS DMS 別DB間のデータ移行 MySQL PostgreSQL

    AWS DMS 異種DB間のデータ移行 Kafkaに書いて Consumerを動かす Database AWS DMS Kafka ..... Consumer S3に書いてLambdaを動かす Database AWS DMS S3 Lambda
  17. Debezium 03 Kafka ..... Consumer MySQL Debezium Consumer部分は 実質的には制限が無いので 自由度の高いアプリケーションが

    実装できる データベースのリファクタリングしたり イベントを受け取ってメールしたり ... etc