Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
歴史あるプロダクトにマイクロサービスを導入するプロセス
Search
kikuchia
September 18, 2024
Technology
4.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
歴史あるプロダクトにマイクロサービスを導入するプロセス
一休×AEON 事業会社のサービスを支える基盤開発トーク の登壇資料です
https://ikyu.connpass.com/event/327095/
kikuchia
September 18, 2024
Other Decks in Technology
See All in Technology
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
130
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
3
2k
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
1
330
20260912_スクラムにジェネラリストは必要か
ryugen04
0
310
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
1
240
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
300
家のリアーキテクト・リファクタリング
suguruooki
0
100
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
150
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
310
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.4k
コーディングエージェントでM5Stack系の開発を少し試した時の話 / M5 Japan Tour 2026 Autumn 東京
you
PRO
0
140
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
650
Featured
See All Featured
Between Models and Reality
mayunak
4
450
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Curious Case for Waylosing
cassininazir
1
500
Un-Boring Meetings
codingconduct
0
410
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
202
76k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Side Projects
sachag
456
43k
Skip the Path - Find Your Career Trail
mkilby
1
220
Writing Fast Ruby
sferik
630
63k
Transcript
0 歴史あるプロダクトにマイクロサービスを導⼊するプロセス 2024/09/18
1 ⾃⼰紹介 - 2021年2⽉に⼀休に⼊社、⼀休.comの開発に 従事 - ⼀休.com ふるさと納税の新規開発に参加 - プロダクトを離れ、マイクロサービス担当と
して⼀休ポイントサービス∕会員サービスの 開発、導⼊に携わっています 菊地 彩夏 Kikuchi Ayaka
2 本⽇のアジェンダ 1. プロダクトの歴史から⾒る⼀休の課題 2. 既存プロダクトにマイクロサービスを導⼊するプロセス 3. マイクロサービス導⼊の事例紹介 4. まとめ
3 1. プロダクトの歴史から⾒る⼀休の課題
4 プロダクトの歴史から⾒る⼀休の課題 2000 2006 2011 会員 ポイント 決済 会員 ポイント
決済 会員 ポイント 決済 共通的な機能が各プロダクトにべた書き ⇒プロダクトエンジニアの範疇が広い 全プロダクトが共通データにアクセス ⇒1つのプロダクトのミスが全プロダクト に波及するリスクが⾼まる
5 プロダクトの歴史から⾒る⼀休の課題 2000 2006 2011 2022 2024 会員 ポイント 決済
会員 ポイント 決済 会員 ポイント 決済 共通的な機能が各プロダクトにべた書き ⇒プロダクトエンジニアの範疇が広い 全プロダクトが共通データにアクセス ⇒1つのプロダクトのミスが全プロダクト に波及するリスクが⾼まる 新規プロダクト開発のたびに 負債が増えていく負のループへ ⇒プロダクト⽴ち上げコストが⾼い体質 ⇒共通データにアクセスするという インフラ的制約が課される 2023
6 会員‧ポイント‧決済のマイクロサービス化へ 2000 2006 2011 2022 2024 会員サービス 2023 ポイントサービス
決済サービス
7 会員‧ポイント‧決済のマイクロサービス化へ 2000 2006 2011 2022 2024 会員サービス 2023 ポイントサービス
決済サービス 2022〜 新規プロダクト開発について マイクロサービス導⼊が完了 プロダクト⽴ち上げ時の ⾼コスト体質が改善できました 済
8 会員‧ポイント‧決済のマイクロサービス化へ 2000 2006 2011 2022 2024 会員サービス 2023 ポイントサービス
決済サービス 次は既存プロダクトに マイクロサービスを導⼊へ 今⽇は⼀休.com レストランに ポイントサービス、会員サービスを 導⼊したときの話をしたいと思います!
9 2. 既存プロダクトにマイクロサービスを導⼊するプロセス
10 ⼀休.comレストランへのマイクロサービス導⼊に⽴ちはだかった課題 過去の機能が削除されておらず マイクロサービスの置き換え対象の特定が 困難 導⼊の前に デッドコード削除‧ 既存実装の調査 を⾏うことに
11 既存プロダクトにマイクロサービスを導⼊するプロセス STEP 1.デッドコード削除‧現⾏仕様の調査 - デッドコードを削除(2か⽉で10機能/4,700⾏削除) - コードベースが⾒通しやすくなった - 実際に⼿を動かしたことで、実装のキャッチアップがスムーズになった
12 既存プロダクトにマイクロサービスを導⼊するプロセス STEP 1.デッドコード削除‧現⾏仕様の調査 - デッドコードを削除(2か⽉で10機能/4,700⾏削除) - コードベースが⾒通しやすくなった - 実際に⼿を動かしたことで、実装のキャッチアップがスムーズになった
- マイクロサービスに切り替える実装に他プロダクトとの仕様ずれを発⾒した - 調査の結果、不必要な仕様差分であることがわかった - カスタマーサポート部に確認したところ、プロダクト間の仕様差分をふまえて 問い合わせ対応をしているため業務が煩雑になっている状態だった - プロダクト間の仕様ずれがシステム外の業務負荷をあげてしまっていた
13 既存プロダクトにマイクロサービスを導⼊するプロセス STEP 1.デッドコード削除‧現⾏仕様の調査 - デッドコードを削除(2か⽉で10機能/4,700⾏削除) - マイクロサービスに切り替える実装に他プロダクトとの仕様ずれを発⾒した - 調査の結果、不必要な仕様差分であることがわかった
- カスタマーサポート部に確認したところ、プロダクト間の仕様差分を把握したうえで 問い合わせ対応をしているため業務がややこしくなっている状態だった ⼀休では、既存プロダクトにマイクロサービスを導⼊することで 「仕様の共通化によるシステム外の業務負荷(認知コスト)の解消」 という価値を得ることができた - 関係各部署(カスタマーサポート部、営業部)と調整して、共通的な仕様に変更した ⇒システム外で発⽣していた認知コストの削減につながった STEP 2.マイクロサービス化部分の不必要な仕様ずれの調整 - 関係者(カスタマーサポート部、営業部)と調整して、共通的な仕様に変更した ⇒システム外で発⽣していた認知コストの削減につながった
14 既存プロダクトにマイクロサービスを導⼊するプロセス STEP 1.デッドコード削除‧現⾏仕様の調査 - デッドコードを削除(2か⽉で10機能/4,700⾏削除) - マイクロサービスに切り替える実装に他プロダクトとの仕様ずれを発⾒した - 調査の結果、不必要な仕様差分であることがわかった
- カスタマーサポート部に確認したところ、プロダクト間の仕様差分を把握したうえで 問い合わせ対応をしているため業務がややこしくなっている状態だった ⼀休では、既存プロダクトにマイクロサービスを導⼊することで 「仕様の共通化によるシステム外の業務負荷(認知コスト)の解消」 という価値を得ることができた - 関係各部署(カスタマーサポート部、営業部)と調整して、共通的な仕様に変更した ⇒システム外で発⽣していた認知コストの削減につながった STEP 2.マイクロサービス化部分の不必要な仕様ずれの調整 - 関係各部署(カスタマーサポート部、営業部)と調整して、共通的な仕様に変更した ⇒システム外で発⽣していた認知コストの削減につながった 当初想定していなかった成果 ⼀休では、既存プロダクトにマイクロサービスを導⼊することで 「仕様の共通化によるシステム外の認知コストの削減」という 価値を得ることができた
15 既存プロダクトにマイクロサービスを導⼊するプロセス STEP 1.デッドコード削除‧現⾏仕様の調査 - デッドコードを削除(2か⽉で10機能/4,700⾏削除) - マイクロサービスに切り替える実装に他プロダクトとの仕様ずれを発⾒した - 調査の結果、不必要な仕様差分であることがわかった
- カスタマーサポート部に確認したところ、プロダクト間の仕様差分を把握したうえで 問い合わせ対応をしているため業務がややこしくなっている状態だった ⼀休では、既存プロダクトにマイクロサービスを導⼊することで 「仕様の共通化によるシステム外の業務負荷(認知コスト)の解消」 という価値を得ることができた - 関係各部署(カスタマーサポート部、営業部)と調整して、共通的な仕様に変更した ⇒システム外で発⽣していた認知コストの削減につながった STEP 2.マイクロサービス化部分の不必要な仕様ずれの調整 - 関係各部署(カスタマーサポート部、営業部)と調整して、共通的な仕様に変更した ⇒システム外で発⽣していた認知コストの削減につながった 当初想定していなかった成果 ⼀休では、既存プロダクトにマイクロサービスを導⼊することで 「仕様の共通化によるシステム外の認知コストの削減」という 価値を得ることができた - 関係各部署(カスタマーサポート部、営業部)と調整して、共通的な仕様に変更した ⇒システム外で発⽣していた認知コストの削減につながった STEP 3.マイクロサービス導入 - マイクロサービス化に伴って、整合性担保の仕組み(⾮同期連携)を実装
16 3. マイクロサービス導⼊の事例紹介
17 ⼀休.com レストランからマイクロサービスの呼び出し事例 予約メイン処理 Amazon EKS 予約時に、 ⼀休ポイントを100ポイント獲得 対象ユーザに ⼀休ポイントを付与
予約キャンセル時に、 ⼀休ポイントの獲得を取消 ⼀休ポイント付与の 取消 ポイントサービス Cloud Run
18 ⼀休.com レストランからマイクロサービスの呼び出し事例 予約メイン処理 Amazon EKS ポイントサービス Cloud Run 同期的に呼び出すと
- ユーザへのレスポンスに時間がかかってしまう - ポイントサービスで障害が起きると予約処理が停⽌してしまう
19 マイクロサービスとの⾮同期連携のアーキテクチャ キューイング サービス Cloud Tasks ワーカー Cloud Run マイクロサービス
Cloud Run 予約メイン処理 Amazon EKS ※将来的に Google Cloudに移⾏予定 マイクロサービスの呼び出し処理を 予約メイン処理から切り出して 成功するまでリトライする仕組みに 予約キャンセル時に ポイント獲得の取消タスクを エンキュー ポイントマイクロサービスに リクエストする ⼀休ポイント付与の取消
20 マイクロサービスとの⾮同期連携のアーキテクチャ キューイング サービス Cloud Tasks ワーカー Cloud Run マイクロサービス
Cloud Run 予約メイン処理 Amazon EKS ⾮同期連携にしたことの課題(要件) - 発⽣した順番にイベントを処理したい - 単⼀予約に対しN回の操作が 起 こりうる - マイクロサービス側に履歴を持ちたい データベースで予約‧ワーカーイベント を管理 予約 イベント ワーカー イベント Write Write Read
21 マイクロサービスとの⾮同期連携のアーキテクチャ キューイング サービス Cloud Tasks ワーカー Cloud Run マイクロサービス
Cloud Run 予約メイン処理 Amazon EKS (id: 1, history_no: 1, event_type: BOOKED, point: false) (id: 1, history_no: 2, event_type: MODIFIED, point: true) (id: 1, history_no: 3, event_type: CANCELED, point: true) (id: 2, history_no: 1, event_type: BOOKED, point: true) 対象のid(予約)に対して 予約イベントと ワーカーイベントを⽐較して 未処理のものを順番に実⾏する 予約 イベント ワーカー イベント (id: 2, history_no: 1) history_no:2 history_no:3 かなり堅く作ったので 順序性を完全に制御すべきか 個別のケースで検討が必要
22 ⾮同期処理を他のマイクロサービス導⼊時に再利⽤する 予約メイン処理 Amazon EKS ポイント キュー Cloud Tasks ポイント
ワーカー Cloud Run ポイントサービス Cloud Run 会員 キュー Cloud Tasks 会員 ワーカー Cloud Run 会員サービス Cloud Run 予約メイン処理に ⼤きく修正を加えずに マイクロサービス 連携を 追加できた
23 まとめ‧既存プロダクトにマイクロサービスを導⼊して - ⼀休では既存プロダクトにマイクロサービスを導⼊することで、 システムのリファクタリングに留まらず業務全体の最適化につながった - 実装に⼊る前に、泥臭く調査‧各関係者と調整するプロセスを踏むことで プラスオンの成果を得ることができました - 実装⾯では、⾮同期処理にしたことでイベントの順番のハンドリングを
どのように担保するべきか⾮常に難しかった - 個別のケースで求められる要件が違ってくると思うので 都度⾒なおしていきたい
24 ありがとうございました!