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

横断組織として考える共通DBの課題解決 〜 桃園の誓いアーキテクチャ 〜 / Addressi...

4geru sakisaka
September 19, 2024

横断組織として考える共通DBの課題解決 〜 桃園の誓いアーキテクチャ 〜 / Addressing Shared Database Challenges as Cross-Team: “Peach Garden Oath” Architecture

Presentation Slide for Money Forward Tech Day 2024.
https://techday.moneyforward-dev.jp/2024/

4geru sakisaka

September 19, 2024
Tweet

More Decks by 4geru sakisaka

Other Decks in Technology

Transcript

  1. • 2018 マネーフォワード入社
 ◦ Joined Money Foward
 • 2018-2021 HRS本部(給与、勤怠グループ)


    ◦ HRS Dept. (Payroll, Attendance)
 • 2021-現在 業務基盤開発本部(わり算グループ)
 ◦ Business Platform Dev Dept.(Warizan)
 
 • X: @_4geru / github: @4geru
 内西 功一(しげる) Koichi Uchinishi(4geru)
  2. • 各プロジェクトの詳細な進め方
 • 関連するサブプロジェクト
 ◦ モノリスからサービス切り出し
 ◦ 課金API導入
 ◦ 管理画面へのAzure

    AD導入
 • シャーディングについて
 今回発表に含まないこと Not included in this presentation • Detailed Approach for Each Project
 • Related Sub-Projects
 ◦ Extracting services from a monolithic system
 ◦ Introducing Billing API
 ◦ Introducing Azure AD to Admin screen
 • About DB Sharding

  3. 1. 桃園の誓いアーキテクチャとは? 2. 桃園脱却の目的
 3. わり算とは?
 4. わり算が活動してきたこと
 a. 探索期


    b. 共通移行期
 c. 個別移行期
 5. 桃園脱却で見えた次の課題
 目次 Table of Contents 1. What is the Peach Garden Oath Architecture?
 2. Purpose of Peach Garden Escape
 3. What is the Warizan team
 4. Activity of the Warizan team
 a. Exploration Phase
 b. Common Migration Phase
 c. Individual Migration Phase
 5. The next challenge after
 Peach Garden Escape

  4. 三国志演義:桃園の誓い
 「我ら生まれた日は違えども、
 死す時は同じ日同じ時を願わん」
 桃園の誓いアーキテクチャとは? What is the Peach Garden Oath

    Architecture? From “Romance of the Three Kingdoms”:
 The Oath of the Peach Garden
 "Even if we were not born at the same time,
   we hope to die at the same time."

  5. 「我ら生まれた日は違えども、
 死す時は同じ日同じ時を願わん」
 →「サービスの生まれる時は違っても
     ダウンする時は同じ」
 "Even if we were not born

    at the same time,
   we hope to die at the same time."
 → "Even if not created at the same time,
 the services will go down at the same time."
 桃園の誓いアーキテクチャとは? What is the Peach Garden Oath Architecture?
  6. 📚 課題
 • SlowQuery で全体障害になっていた
 ◦ toB 側の障害でもtoC側に影響
 ◦ 月に何度か発生


    ◦ 深夜にインフラが立ち会い
 • DB変更のリリース
 ◦ 複数サービスで同時にリリース
 桃園アーキテクチャのつらみ The Pain of the Peach Garden Oath Architecture 📚 Challenges
 • Slow Query causes across-the board outages
 ◦ B toB outages affected B toC
 ◦ Occurred several times a month
 • DB change releases
 ◦ Infrastructure team monitors
 the release late at night
 ◦ Multiple services must release
 at the same time

  7. 📚 課題
 • 開発のスピードが遅くなる
 ◦ 変更の判断がしにくい
 • 意図しない用途で使われる
 ◦ 販売元、割引チケット


    ◦ 固有情報が別サービスで利用
 📚 Challenges
 • Development slowed down
 ◦ Difficult to make change decisions
 • Unintended use of data
 ◦ Seller, Discount ticket
 ◦ Dedicated information used in other servics
 桃園アーキテクチャのつらみ The Pain of the Peach Garden Oath Architecture
  8. 共通DBとサービスDBの両方を利用してい ます
 • ユーザー、事業者、個別データ等
 
 Both Shared DB and Service

    DBs are used
 • User, Office, Service Tables etc…
 桃園脱却 0/2: テーブル分離前 Peach Garden Escape 0/2: Before Table Separation
  9. サービス独自の DB サーバーに移行し、 共通DBからの影響はなくなります
 桃園脱却 2/2: データベース分離 Peach Garden Escape

    2/2: After Database Separation Service moves tables to its own DB server. Service will no longer be affected by Shared DB.
  10. 🚀 目標
 • 基盤サービスがデータベース分離完了している
 = 全てのサービスが共通DBの障害の影響を受けない
 ビジネスカンパニーの桃園脱却のゴール Goal of Peach

    Garden Escape in Business Company 🚀 Goal
 • Platform Services has finished database separation
 = All services are not affected by failures of Shared DB

  11. わり算とは? What is the Warizan Team? • 共通DBを分割する目的で作られたビ ジネスカンパニーの1チーム
 •

    桃園脱却の Enabling チームの役割
 • A Team to divide the Shared Database in Business Company
 • The Team enabling Peach Garden Escape
 ServiceA / Shared DB = ServiceA DB
 ServiceB / Shared DB = ServiceB DB
 …

  12. 各サービスの桃園脱却の時系列 Timeline of Each Service’s Peach Garden Escape 共通移行期 Common

    Migration Phase 個別移行期 Individual Migration Phase 探索期 Exploration Phase
  13. 共通移行期 Common Migration Phase 個別移行期 Individual Migration Phase 探索期 Exploration

    Phase 各サービスの桃園脱却の時系列 Timeline of Each Service’s Peach Garden Escape 👆 JOIN at 2022/07
  14. 各サービスの桃園脱却の時系列 Timeline of Each Service’s Peach Garden Escape 共通移行期 Common

    Migration Phase 個別移行期 Individual Migration Phase 探索期 Exploration Phase
  15. 📚 課題
 • 着手の順番がわからない
 • タスクの進め方がわからない
 探索期 の課題と対応 Challenges and

    Actions in Exploration Phase 📚 Challenges
 • Unclear order of tasks
 • Unclear how to complete tasks
 ✅ 対応
 • サービスチームの中に入って
 一緒にプロジェクトを推進
 • 依存関係の整理
 • ファーストペンギンを作る
 ✅ Actions
 • Joined the Service Teams to drive the Project Together
 • Streamlined dependencies
 • Made the first use case
  16. 探索期 のプロジェクト Projects in Exploration Phase • Migrate shared table

    to own DB [Common]
 ◦ Office Separation
 ◦ User Separation
 • Migrate table to own DB [Unique]
 • Development of data syncronization function [Unique]
 • 共通テーブル移行 [共通]
 ◦ 事業者分離
 ◦ ユーザー分離
 • 個別テーブル移行 [個別]
 • データ同期機能の開発 [個別]

  17. • 共通テーブル移行 [共通]
 ◦ 事業者分離 
 ◦ ユーザー分離 
 •

    個別テーブル移行 [独自]
 • データ同期機能の開発 [独自]
 
 • Migrate shared table to own DB [Common]
 ◦ Office Separation
 ◦ User Separation
 • Migrate table to own DB [Unique]
 • Development of data syncronization function [Unique]
 探索期 のプロジェクト Projects in Exploration Phase 多くのプロジェクトで利用された
 “共通テーブル移行 ” を説明します
 一部データのみ移行対象の場合に利用
 I will talk more about the Shared table migration
 This flow is used for partial data migration

  18. 共通テーブル移行 0/5: 着手前 Migrate shared table to own DB 0/5:

    Before starting 共通パッケージ model と
 共通 DB 利用
 サービスDBにはテーブルが
 存在しない
 
 Use common package model and Shared DB.
 No table existed on Service DB.

  19. 共通テーブル移行 1/5: 依存関係を減らす model が意図しない挙動を
 防ぐため共通パッケージの 
 model を削除
 


    Removed model from 
 the common package 
 to prevent unintended 
 behavior of the model
 Migrate shared table to own DB 1/5: Reduce dependency
  20. 共通テーブル移行 2/5: サービスDBに書き込み サービスDBへ書き込み用の
 SyncModel / Table の作成
 
 Create

    SyncModel / Tables 
 to Write Service DB
 Migrate shared table to own DB 2/5: Write service DB
  21. 共通テーブル移行 3/5: データの同期 必要なデータのみを
 データパッチでサービスDB
 に移行
 • 差異がないかを確認
 Migrate shared

    table to own DB 3/5: Synchronize data Migrate only the necessary 
 data to the service DB with 
 data patch
 • Check discrepancies
  22. 共通テーブル移行 5/5: 共通DBへの書き込み停止 移行が完了した後
 共通DBへの書き込み停止
 OldModel の処理の削除
 
 After migration

    is complete,
 stop writing to Shared DB
 Delete OldModel processing
 Migrate shared table to own DB: 5/5: Stop writing to the Shared DB
  23. 各サービスの桃園脱却の時系列 Timeline of Each Service’s Peach Garden Escape 個別移行期 Individual

    Migration Phase 探索期 Exploration Phase 共通移行期 Common Migration Phase
  24. 📚 課題
 • 長期タスクにより担当者が交代
 • 各サービスの担当者がわからない
 • 全体チャンネルで呟きづらい
 共通移行期 の課題と対応

    1/2 Challenges and Actions in Common Migration Phase 1/2 ✅ したこと
 • ステークホルダーマップの作成
 • 各サービスの定例を開催
 • それぞれの桃園チャンネルの作成
 📚 Challenges
 • Change of person in charge
 • Person in charge for each service is unclear
 • Hard to post on the general channel
 ✅ Actions
 • Created a stakeholder map
 • Regular meetings with each service
 • Created individual “Peach Garden” channels

  25. 📚 課題
 • 各サービスの進め方がバラバラ
 • タスク & スケジュール管理が違う
 ◦ 全体の管理をするのは難しい


    共通移行期 の課題と対応 2/2 Challenges and Actions in Common Migration Phase 2/2 ✅ したこと
 • 全体のプロジェクト進捗を可視化
 📚 Challenges
 • Each service had a different process
 • Different task & schedule management
 ◦ Comprehensive management is difficult 
 ✅ Actions
 • Visualized Overall Project progress

  26. 全体のプロジェクト進捗を可視化 サービスB, C は事業者分離中 サービスA, D はユーザー分離中 B-C, A-D で知見共有が可能

    Services B and C are working on office Separation. Services A and D are working on user separation Share the knowledge between
 B-C and A-D
 Visualize the Overall Project progress
  27. 一覧化することでサービスごとの状態が可 視化できる
 • Created a list of services to visualize

    the status of each
 全体のプロジェクト進捗を可視化 Visualize the Overall Project Progress 2023-08 DONE: 64%
 2024-08 DONE: 91%

  28. 各サービスの桃園脱却の時系列 Timeline of Each Service’s Peach Garden Escape 共通移行期 Common

    Migration Phase 探索期 Exploration Phase 個別移行期 Uniq Migration Phase
  29. 📚 課題
 • サービス毎に課題が違う
 個別移行期 の課題と対応 1/2 Challenges and Actions

    the Individual Migration Phase 1/2 📚 Challenges
 • Challenges are different among Services
 ✅ したこと
 • プロジェクト単位でMTGを実施
 • 固有の問題なので深入りしない
 ◦ わり算は全体をサポート
 ◦ リリース日程だけ調整 ✅ Actions
 • Hold meetings by project
 • Don’t go deeply into project-uniuqe issues
 ◦ Warizan provides holistic support
 ◦ Just adjust the release schedule
  30. 📚 課題
 • 個別テーブル移行が3ヶ月で
 完了(約250テーブル)
 • 大幅にサービスデータが変わる
 個別移行期 の課題と対応 2/2

    Challenges and Actions in the Individual Migration Phase 2/2 📚 Challenges
 • Service table migration was completed in 3 months (about 250 tables).
 • Service data changed significantly.
 ✅ したこと
 • ステークホルダーマップをもとにデー タ利用ユーザーへの情報共有
 ✅ Actions
 • Share changes with data users
 based on the Stakeholder Map

  31. 当初は意図しない利用
 • 割引チケット
 ◦ 複数サービスへの適用
 ◦ 不特定多数な販売対象
 サービスの特性
 • 月末月初のリリース制限


    ◦ 請求書の発行
 ◦ 課金集計バッチの実行
 • 確定申告期間中のリリース制限
 󰝮 桃園脱却を進める上でつらかったこと Initially unexpected usage
 • Discount ticket
 ◦ Application to multiple services
 ◦ Sold to unspecified entities
 Characteristics of services
 • End/beginning of month release restrictions
 ◦ Invoicing, Billing batch processes
 • Release restrictions during to tax return season
 What we struggled in Peach Garden Escape
  32. 🌱 ゴール、期限を決める
 • 目的を明確にする
 🌿 着手方針、担当を決める
 • 事業者分離、ユーザー分離
 • 対応範囲について


    • 誰に相談をすれば良いか
 
 🌱 いまゼロから始めるとしたら 🌱 Determine the goals and deadlines
 • Clarify objectives
 🌿 Determine the approach and owner
 • Office, user separation
 • Target scope of support
 • Who to consult for what
 If I were to start from scratch now
  33. 🍂キックオフ、振り返りの実施
 • 関係者での認識合わせ
 • 知見共有向けの振り返り
 🌱 いまゼロから始めるとしたら 2/2 🍂 Hold

    Kickoff and Retrospective
 • Aligning understanding among stakeholders
 • Retrospective to share knowledge
 If I were to start from scratch now 2/2
  34. 中出さん(CTO) の後押し
 • マネーフォワード CTO が考えて
 いること(2023 年 12 月)


    • 「創業当時は良い選択だった」――マ ネーフォワードのアーキテクチャ変遷、 クラウドネイティブに変革した理由 (Japanese only)
 各サービスチームが全力で開発したこ と
 Assist by Nakade-san(CTO)
 • Inside the Mind of the Money Forward CTO(December, 2023)
 Each Service Team worked very hard.
 🌈 桃園脱却を進める上でよかったこと Good Things about the Peach Garden Escape
  35. • わり算での知見をもとに
 サービス、技術特化チームが発足
 • わり算からたくさんのメンバーが新し いプロジェクトへ巣立っていきました
 • わり算のチャレンジ
 ◦ 新規サービスの開発


    ◦ Ruby から Kotlin へ
 • Warizan's expertise knowledge led to establishing new service and tech teams
 • Many Warizan members have grown and moved on to other projects
 • Warizan’s next challenge
 ◦ Development of new service
 ◦ Shift from Ruby to Kotlin
 🌈 わり算の変化 Changes that Happened in the Warizan Team
  36. • 共通データ一貫性が保たれない
 ◦ マスタ共通化の取り組み
 • AWS 移行によりコストが上がった
 ◦ AWSコスト最適化
 •

    イベントベースでの通信
 ◦ Kafka の利用推進
 桃園脱却後の課題 Challenges after Peach Garden Escape • Inconsistency in Common Data
 ◦ Common Master
 • Cost rise by AWS Migration
 ◦ AWS cost optimization
 • Event-based communication
 ◦ Promote the Use of Kafka