Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
保育・教育施設の業務省力化を提供する Webサービスの改善と技術的負債解消への取り組み ー ...
Search
コドモン開発チーム
March 16, 2023
3.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
保育・教育施設の業務省力化を提供する Webサービスの改善と技術的負債解消への取り組み ー マイクロサービスへの挑戦 ー
コドモン開発チーム
March 16, 2023
More Decks by コドモン開発チーム
See All by コドモン開発チーム
アラート疲れからの脱却 - リソースタグで仕分けるSlack通知戦略 / Breaking Free from Alert Fatigue – A Slack Notification Strategy Using Resource Tags for Routing
codmoninc
0
22
SREに優しいTerraform構成 modulesとstateの組み方 / terraform-modules-state-for-sre
codmoninc
0
300
モノリスなプロダクトの「ほどよい」リプレイス戦略 / A "Just Right" Replacement Strategy for Monolithic Products
codmoninc
0
110
Don't Just Patch — MOTTAINAI! Learn Security from Laravel CVE Diffs
codmoninc
0
220
ソースコードで比較する React / Vue / Svelte の セキュリティ設計思想 / security design philosophy react vue svelte
codmoninc
5
630
少人数SREチームが、長寿なシステムを構築・運用するための取り組み / Efforts by a Small SRE Team to Build and Operate Long-Lived Systems
codmoninc
0
290
フルリモートのその先へ〜パパね、いつも家にいるけどちゃんとこうして働いてるよ〜 / Beyond Full Remote
codmoninc
0
630
多様な働き方を支えるチーム開発カルチャーと 今後の展望 / Team Development Culture Supporting Diverse Workstyles and Future Outlook
codmoninc
0
530
ペアプロ未経験・未知のスキル領域・フルリモートからでも挑戦できる? 40代転職者の実態 / pair-programming-remote-career-change
codmoninc
0
540
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.5k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
170
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
590
The World Runs on Bad Software
bkeepers
PRO
72
12k
sira's awesome portfolio website redesign presentation
elsirapls
0
280
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
170
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Designing for Timeless Needs
cassininazir
1
260
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
950
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
430
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Transcript
2023年2月10日 岡村 謙杜 Chavdar Dimitrov 保育・教育施設の業務省力化を提供する Webサービスの改善と技術的負債解消への取り組み ー マイクロサービスへの挑戦 ー
2 ブルガリア出身、沖縄の大学を卒業後に東京の人事関連SaaS会社に 入社。主にバックエンドの開発を担当。 安全なリリースと快適な開 発環境の構築に関心があります。 Chavdar Dimitrov チャブダール ディミトロフ 2021.08 コドモンに開発エンジニアとして入社
マイクロサービス化に携わる 経歴 自己紹介
3 経歴 プロダクト開発チームにて、バックエンド、フロントエンド問わず 開発に携わる。Kotlinとチーム開発とオカメインコが好き。 自己紹介 岡村 謙杜 おかむら けんと 2021.05
コドモンに開発エンジニアとして入社 2021.10 プロダクト開発チームのマネージャーになる
4 Mission
5 すべての先生に 子どもと向き合う 時間と心のゆとりを こんなプロダクトを開発しています メインプロダクトは、保育・教育施設職員の業務を支援するWebアプリケーション。 保護者と施設のやり取りを支えるモバイルアプリケーションや、施設職員向けモバイル版 アプリケーション、外部サービスと連携するAPIなども開発しています。
6 はじめに
7 本題に入る前に
8 昨年のシステム稼働状況について
9 2022年4月から半年ほど システム稼働が不安定な状況が 時折発生してしまいました
10 安定稼働にもつながる マイクロサービスアーキテクチャ化について 本日は話します
11 本日話す内容 1 2 3 なぜマイクロサービスアーキテクチャへ移行しているか • 取り組んでいる理由 • 移行戦略
実際にどんな感じでやっているのか • 開発の進め方(XP) • 事例紹介:資料管理サービスの移行 やってみての感想・学び これからについて 4
12 本日話す内容 1 なぜマイクロサービスアーキテクチャへ移行しているか • 取り組んでいる理由 • 移行戦略 実際にどんな感じでやっているのか •
開発の進め方(XP) • 事例紹介:資料管理サービスの移行 やってみての感想・学び これからについて 2 3 4
13 CONFIDENTIAL - © 2022 CoDMON Inc. 13 なぜマイクロサービスアーキテクチャへ移行しているか 取り組んでいる理由
14 CONFIDENTIAL - © 2022 CoDMON Inc. 14 なぜマイクロサービスアーキテクチャへ移行しているか 「ユーザーに安定して素早く価値を届け続ける」
15 CONFIDENTIAL - © 2022 CoDMON Inc. 15 なぜマイクロサービスアーキテクチャへ移行しているか コドモンは2015年にリリースされ、
現在は 13,000以上の施設にご利用いただいています
16 CONFIDENTIAL - © 2022 CoDMON Inc. 16 なぜマイクロサービスアーキテクチャへ移行しているか リリース当初から2020年までは
「早くたくさん機能を作る」 ことを目標にしていました
17 CONFIDENTIAL - © 2022 CoDMON Inc. 17 なぜマイクロサービスアーキテクチャへ移行しているか その結果...
「早くたくさん機能を作る」ことを目標にしていた
18 CONFIDENTIAL - © 2022 CoDMON Inc. 18 なぜマイクロサービスアーキテクチャへ移行しているか •
Aを修正したら関係ないと考えていたBに影響が出る • 複数ブランチ運用による複雑度の増加 • リリース後に1箇所不具合が見つかると、全てがロールバックされてしまう • リリース調整のチーム間コミュニケーションの増加 • どこか1箇所で問題が発生すると、システム全体に波及してしまう
19 CONFIDENTIAL - © 2022 CoDMON Inc. 19 なぜマイクロサービスアーキテクチャへ移行しているか •
Aを修正したら関係ないと考えていたBに影響が出る • 複数ブランチ運用による複雑度の増加 • リリース後に1箇所不具合が見つかると、全てがロールバックされてしまう • リリース調整のチーム間コミュニケーションの増加 • どこか1箇所で問題が発生すると、システム全体に波及してしまう 安定してユーザーに価値を届け続けることが難しい状態に
20 CONFIDENTIAL - © 2022 CoDMON Inc. 20 なぜマイクロサービスアーキテクチャへ移行しているか •
Aを修正したら関係ないと考えていたBに影響が出る • 複数ブランチ運用による複雑度の増加 • リリース後に1箇所不具合が見つかると、全てがロールバックされてしまう • リリース調整のチーム間コミュニケーションの増加 • どこか1箇所で問題が発生すると、システム全体に波及してしまう 安定してユーザーに価値を届け続けることが難しい状態に 開発チームの機動力低下
21 CONFIDENTIAL - © 2022 CoDMON Inc. 21 なぜマイクロサービスアーキテクチャへ移行しているか 「ユーザに安定して素早く価値を届け続ける」
「早くたくさん機能を作る」
22 CONFIDENTIAL - © 2022 CoDMON Inc. 22 なぜマイクロサービスアーキテクチャへ移行しているか 「ユーザーに安定して素早く価値を届け続ける」
「早くたくさん機能を作る」
23 CONFIDENTIAL - © 2022 CoDMON Inc. 23 なぜマイクロサービスアーキテクチャへ移行しているか マイクロサービスの利点
• 独立してデプロイ可能 • 耐障害性の向上 • 特定箇所のみスケール可能 • チームの自律性向上 • 技術選定の機会を得られる
24 CONFIDENTIAL - © 2022 CoDMON Inc. 24 なぜマイクロサービスアーキテクチャへ移行しているか マイクロサービスの利点
• 独立してデプロイ可能 • 耐障害性の向上 • 特定箇所のみスケール可能 • チームの自律性向上 • 技術選定の機会を得られる 「ユーザーに安定して素早く価値を届け続ける」
25 CONFIDENTIAL - © 2022 CoDMON Inc. 25 なぜマイクロサービスアーキテクチャへ移行しているか 移行戦略
26 CONFIDENTIAL - © 2022 CoDMON Inc. 26 なぜマイクロサービスアーキテクチャへ移行しているか 移行検討当初の時点では...
27 CONFIDENTIAL - © 2022 CoDMON Inc. 27 なぜマイクロサービスアーキテクチャへ移行しているか 「ユーザーに安定して素早く価値を届け続けられるようになる」
ことはわかっているけれど・・・
28 CONFIDENTIAL - © 2022 CoDMON Inc. 28 なぜマイクロサービスアーキテクチャへ移行しているか マイクロサービスアーキテクチャへの移行に
会社として取り組むのは初めての挑戦 社内にナレッジも溜まっていない 経験者も少ない どれくらい時間かかるかも予想しづらい 「ユーザに安定して素早く価値を届け続ける」ことが 実現できる可能性があることはわかっている でも、
29 CONFIDENTIAL - © 2022 CoDMON Inc. 29 なぜマイクロサービスアーキテクチャへ移行しているか マイクロサービスアーキテクチャへの移行に
会社として取り組むのは初めての挑戦 社内にナレッジも溜まっていない 経験者も少ない どれくらい時間かかるかも予想しづらい 「ユーザに安定して素早く価値を届け続ける」ことが 実現できる可能性があることはわかっている でも、
30 CONFIDENTIAL - © 2022 CoDMON Inc. 30 なぜマイクロサービスアーキテクチャへ移行しているか マイクロサービスアーキテクチャへの移行に
会社として取り組むのは初めての挑戦 社内にナレッジも溜まっていない 経験者も少ない どれくらい時間かかるかも予想しづらい 「ユーザに安定して素早く価値を届け続ける」ことが 実現できる可能性があることはわかっている でも、
31 CONFIDENTIAL - © 2022 CoDMON Inc. 31 なぜマイクロサービスアーキテクチャへ移行しているか マイクロサービスアーキテクチャへの移行に
会社として取り組むのは初めての挑戦 社内にナレッジも溜まっていない 経験者も少ない どれくらい時間かかるかも予想しづらい 「ユーザに安定して素早く価値を届け続ける」ことが 実現できる可能性があることはわかっている でも、
32 CONFIDENTIAL - © 2022 CoDMON Inc. 32 なぜマイクロサービスアーキテクチャへ移行しているか マイクロサービスアーキテクチャへの移行に
会社として取り組むのは初めての挑戦 社内にナレッジも溜まっていない 経験者も少ない どれくらい時間かかるかも予想しづらい 全体の戦略を立てるために不確実性を減らす必要があった
33 CONFIDENTIAL - © 2022 CoDMON Inc. 33 なぜマイクロサービスアーキテクチャへ移行しているか 移行順序の判断
34 CONFIDENTIAL - © 2022 CoDMON Inc. 34 なぜマイクロサービスアーキテクチャへ移行しているか ビジネス視点
・新規ユーザー獲得に繋がる ・契約維持に繋がる ・プロダクトの活用速度が上がる ・重大なトラブルを防止できる etc. 技術視点 ・ドメイン複雑度 ・他サービスとの依存度 ・データ移行の必要性 ・スケーリングの必要度合い etc. ✖ 改修可能性を上げることで 事業成長につながるか 改修難易度と移行難易度
35 CONFIDENTIAL - © 2022 CoDMON Inc. 35 なぜマイクロサービスアーキテクチャへ移行しているか 分解しやすく
分解によるメリットも大きいところから
36 CONFIDENTIAL - © 2022 CoDMON Inc. 36 なぜマイクロサービスアーキテクチャへ移行しているか まず最初に
コンテキストマップを作成しました
37 CONFIDENTIAL - © 2022 CoDMON Inc. 37 なぜマイクロサービスアーキテクチャへ移行しているか
38 CONFIDENTIAL - © 2022 CoDMON Inc. 38 なぜマイクロサービスアーキテクチャへ移行しているか 資料
シフト
39 CONFIDENTIAL - © 2022 CoDMON Inc. 39 なぜマイクロサービスアーキテクチャへ移行しているか ドメイン複雑度
モバイルリリース データ移行 他サービス依存度 シフト 高 無 無 低 資料 低 有 有 低
40 CONFIDENTIAL - © 2022 CoDMON Inc. 40 なぜマイクロサービスアーキテクチャへ移行しているか モノリス
41 CONFIDENTIAL - © 2022 CoDMON Inc. 41 なぜマイクロサービスアーキテクチャへ移行しているか モノリス
シフト管理 2021年リリース
42 CONFIDENTIAL - © 2022 CoDMON Inc. 42 なぜマイクロサービスアーキテクチャへ移行しているか モノリス
シフト管理 2021年リリース 資料管理 2022年リリース
43 CONFIDENTIAL - © 2022 CoDMON Inc. 43 なぜマイクロサービスアーキテクチャへ移行しているか モノリス
シフト管理 2021年リリース 資料管理 2022年リリース
44 本日話す内容 なぜマイクロサービスアーキテクチャへ移行しているか • 取り組んでいる理由 • 移行戦略 実際にどんな感じでやっているのか • 開発の進め方(XP)
• 事例紹介:資料管理サービスの移行 やってみての感想・学び これからについて 3 4 1 2
45 CONFIDENTIAL - © 2022 CoDMON Inc. 45 実際にどんな感じでやっているのか 開発の進め方
46 開発の進め方 1 開発手法 開発サイクル ブランチ戦略 2 1 3 1
3
47 開発の進め方 1 開発手法 開発サイクル ブランチ戦略 1 1 3 2
48 CONFIDENTIAL - © 2022 CoDMON Inc. 48 実際にどんな感じでやっているのか:開発の進め方 システムのアーキテクチャだけでなく、
開発手法でもユーザーに安定して価値を 届け続けることにアプローチしたかった
49 CONFIDENTIAL - © 2022 CoDMON Inc. 49 実際にどんな感じでやっているのか:開発の進め方 エクストリームプログラミング(XP)を
取り入れながら行いました
50 CONFIDENTIAL - © 2022 CoDMON Inc. 50 実際にどんな感じでやっているのか:開発の進め方 プラクティス
人間性 経済性 相互利益 自己相似性 改善 ふりかえり 流れ 機会 冗長性 失敗 品質 ベイビーステップ 責任の引き受け 多様性 チーム全体 計画ゲーム 小さなリリース 受け入れテスト 共同所有 持続可能なペース メタファー 継続的インテグレーション テスト駆動開発 ペアプログラミング リファクタリング シンプルな設計 価値 コミュニケーション シンプリシティ フィードバック 勇気 リスペクト 原則
51 CONFIDENTIAL - © 2022 CoDMON Inc. 51 実際にどんな感じでやっているのか:開発の進め方 Robert
C.Martin (著), 角 征典 (翻訳), 角谷 信太郎 (翻訳) 「Clean Agile 基本に立ち戻れ」KADOKAWA 47ページ
52 CONFIDENTIAL - © 2022 CoDMON Inc. 52 実際にどんな感じでやっているのか:開発の進め方 Robert
C.Martin (著), 角 征典 (翻訳), 角谷 信太郎 (翻訳) 「Clean Agile 基本に立ち戻れ」KADOKAWA 47ページ • 全てのプラクティスを取り入れる • 守破離の守を大切にする “一度にひとつだけのプラクティスを選んでも改善は見られるだろう。 だが、組み合わせて使うようになれば、劇的な改善が見られるはずだ。 プラクティスの相互作用が、その効果を増幅させるのである。” Kent Beck, Cynthia Andres, 角 征典(訳) 「エクストリーム・プログラミング」オーム社 34 ページ
53 CONFIDENTIAL - © 2022 CoDMON Inc. 53 実際にどんな感じでやっているのか:開発の進め方 Robert
C.Martin (著), 角 征典 (翻訳), 角谷 信太郎 (翻訳) 「Clean Agile 基本に立ち戻れ」KADOKAWA 47ページ • 全てのプラクティスを取り入れる • 守破離の守を大切にする “一度にひとつだけのプラクティスを選んでも改善は見られるだろう。 だが、組み合わせて使うようになれば、劇的な改善が見られるはずだ。 プラクティスの相互作用が、その効果を増幅させるのである。” Kent Beck, Cynthia Andres, 角 征典(訳) 「エクストリーム・プログラミング」オーム社 34 ページ
54 開発の進め方 開発手法 開発サイクル ブランチ戦略 2 1 3
55 CONFIDENTIAL - © 2022 CoDMON Inc. 55 実際にどんな感じでやっているのか:開発の進め方 ユーザーストーリーの
受け入れ条件について 認識を合わせる ペアでTDDを 実践しながら進める リモートリポジトリにPush ローカルでテストが 通ることを確認 受け入れテストを記述 CI上でテスト実行 ステージング環境で確認 サイクルを回し続ける 本番環境にデプロイ
56 CONFIDENTIAL - © 2022 CoDMON Inc. 56 実際にどんな感じでやっているのか:開発の進め方 ユーザーストーリーの
受け入れ条件について 認識を合わせる ペアでTDDを 実践しながら進める リモートリポジトリにPush ローカルでテストが 通ることを確認 受け入れテストを記述 CI上でテスト実行 ステージング環境で確認 サイクルを回し続ける 本番環境にデプロイ
57 開発の進め方 開発手法 開発サイクル ブランチ戦略 1 3 3 2
58 CONFIDENTIAL - © 2022 CoDMON Inc. 58 実際にどんな感じでやっているのか:開発の進め方 トランクベース開発
59 CONFIDENTIAL - © 2022 CoDMON Inc. 59 実際にどんな感じでやっているのか:開発の進め方 https://cloud.google.com/architecture/devops/devops-tech-trunk-based-development
60 CONFIDENTIAL - © 2022 CoDMON Inc. 60 実際にどんな感じでやっているのか:開発の進め方 •
開発する時の運用がシンプルに ◦ コンフリクトを早めに検知できる(修正も小さい) ◦ Mainブランチをpullしてくればよいという状況が作れる トランクベース開発によるメリット
61 CONFIDENTIAL - © 2022 CoDMON Inc. 61 実際にどんな感じでやっているのか:開発の進め方 トランクベース開発
ペアプログラミング 常にソースコードがレビューされている テスト駆動開発 コードがシンプルでテストが存在して いる 受け入れテスト ストーリー毎の受け入れ条件を定義している 継続的インテグレーション 頻繁に統合し、テストが通るか確認している
62 CONFIDENTIAL - © 2022 CoDMON Inc. 62 実際にどんな感じでやっているのか 事例紹介:資料管理サービス
63 CONFIDENTIAL - © 2022 CoDMON Inc. 63 実際にどんな感じでやっているのか:事例紹介 資料管理サービス
保護者向けサービス 施設向けサービス
64 CONFIDENTIAL - © 2022 CoDMON Inc. 64 実際にどんな感じでやっているのか:事例紹介 EC2
保護者向けサービス Amazon Aurora モノリス EC2 施設向けサービス Amazon S3
65 CONFIDENTIAL - © 2022 CoDMON Inc. 65 実際にどんな感じでやっているのか:事例紹介 EC2
保護者向けサービス Amazon Aurora モノリス EC2 施設向けサービス Amazon Aurora 新サービス ECS Fargate 資料管理サービス Amazon S3 Amazon S3 Amazon S3 Amazon CloudFront
66 CONFIDENTIAL - © 2022 CoDMON Inc. 66 実際にどんな感じでやっているのか:事例紹介 EC2
保護者向けサービス Amazon Aurora モノリス EC2 施設向けサービス Amazon Aurora 新サービス ECS Fargate 資料管理サービス AWS Fargate Amazon SQS Publisher Subscriber データ同期バッチ Amazon S3 Amazon S3 Amazon S3 AWS Fargate Amazon CloudFront
67 CONFIDENTIAL - © 2022 CoDMON Inc. 67 実際にどんな感じでやっているのか:事例紹介 EC2
保護者向けサービス Amazon Aurora モノリス EC2 施設向けサービス Amazon Aurora 新サービス ECS Fargate 資料管理サービス AWS Fargate Amazon SQS Publisher Subscriber データ同期バッチ Amazon S3 Amazon S3 Amazon S3 AWS Fargate Amazon CloudFront
68 CONFIDENTIAL - © 2022 CoDMON Inc. 68 実際にどんな感じでやっているのか:事例紹介 技術スタック
69 CONFIDENTIAL - © 2022 CoDMON Inc. 69 実際にどんな感じでやっているのか:事例紹介 バックエンド
Kotlin 扱うドメインを型で表現できる 初導入ではあるが、メンバーの経験があった E2Eテスト Gauge + Playwright 仕様をマークダウン形式で表現できる Chrome + FireFox + Safariのテストができる CI/CD GitHub Actions インフラ ECS 容易にスケールできる Dockerとの相性 フロントエンド Nuxt.js 社内にナレッジが溜まっていた フロントで新しい技術を取り入れるのは リスクが高いと判断 技術スタック
70 CONFIDENTIAL - © 2022 CoDMON Inc. 70 実際にどんな感じでやっているのか:事例紹介 リプレイスのアプローチ
71 CONFIDENTIAL - © 2022 CoDMON Inc. 71 実際にどんな感じでやっているのか:事例紹介 •
現行システムと疎結合にしたい • ビッグバンリリースを避けたい • リプレイス後のプロダクトは容易に運用できるように • 今回はAPI・DB・フロントを切り出しました リプレイスのアプローチ
72 CONFIDENTIAL - © 2022 CoDMON Inc. 72 実際にどんな感じでやっているのか:事例紹介 リプレイスのアプローチ
リリースしてからユーザーに数年使っていただいていたため、 何が真に求められるかが解像度高くわかっていた
73 CONFIDENTIAL - © 2022 CoDMON Inc. 73 実際にどんな感じでやっているのか:事例紹介 APIとDBのみを移行する選択肢もありましたが、資料サービスに関して
は変えたい仕様があり、このタイミングで変えたほうがリプレイス後に 変えるより効率的だと判断しました。 リプレイスのアプローチ リリースしてからユーザーに数年使っていただいていたため、 何が真に求められるかが解像度高くわかっていた
74 CONFIDENTIAL - © 2022 CoDMON Inc. 74 実際にどんな感じでやっているのか:事例紹介 Strangler
pattern
75 CONFIDENTIAL - © 2022 CoDMON Inc. 75 実際にどんな感じでやっているのか:事例紹介 Strangler
patternとは • 移行対象のサービスを稼働させつつ、 横で代行となるサービスを構築する • 並行稼働しながら徐々に 新サービスに切り替える https://microservices.io/patterns/refactoring/strangler-application.html
76 CONFIDENTIAL - © 2022 CoDMON Inc. 76 実際にどんな感じでやっているのか:事例紹介 •
最初から本番環境へ小さくリリースすることができる トラフィックを切り替えるまで影響がない Strangler patternのメリット
77 CONFIDENTIAL - © 2022 CoDMON Inc. 77 実際にどんな感じでやっているのか:事例紹介 •
最初から本番環境へ小さくリリースすることができる トラフィックを切り替えるまで影響がない Strangler patternのメリット
78 CONFIDENTIAL - © 2022 CoDMON Inc. 78 実際にどんな感じでやっているのか:事例紹介 •
カナリアリリース 徐々に実際のユーザーにリリースできる Strangler patternのメリット
79 CONFIDENTIAL - © 2022 CoDMON Inc. 79 実際にどんな感じでやっているのか:事例紹介 •
カナリアリリース 徐々に実際のユーザーにリリースできる Strangler patternのメリット
80 CONFIDENTIAL - © 2022 CoDMON Inc. 80 実際にどんな感じでやっているのか:事例紹介 •
カナリアリリース 徐々に実際のユーザーにリリースできる Strangler patternのメリット
81 CONFIDENTIAL - © 2022 CoDMON Inc. 81 実際にどんな感じでやっているのか:事例紹介 •
フェイルセーフ 新規サービスで問題が発覚したら、 旧サービスにすぐにロールバックできる Strangler patternのメリット
82 CONFIDENTIAL - © 2022 CoDMON Inc. 82 実際にどんな感じでやっているのか:事例紹介 •
フェイルセーフ 新規サービスで問題が発覚したら、 旧サービスにすぐにロールバックできる Strangler patternのメリット
83 CONFIDENTIAL - © 2022 CoDMON Inc. 83 実際にどんな感じでやっているのか:事例紹介 各レイヤーの詳細をお話ししていきます
84 CONFIDENTIAL - © 2022 CoDMON Inc. 84 実際にどんな感じでやっているのか:事例紹介 •
データマイグレーション • 施設向けサービス • 保護者アプリ
85 CONFIDENTIAL - © 2022 CoDMON Inc. 85 実際にどんな感じでやっているのか:事例紹介 データマイグレーション
86 CONFIDENTIAL - © 2022 CoDMON Inc. 86 実際にどんな感じでやっているのか:事例紹介 •
ストック型のサービス、蓄積された過去の資料を 閲覧・編集できる必要がある データマイグレーションが必要な理由
87 CONFIDENTIAL - © 2022 CoDMON Inc. 87 実際にどんな感じでやっているのか:事例紹介 •
ストック型のサービス、蓄積された過去の資料を 閲覧・編集できる必要がある • 過去の資料は旧データベースを見るという選択肢もあったが、 サービスの関係は疎結合にしたかった データマイグレーションが必要な理由
88 CONFIDENTIAL - © 2022 CoDMON Inc. 88 実際にどんな感じでやっているのか:事例紹介 EC2
保護者向けサービス Amazon Aurora モノリス EC2 施設向けサービス Amazon S3 Amazon Aurora 新サービス ECS Fargate 資料管理サービス Amazon S3 Amazon S3 Amazon CloudFront
89 CONFIDENTIAL - © 2022 CoDMON Inc. 89 実際にどんな感じでやっているのか:事例紹介 EC2
保護者向けサービス Amazon Aurora モノリス EC2 施設向けサービス Amazon Aurora 新サービス ECS Fargate 資料管理サービス Amazon S3 Amazon S3 Amazon S3 Amazon CloudFront
90 CONFIDENTIAL - © 2022 CoDMON Inc. 90 実際にどんな感じでやっているのか:事例紹介 EC2
保護者向けサービス Amazon Aurora モノリス EC2 施設向けサービス AWS Fargate Amazon SQS Publisher Subscriber データ同期バッチ Amazon S3 AWS Fargate Amazon Aurora 新サービス ECS Fargate 資料管理サービス Amazon S3 Amazon S3 Amazon CloudFront
91 CONFIDENTIAL - © 2022 CoDMON Inc. 91 実際にどんな感じでやっているのか:事例紹介 Amazon
Aurora 新サービス ECS Fargate 資料管理サービス Amazon S3 Amazon S3 EC2 保護者向けサービス Amazon Aurora モノリス EC2 施設向けサービス AWS Fargate Amazon SQS Publisher Subscriber データ同期バッチ Amazon S3 AWS Fargate Amazon CloudFront
92 CONFIDENTIAL - © 2022 CoDMON Inc. 92 実際にどんな感じでやっているのか:事例紹介 マイグレーションの検証
93 CONFIDENTIAL - © 2022 CoDMON Inc. 93 実際にどんな感じでやっているのか:事例紹介 テストの概要
自動テスト(Gauge)+手動テストで移行バッチを担保する テスト観点 自動テスト • 移行したデータがS3やDBに入っているか • 資料の状態の組み合わせなど網羅的に確認 • 移行失敗によるロールバックの確認 手動テスト • データ移行前後の表示崩れがないかを確認 • 移行バッチ実行による負荷のテスト • 各種設定の確認(SQS,Datadog(log)など)
94 CONFIDENTIAL - © 2022 CoDMON Inc. 94 実際にどんな感じでやっているのか:事例紹介 自動テスト実行構成(ローカル)
Amazon SQS Amazon S3 Spring Batch 旧DB 新DB 旧 新
95 CONFIDENTIAL - © 2022 CoDMON Inc. 95 実際にどんな感じでやっているのか:事例紹介 自動テスト実行構成(ローカル)
Amazon SQS Amazon S3 Spring Batch 旧DB 新DB 旧 新
96 CONFIDENTIAL - © 2022 CoDMON Inc. 96 実際にどんな感じでやっているのか:事例紹介 自動テスト実行構成(ローカル)
Amazon SQS Amazon S3 Spring Batch 旧DB 新DB 旧 新
97 CONFIDENTIAL - © 2022 CoDMON Inc. 97 実際にどんな感じでやっているのか:事例紹介 自動テスト実行構成(ローカル)
Amazon SQS Amazon S3 Spring Batch 旧DB 新DB 旧 新
98 CONFIDENTIAL - © 2022 CoDMON Inc. 98 実際にどんな感じでやっているのか:事例紹介 自動テスト実行構成(ローカル)
Amazon SQS Amazon S3 Spring Batch 旧DB 新DB 旧 新
99 CONFIDENTIAL - © 2022 CoDMON Inc. 99 実際にどんな感じでやっているのか:事例紹介 自動テスト実行構成(ローカル)
Amazon SQS Amazon S3 Spring Batch 旧DB 新DB 旧 新
100 CONFIDENTIAL - © 2022 CoDMON Inc. 100 実際にどんな感じでやっているのか:事例紹介
101 CONFIDENTIAL - © 2022 CoDMON Inc. 101 実際にどんな感じでやっているのか:事例紹介 •
アプリのリリースと独立できる 同期状態にして嬉しかったこと
102 CONFIDENTIAL - © 2022 CoDMON Inc. 102 実際にどんな感じでやっているのか:事例紹介 •
アプリのリリースと独立できる • システムをメンテナンスモードにする必要がない 同期状態にして嬉しかったこと
103 CONFIDENTIAL - © 2022 CoDMON Inc. 103 実際にどんな感じでやっているのか:事例紹介 •
アプリのリリースと独立できる • システムをメンテナンスモードにする必要がない • 旧サービスと新サービスの並行稼働が可能になった 同期状態にして嬉しかったこと
104 CONFIDENTIAL - © 2022 CoDMON Inc. 104 実際にどんな感じでやっているのか:事例紹介 施設向けサービス
105 CONFIDENTIAL - © 2022 CoDMON Inc. 105 実際にどんな感じでやっているのか:事例紹介 EC2
保護者向けサービス Amazon Aurora モノリス EC2 施設向けサービス Amazon S3 移行前 Amazon Aurora 新サービス ECS Fargate 資料管理サービス Amazon S3 Amazon S3 Amazon CloudFront
106 CONFIDENTIAL - © 2022 CoDMON Inc. 106 実際にどんな感じでやっているのか:事例紹介 Amazon
Aurora 新サービス ECS Fargate 資料管理サービス Amazon S3 Amazon S3 EC2 保護者向けサービス Amazon Aurora モノリス EC2 施設向けサービス Amazon S3 移行後 Amazon CloudFront
107 CONFIDENTIAL - © 2022 CoDMON Inc. 107 実際にどんな感じでやっているのか:事例紹介 •
フィーチャーフラグ 社内ユーザーのみが見えるようにし、本番に継続的にデプロイしていく 施設向けサービス並行稼働
108 CONFIDENTIAL - © 2022 CoDMON Inc. 108 実際にどんな感じでやっているのか:事例紹介 •
フィーチャーフラグ 社内ユーザーのみが見えるようにし、本番に継続的にデプロイしていく 施設向けサービス並行稼働 featureName hoge fuga
109 CONFIDENTIAL - © 2022 CoDMON Inc. 109 実際にどんな感じでやっているのか:事例紹介 •
カナリアリリース 失敗したとしても小さく失敗するように 施設向けサービス並行稼働
110 CONFIDENTIAL - © 2022 CoDMON Inc. 110 実際にどんな感じでやっているのか:事例紹介 •
カナリアリリース 失敗したとしても小さく失敗するように 施設向けサービス並行稼働 betaFacilities 1 2
111 CONFIDENTIAL - © 2022 CoDMON Inc. 111 実際にどんな感じでやっているのか:事例紹介 保護者アプリ
112 CONFIDENTIAL - © 2022 CoDMON Inc. 112 実際にどんな感じでやっているのか:事例紹介 Amazon
Aurora 新サービス ECS Fargate 資料管理サービス Amazon S3 Amazon S3 EC2 保護者向けサービス Amazon Aurora モノリス EC2 施設向けサービス Amazon S3 移行前 Amazon CloudFront モバイル アプリ
113 CONFIDENTIAL - © 2022 CoDMON Inc. 113 実際にどんな感じでやっているのか:事例紹介 Amazon
Aurora 新サービス ECS Fargate 資料管理サービス Amazon S3 Amazon S3 Amazon Aurora モノリス Amazon S3 移行後 Amazon CloudFront EC2 保護者向けサービス EC2 施設向けサービス モバイル アプリ
114 CONFIDENTIAL - © 2022 CoDMON Inc. 114 実際にどんな感じでやっているのか:事例紹介 •
フィーチャーフラグ フィーチャーフラグを利用し、 アプリリリースを行わずにロールバックできるように • フェイルセーフ 新画面でエラーが発生した際は、旧画面を見れるように • 段階リリース AppleとAndroidの機能を利用して実施 安全なリリースに向けて
115 CONFIDENTIAL - © 2022 CoDMON Inc. 115 実際にどんな感じでやっているのか:事例紹介 •
フェイルセーフ ◦ 500エラーが発生した時にそれをユーザー に知らせ、旧画面への遷移を用意 安全なリリースに向けて
116 CONFIDENTIAL - © 2022 CoDMON Inc. 116 実際にどんな感じでやっているのか:事例紹介 •
データマイグレーション 並行運用できるようにデータ同期を行った。網羅性の高い自動テストがあることで、 不具合修正や細かな仕様変更に対し、回帰的なテストが行えた • 施設向けサービス 常時同期でデータ移行をしていたため、新旧サービスを並行稼働させることができ、 一気に移行するということを回避したカナリアリリースを行い、 少しずつ適応施設を増やしていった • 保護者アプリ フィーチャーフラグ・フェイルセーフ・段階リリースを利用し、 安全を担保した状態でリリース まとめ
117 CONFIDENTIAL - © 2022 CoDMON Inc. 117 実際にどんな感じでやっているのか:事例紹介 リプレイスした結果
118 CONFIDENTIAL - © 2022 CoDMON Inc. 118 実際にどんな感じでやっているのか:事例紹介 •
Aを修正したら関係ないと考えていたBに影響が出る • 複数ブランチ運用による複雑度の増加 • リリース後に1箇所デグレが起きると全てが戻ってしまう • リリース調整のチーム間コミュニケーションの増加 • どこか一箇所に問題があると、システム全体に波及してしまう
119 CONFIDENTIAL - © 2022 CoDMON Inc. 119 実際にどんな感じでやっているのか:事例紹介 •
Aを修正したら関係ないと考えていたBに影響が出る →影響は資料サービス内に閉じている • 複数ブランチ運用による複雑度の増加 →トランクベース開発による複雑度の低下 • リリース後に1箇所デグレが起きると全てが戻ってしまう →他のサービスの影響を受けない • リリース調整のチーム間コミュニケーションの増加 →独立してデプロイできる • どこか一箇所に問題があると、システム全体に波及してしまう →資料サービス内だけに閉じており、他の影響も受けない
120 本日話す内容 なぜマイクロサービスアーキテクチャへ移行しているか • 取り組んでいる理由 • 移行戦略 実際にどんな感じでやっているのか • 開発の進め方(XP)
• 事例紹介:資料管理サービスの移行 やってみての感想・学び これからについて 2 4 3 1
121 CONFIDENTIAL - © 2022 CoDMON Inc. 121 やってみての感想・学び •
XP導入による恩恵 資料サービスは安全に素早くリリースができる状態になった。 ペアプログラミングにより属人化がなくなり、 メンバーそれぞれが得意分野で力を発揮しつつ、他の分野においても成長できた。 • 自動テストを初期から入れたので安全に進めることができた テスト作成に時間を投資し続けることについては、強い気持ちが必要。 途中で書かないほうが早いのではと感じる時が来たりする。 (今はチームメンバ全員が書いて良かったと思っています) • 既存サービスとの関わりが難しい 既存サービスの仕様や制約の調査を行うことが大切。 リプレイスがユーザーの業務に影響を与えないように、トラブルがあった場合もすぐに切り戻せ る体制を作っておく。 • 初動の加速が重要 初めて作成する基盤が多かったこともあり、プロジェクト完了に8ヶ月間を費やした。 今回の経験を蓄えたイネイブリングチームを作ることで、次回以降の初動を早めていきたい。
122 CONFIDENTIAL - © 2022 CoDMON Inc. 122 やってみての感想・学び •
XP導入による恩恵 資料サービスは安全に素早くリリースができる状態になった。 ペアプログラミングにより属人化がなくなり、 メンバーそれぞれが得意分野で力を発揮しつつ、他の分野においても成長できた。 • 自動テストを初期から入れたので安全に進めることができた テスト作成に時間を投資し続けることについては、強い気持ちが必要。 途中で書かないほうが早いのではと感じる時が来たりする。 (今はチームメンバ全員が書いて良かったと思っています) • 既存サービスとの関わりが難しい 既存サービスの仕様や制約の調査を行うことが大切。 リプレイスがユーザーの業務に影響を与えないように、トラブルがあった場合もすぐに切り戻せ る体制を作っておく。 • 初動の加速が重要 初めて作成する基盤が多かったこともあり、プロジェクト完了に8ヶ月間を費やした。 今回の経験を蓄えたイネイブリングチームを作ることで、次回以降の初動を早めていきたい。
123 CONFIDENTIAL - © 2022 CoDMON Inc. 123 やってみての感想・学び •
XP導入による恩恵 資料サービスは安全に素早くリリースができる状態になった。 ペアプログラミングにより属人化がなくなり、 メンバーそれぞれが得意分野で力を発揮しつつ、他の分野においても成長できた。 • 自動テストを初期から入れたので安全に進めることができた テスト作成に時間を投資し続けることについては、強い気持ちが必要。 途中で書かないほうが早いのではと感じる時が来たりする。 (今はチームメンバ全員が書いて良かったと思っています) • 既存サービスとの関わりが難しい 既存サービスの仕様や制約の調査を行うことが大切。 リプレイスがユーザーの業務に影響を与えないように、トラブルがあった場合もすぐに切り戻せ る体制を作っておく。 • 初動の加速が重要 初めて作成する基盤が多かったこともあり、プロジェクト完了に8ヶ月間を費やした。 今回の経験を蓄えたイネイブリングチームを作ることで、次回以降の初動を早めていきたい。
124 CONFIDENTIAL - © 2022 CoDMON Inc. 124 やってみての感想・学び •
XP導入による恩恵 資料サービスは安全に素早くリリースができる状態になった。 ペアプログラミングにより属人化がなくなり、 メンバーそれぞれが得意分野で力を発揮しつつ、他の分野においても成長できた。 • 自動テストを初期から入れたので安全に進めることができた テスト作成に時間を投資し続けることについては、強い気持ちが必要。 途中で書かないほうが早いのではと感じる時が来たりする。 (今はチームメンバ全員が書いて良かったと思っています) • 既存サービスとの関わりが難しい 既存サービスの仕様や制約の調査を行うことが大切。 リプレイスがユーザーの業務に影響を与えないように、トラブルがあった場合もすぐに切り戻せ る体制を作っておく。 • 初動の加速が重要 初めて作成する基盤が多かったこともあり、プロジェクト完了に8ヶ月間を費やした。 今回の経験を蓄えたイネイブリングチームを作ることで、次回以降の初動を早めていきたい。
125 CONFIDENTIAL - © 2022 CoDMON Inc. 125 やってみての感想・学び •
XP導入による恩恵 資料サービスは安全に素早くリリースができる状態になった。 ペアプログラミングにより属人化がなくなり、 メンバーそれぞれが得意分野で力を発揮しつつ、他の分野においても成長できた。 • 自動テストを初期から入れたので安全に進めることができた テスト作成に時間を投資し続けることについては、強い気持ちが必要。 途中で書かないほうが早いのではと感じる時が来たりする。 (今はチームメンバ全員が書いて良かったと思っています) • 既存サービスとの関わりが難しい 既存サービスの仕様や制約の調査を行うことが大切。 リプレイスがユーザーの業務に影響を与えないように、トラブルがあった場合もすぐに切り戻せ る体制を作っておく。 • 初動の加速が重要 初めて作成する基盤が多かったこともあり、プロジェクト完了に8ヶ月間を費やした。 今回の経験を蓄えたイネイブリングチームを作ることで、次回以降の初動を早めていきたい。
126 本日話す内容 なぜマイクロサービスアーキテクチャへ移行しているか • 取り組んでいる理由 • 移行戦略 実際にどんな感じでやっているのか • 開発の進め方(XP)
• 事例紹介:資料管理サービスの移行 やってみての感想・学び これからについて 2 1 4 3
127 CONFIDENTIAL - © 2022 CoDMON Inc. 127 これからについて ドメイン複雑度
モバイルリリース データ移行 他サービス依存度 シフト 高 無 無 低 資料 低 有 有 低 ???(next…) 高 有 有 高
128 CONFIDENTIAL - © 2022 CoDMON Inc. 128 これからについて •
複雑なトランザクションの管理 • マイクロサービス間の連携自動テスト(CDC) • 初動の高速化(イネイブリングチーム) • リプレイスの複線化
129 CONFIDENTIAL - © 2022 CoDMON Inc. 129 これからについて 「ユーザーに安定して素早く価値を届け続ける」
が実現できるまで取り組んで行きます
130 ちなみに
131 CONFIDENTIAL - © 2022 CoDMON Inc. 131 なぜマイクロサービスアーキテクチャへ移行しているか 「ユーザーに安定して素早く価値を届け続ける」
132 CONFIDENTIAL - © 2022 CoDMON Inc. 132 なぜマイクロサービスアーキテクチャへ移行しているか 「ユーザーに安定して素早く価値を届け続ける」
マイクロサービスだけでなく、 モノリスのリファクタリングや モジュラーモノリス化も進めています そのために
133 CONFIDENTIAL - © 2022 CoDMON Inc. 133 なぜマイクロサービスアーキテクチャへ移行しているか https://tech.codmon.com/ent
ry/2022/06/28/134446 https://speakerdeck.com/co dmoninc/ji-shu-de-fu-zhai-ni xiang-kihe-isok-keruzi-shi-h asukirufu-noguang-garinimox i-garuhua
134 コドモン採用ページ 開発ブログ コドモンでは一緒に働きたい仲間を募集しています!
135 ご清聴ありがとうございました!
None