Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

スライドは X に投稿したので #mf_techday 見てね I've posted the slides in X, so check out #mf_techday!

Slide 3

Slide 3 text

● 2018 マネーフォワード入社
 ○ Joined Money Foward
 ● 2018-2021 HRS本部(給与、勤怠グループ)
 ○ HRS Dept. (Payroll, Attendance)
 ● 2021-現在 業務基盤開発本部(わり算グループ)
 ○ Business Platform Dev Dept.(Warizan)
 
 ● X: @_4geru / github: @4geru
 内西 功一(しげる) Koichi Uchinishi(4geru)

Slide 4

Slide 4 text

● 各プロジェクトの詳細な進め方
 ● 関連するサブプロジェクト
 ○ モノリスからサービス切り出し
 ○ 課金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


Slide 5

Slide 5 text

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


Slide 6

Slide 6 text

桃園の誓いアーキテクチャとは? What is the “Peach Garden Oath” Architecture?

Slide 7

Slide 7 text

三国志演義:桃園の誓い
 「我ら生まれた日は違えども、
 死す時は同じ日同じ時を願わん」
 桃園の誓いアーキテクチャとは? 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."


Slide 8

Slide 8 text

「我ら生まれた日は違えども、
 死す時は同じ日同じ時を願わん」
 →「サービスの生まれる時は違っても
     ダウンする時は同じ」
 "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?

Slide 9

Slide 9 text

桃園脱却の目的 Purpose of   the Peach Garden Escape

Slide 10

Slide 10 text

桃園の誓いアーキテクチャとは? What is the Peach Garden Oath Architecture?

Slide 11

Slide 11 text

📚 課題
 ● 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


Slide 12

Slide 12 text

📚 課題
 ● 開発のスピードが遅くなる
 ○ 変更の判断がしにくい
 ● 意図しない用途で使われる
 ○ 販売元、割引チケット
 ○ 固有情報が別サービスで利用
 📚 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

Slide 13

Slide 13 text

桃園脱却後の構成 Architecture after Peach Garden Escape

Slide 14

Slide 14 text

共通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

Slide 15

Slide 15 text

共通DBの利用をやめ、サービスDBのみ 利用します
 まだ同じDBサーバーを利用しているため 影響を受ける可能性があります
 桃園脱却 1/2: テーブル分離後 Peach Garden Escape 1/2: After Table Separation Stop using Shared DB and only use Service DB Still potentially affected becaus the same DB server is still being used

Slide 16

Slide 16 text

サービス独自の 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.

Slide 17

Slide 17 text

🚀 目標
 ● 基盤サービスがデータベース分離完了している
 = 全てのサービスが共通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


Slide 18

Slide 18 text

わり算とは? What is the Warizan Team?

Slide 19

Slide 19 text

わり算とは? 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
 …


Slide 20

Slide 20 text

わり算が活動してきたこと Activities of the Warizan Team

Slide 21

Slide 21 text

各サービスの桃園脱却の時系列 Timeline of Each Service’s Peach Garden Escape

Slide 22

Slide 22 text

各サービスの桃園脱却の時系列 Timeline of Each Service’s Peach Garden Escape 共通移行期 Common Migration Phase 個別移行期 Individual Migration Phase 探索期 Exploration Phase

Slide 23

Slide 23 text

共通移行期 Common Migration Phase 個別移行期 Individual Migration Phase 探索期 Exploration Phase 各サービスの桃園脱却の時系列 Timeline of Each Service’s Peach Garden Escape 👆 JOIN at 2022/07

Slide 24

Slide 24 text

各サービスの桃園脱却の時系列 Timeline of Each Service’s Peach Garden Escape 共通移行期 Common Migration Phase 個別移行期 Individual Migration Phase 探索期 Exploration Phase

Slide 25

Slide 25 text

📚 課題
 ● 着手の順番がわからない
 ● タスクの進め方がわからない
 探索期 の課題と対応 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

Slide 26

Slide 26 text

探索期 のプロジェクト 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]
 ● 共通テーブル移行 [共通]
 ○ 事業者分離
 ○ ユーザー分離
 ● 個別テーブル移行 [個別]
 ● データ同期機能の開発 [個別]


Slide 27

Slide 27 text

● 共通テーブル移行 [共通]
 ○ 事業者分離 
 ○ ユーザー分離 
 ● 個別テーブル移行 [独自]
 ● データ同期機能の開発 [独自]
 
 ● 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


Slide 28

Slide 28 text

共通テーブル移行 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.


Slide 29

Slide 29 text

共通テーブル移行 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

Slide 30

Slide 30 text

共通テーブル移行 2/5: サービスDBに書き込み サービスDBへ書き込み用の
 SyncModel / Table の作成
 
 Create SyncModel / Tables 
 to Write Service DB
 Migrate shared table to own DB 2/5: Write service DB

Slide 31

Slide 31 text

共通テーブル移行 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

Slide 32

Slide 32 text

共通テーブル移行 4/5: 読み書き切り替え 読み込みを共通DBから
 サービスDBに変更します
 
 Change reading 
 from Shared DB 
 to Service DB
 Migrate shared table to own DB: 4/5: Switch read and write

Slide 33

Slide 33 text

共通テーブル移行 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

Slide 34

Slide 34 text

各サービスの桃園脱却の時系列 Timeline of Each Service’s Peach Garden Escape 個別移行期 Individual Migration Phase 探索期 Exploration Phase 共通移行期 Common Migration Phase

Slide 35

Slide 35 text

📚 課題
 ● 長期タスクにより担当者が交代
 ● 各サービスの担当者がわからない
 ● 全体チャンネルで呟きづらい
 共通移行期 の課題と対応 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


Slide 36

Slide 36 text

● 別のカンパニー組織も含む、
 全体のステークホルダーマップを作成
 ● 属人化を防ぐため、Slackチャンネル/グ ループメンションを一覧化
 ステークホルダーマップの作成 Create Stakeholder Map ● Create an overall stakeholder map, including other Company’s organizations
 ● To prevent personalization, created a list of Slack Channel / mention groups


Slide 37

Slide 37 text

📚 課題
 ● 各サービスの進め方がバラバラ
 ● タスク & スケジュール管理が違う
 ○ 全体の管理をするのは難しい
 共通移行期 の課題と対応 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


Slide 38

Slide 38 text

進捗を管理するではなく、お互いに
 情報共有するため
 スケジュール、詳細タスクの管理は
 しない
 全体のプロジェクト進捗を可視化 Visualize the Overall Project Progress The purpose is not to manage progress but to share information
 No schedule or detailed task management


Slide 39

Slide 39 text

全体のプロジェクト進捗を可視化 サービス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

Slide 40

Slide 40 text

全体のプロジェクト進捗を可視化 わり算は、横断的にタスクの ブロックがないか先行調査 依存関係の削除 The Warizan Team conducted a cross-sectional investigation of potential impacts on other services and removed dependencies Visualize the Overall Project progress

Slide 41

Slide 41 text

一覧化することでサービスごとの状態が可 視化できる
 ● Created a list of services to visualize the status of each
 全体のプロジェクト進捗を可視化 Visualize the Overall Project Progress 2023-08 DONE: 64%
 2024-08 DONE: 91%


Slide 42

Slide 42 text

各サービスの桃園脱却の時系列 Timeline of Each Service’s Peach Garden Escape 共通移行期 Common Migration Phase 探索期 Exploration Phase 個別移行期 Uniq Migration Phase

Slide 43

Slide 43 text

📚 課題
 ● サービス毎に課題が違う
 個別移行期 の課題と対応 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

Slide 44

Slide 44 text

📚 課題
 ● 個別テーブル移行が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


Slide 45

Slide 45 text

桃園脱却全体を振り返って Looking back at Entire Peach Garden Escape

Slide 46

Slide 46 text

当初は意図しない利用
 ● 割引チケット
 ○ 複数サービスへの適用
 ○ 不特定多数な販売対象
 サービスの特性
 ● 月末月初のリリース制限
 ○ 請求書の発行
 ○ 課金集計バッチの実行
 ● 確定申告期間中のリリース制限
 󰝮 桃園脱却を進める上でつらかったこと 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

Slide 47

Slide 47 text

🌱 ゴール、期限を決める
 ● 目的を明確にする
 🌿 着手方針、担当を決める
 ● 事業者分離、ユーザー分離
 ● 対応範囲について
 ● 誰に相談をすれば良いか
 
 🌱 いまゼロから始めるとしたら 🌱 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

Slide 48

Slide 48 text

🍂キックオフ、振り返りの実施
 ● 関係者での認識合わせ
 ● 知見共有向けの振り返り
 🌱 いまゼロから始めるとしたら 2/2 🍂 Hold Kickoff and Retrospective
 ● Aligning understanding among stakeholders
 ● Retrospective to share knowledge
 If I were to start from scratch now 2/2

Slide 49

Slide 49 text

中出さん(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

Slide 50

Slide 50 text

● わり算での知見をもとに
 サービス、技術特化チームが発足
 ● わり算からたくさんのメンバーが新し いプロジェクトへ巣立っていきました
 ● わり算のチャレンジ
 ○ 新規サービスの開発
 ○ 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

Slide 51

Slide 51 text

中出さんの決意から8年経過しました 8 years have passed since Nakade-san's decision

Slide 52

Slide 52 text

桃園脱却も終わりが見えてきました The end of Peach Garden Escape is approaching

Slide 53

Slide 53 text

わり算だけの力ではないです This was not accomplished by the Warizan Team only

Slide 54

Slide 54 text

関係者全員のおかげです Thanks to everyone involved in the Peach Garden Escape.

Slide 55

Slide 55 text

マネーフォワードは 2028年に売上高 1000億企業目指してます Money Forward aims to be a 100 billion yen Revenue Company by 2028

Slide 56

Slide 56 text

桃園脱却で見えた次の課題 The next Challenge after Peach Garden Escape

Slide 57

Slide 57 text

● 共通データ一貫性が保たれない
 ○ マスタ共通化の取り組み
 ● 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


Slide 58

Slide 58 text

山はまだ高い The mountain we are climbing is high

Slide 59

Slide 59 text

もっと進化が必要 We need more Evolution

Slide 60

Slide 60 text

No content