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

クラウドネイティブで実現する、共通DBの課題解決 ~桃園の誓いアーキテクチャ~

Avatar for 4geru 4geru
May 23, 2025
9

クラウドネイティブで実現する、共通DBの課題解決 ~桃園の誓いアーキテクチャ~

@IT Cloud Native Week 2025 冬「崖っぷちから這い上がる」で登壇した内容です
https://members06.live.itmedia.co.jp/library/ODIxMTc%253D

Avatar for 4geru

4geru

May 23, 2025
Tweet

More Decks by 4geru

Transcript

  1. ⾃⼰紹介 3 株式会社マネーフォワード ビジネスカンパニー 横断BizOps本部 BizOps部 Adminグループ 2018- HRS本部 2021-

    横断本部 2024- 横断BizOps本部 内⻄ 功⼀ 2018年にマネーフォワードに新卒⼊社。 「マネーフォワード クラウド勤怠」の⽴ち上げに携わり、その後 「マネーフォワード クラウドパートナー」のリニューアルを担当。 「桃園脱却プロジェクト」にてビジネスカンパニーのリード担当。
  2. 4

  3. 7

  4. 8 個⼈事業主 中⼩企業 中堅企業‧IPO準備企業 上場企業 個⼈事業主向け 中⼩企業向け 中堅企業‧IPO準備企業∕上場企業向け あらゆる企業規模に対応 主に⼠業事務所向け

    主に中堅企業向け 個⼈から中⼩企業、エンタープライズ企業まで、様々な企業に対応可能なバックオフィスSaaSを展開 事業内容
  5. 桃園アーキテクチャの課題 DB変更のリリースを行う際、複数サービスでタイミングを合わせる必要がある
 1サービスの影響範囲が分かりづらい
 固有サービスのデータが別サービスでも利用される 請求情報 / 勘定科目 / 従業員情報 など

    重いSQLの実行で全体障害になっていた 13 開発スピードの鈍化 ビジネスカンパニーの障害が別のカンパニーに影響してしまう
 月に何度も障害が発生し、深夜にインフラが立ち会い 1 2 桃園の誓いアーキテクチャとは?
  6. 25 基盤サービスの作成 ① 共通情報:全てのサービスに必須な情報 配布⽤ したこと 1. ユーザー基盤サービスの作成 a. 共通DBへ情報を書き込む

    2. ユーザー基盤の更新系APIを利⽤ 3. 各サービスがDBへの直接参照 を停⽌、参照APIを利⽤する 4. 共通DBへの書き込みを停⽌ 🎉🎉 分離完了🎉🎉
  7. 29 主サービスとAPI連携 配布⽤ したこと Aが送信元、Bが受信先の例 1. A から BにAPIの作成 2.

    Bにキャッシュテーブルの作成 3. テーブル同期のデータパッチ 4. ズレがないかの確認 5. Bから共通DBへのアクセス停⽌ 🎉🎉 分離完了🎉🎉 ②サービス共有情報:2つ以上のサービスで必須な情報
  8. 32 固有カラムを利⽤停⽌ & 引越し ③サービス固有情報:単独サービスで必須な情報 課題 • 共通DBを分割したいが他サービスで利⽤されている • 他サービスでの利⽤は必須なのか判断できない

    ◦ 仕様の話になり PdM を巻き込む必要 • サービス毎に都度調査を⾏うのが煩雑 ◦ どのサービスで利⽤されているか不明確 ◦ 調査タスクは⼀度で完結させたい
  9. 34 固有カラムを利⽤停⽌ & 引越し ③サービス固有情報:単独サービスで必須な情報 • サービスDB が独⽴して稼働できるように! ◦ インフラ移⾏も可能に

    • サービスの仕様を改めて⾒直せた • 他サービスの利⽤がAPI経由になり明確化 ◦ 別サービスから固有カラムの更新がなくなった 解決したこと
  10. 49 課題:サービス-推進チーム間のコミュニケーション プロジェクトの進め⽅:2.サービスチーム サービス毎の Slack チャンネルがなく、プロジェクト全体のチャンネルは⼈が多い 推進チームには伝えておきたいけど、全体の相談事項が流れてしまう(→ 個別の相談は億劫になる) サービスごとの細かい相談がしづらい環境 各サービスの担当者に情報が属⼈化

    休⽇のメンションをキャッチ出来ないことでタスクが漏れる リーダーなど忙しい⼈ / チーム内への共有が漏れがち 途中の⼊れ替わりなどで情報が引き継がれない ⼝頭確認による相互での認識ずれが発⽣ 情報共有をするドキュメントの不⾜ 1 2 3 関係性の構築と ⼼理的安全性の 確保が重要
  11. 59 プロジェクトの終盤‧‧‧ プロジェクトの進め⽅:4.コーポレート Aさん ※PJが終わった認識 担当サービスの分割が 完了しました、 お疲れ様でした! ⻑期‧⼤型のプロジェクトにつき、終盤ではゴールに対する認識がバラバラに Cさん

    ※新⼊社員 すみません 『桃園脱却』って なんですか? Bさん ※PJ継続中の認識 まだ全てDBの分割が 終わってないのでは? Dさん ※上⻑ 経営陣に報告したい のだけど、結局成果って どうだったの?
  12. 60 解決策:ゴールを定義し、ドキュメント化する プロジェクトの進め⽅:4.コーポレート コーポレートCTOに最終資料として共有 ビジネスカンパニー全体に情報を共有する ⼀緒に取り組む仲間を⾒つける →サービス側の担当者が協⼒してくれることに ステップ 1 ステップ

    2 ゴールを定義するドキュメントの作成 ① ビジネスカンパニー + 全体へのヒアリングを⾏い、全体の現状を把握 ② 部⻑ + 仲間 と相談を⾏いドキュメントを作成 ③ VPoE / 本部⻑を巻き込んでドキュメントを確定 →ビジネスカンパニーとしてひとつの解にまとめる ステップ 3 ステップ 4
  13. 62 障害耐性 と開発スピードの向上 取り組みの成果① 基盤アプリは東京に、 共通DBサーバーは 北海道に存在 1クエリごとに20ms かかっていたが、 サービスごとにDBを持つことで⾼速化

    津軽海峡問題 の解消 1サービスが共通DBをダウンさせることは なくなった 開発リソースを個々のサービスへ割くこと ができるようになった 共通DBによる問題 の解消
  14. 63 オンプレからクラウドへ 取り組みの成果② マシンが固定されており、スケールアップがしづらい △ コストが安い 〇 LANなど通信機器などの障害の影響を受ける △ 1

    2 3 オンプレ Before 柔軟にオートスケールが可能 ◎ ⾊々できるようになったもののコスト⾼ △ → 経営層がOK マシン⾃体の交換をクラウドベンダーが担当できる ◎ クラウド After 1 2 3
  15. 64 ダブルメンテナンス問題 サービスC 部⾨マスタ サービスA 部⾨マスタ サービスE 部⾨マスタ サービスB 部⾨マスタ

    サービスD 部⾨マスタ 部⾨マスタを変更したい、 関係するすべてのサービスに 更新をかけないと… 今後に向けて
  16. 67 推進チームでの知⾒を活かし、次のチャレンジへ 新たなチャレンジ!:推進チームメンバー いろんなサービスの中に スポット的に⼊って開発できる 計画プロジェクトに対して 集中できる 横断プロジェクト開発 ⼀つのサービスでユーザー体験含め 深い開発ができる

    エラー調査など現場感が必要な 開発も含まれる サービス開発 解散後、メンバーがサービス開発側に挑戦 After Before 若⼿中⼼チームで衝突もあったものの、円満にプロジェクト終了 推進メンバーの退職者 “ゼロ”
  17. 68 新たなチャレンジ!:内⻄の場合 営業活動、納品、請求、消込までを担当領域とする 推進チーム → BizOps (ビジネス オペレーション) AI活⽤、バックオフィス業務の効率化 顧客管理、マーケティングツール

    などの調整 機動性の⾼い相談⼒ 桃園で 磨いたスキル 問題の分解⼒ 桃園脱却前後のデータ構造が横断的にわかる BizOps で ⽣きている知識 エンジニアのバックグラウンド 推進チームでの知⾒を活かし、次のチャレンジへ