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
増えすぎたマイクロサービスをモジュラーモノリスに移行しているお話
Search
kazuhiro Tashiro
July 18, 2023
Technology
3
4k
増えすぎたマイクロサービスをモジュラーモノリスに移行しているお話
kazuhiro Tashiro
July 18, 2023
Tweet
Share
More Decks by kazuhiro Tashiro
See All by kazuhiro Tashiro
ECS Fargateを本番投入して得た悲喜交交
masaaania
2
4k
Other Decks in Technology
See All in Technology
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
410
[CV勉強会@関東 World Model 読み会] Orbis: Overcoming Challenges of Long-Horizon Prediction in Driving World Models (Mousakhan+, NeurIPS 2025)
abemii
0
150
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
150
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
150
データの整合性を保ちたいだけなんだ
shoheimitani
8
3.2k
22nd ACRi Webinar - ChipTip Technology Eric-san's slide
nao_sumikawa
0
100
OpenShiftでllm-dを動かそう!
jpishikawa
0
140
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
260
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
340
今こそ学びたいKubernetesネットワーク ~CNIが繋ぐNWとプラットフォームの「フラッと」な対話
logica0419
5
540
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
240
(技術的には)社内システムもOKなブラウザエージェントを作ってみた!
har1101
0
340
Featured
See All Featured
The Curse of the Amulet
leimatthew05
1
8.7k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
190
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
90
Tell your own story through comics
letsgokoyo
1
810
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
920
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
Amusing Abliteration
ianozsvald
0
110
WENDY [Excerpt]
tessaabrams
9
36k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
310
Transcript
増えすぎたマイクロサービスをモジュラーモノリスに移行 しているお話 株式会社サイバーエージェント Kazuhiro Tashiro 2023.7.19 技術的負債、どうやって解消した?リアーキテクチャ・リファクタ事例から学ぶ Lunch LT @Findy
自己紹介 株式会社サイバーエージェント DeveloperProductivity室 サーバーサイドエンジニア OSSのフィーチャーフラグマネジメントシステム Bucketeerの開発・社内SaaSの運用をしています。
本日お話すること - Bucketeerのアーキテクチャとその課題を簡単に。 - モジュラーモノリスの導入について。
Bucketeer - フィーチャーフラグ、A/Bテストの提供・管理 - セルフホストして使ってもらえるように準備中です🏃 bucketeer-io/bucketeer https://bucketeer.io/
既存のアーキテクチャと課題
既存のアーキテクチャ - 約30個のマイクロサービスを運用 - 開発初期から機能のドメインに応じてしっかりサービスを分割してきた。 - サービスの数が増えてくると、問題も増えてくる。 - 運用コスト・学習コスト・インフラコスト
- セルフホストユーザーにとってのハードル
全体図
モジュラーモノリスアーキテクチャ - モノリスとマイクロサービスの中間地点(のどこか)。 - 明確な定義はない。(それぞれの組織・プロダクトがそれぞれのモジュラーモノリスを設 計している) - 「マイクロサービスのコンポーネント性を享受しながらモノリスのシンプルさを享受する」 -
一般的な特徴 - モノリスと同じようにシングルプロセスで動作。 - モノリスと比べて明確な(時に強制的な)コンテキスト境界の設定。
どのようにモジュラーモノリスを導入したか
既存アーキテクチャ - マイクロサービスのPodにはサイドカーとしてEnvoyを置いている。
変更後アーキテクチャ - backendというアプリ(コンテナ)を作成。 - backendの中にポートを変えて複数サーバーを立ち上げることにする。 - アプリ内のサービス間通信もAPIを介して行う。 - コンテキスト間での直接関数呼び出しは選択せず。
- 将来またマイクロサービス化する可能性を考慮してAPIを残す。
複数のサーバーをひとつのアプリ内に 単純にgrpcサーバーを並べていく。 https://github.com/bucketeer-io/bucketeer/blob/08a8685d0d53ff1a07dd28ad02c48143ae49d6c4/pkg/backend/cmd/server/server.go#L442-L468
複数のサーバーをひとつのアプリ内に - 元々のマイクロサービスがシングルランタイム上に並行稼働しているだけなので、 既存コード・ディレクトリ構成の変更はほぼ無かった。 account cmd/server.go api/api.go apiサーバーの立ち上げ アプリのエントリポイント auth
cmd/server.go api/api.go apiサーバーの立ち上げ アプリのエントリポイント apiサーバーの立ち上げ api.goの変更は一切無し アプリのエントリポイント account api/api.go backend cmd/server.go auth api/api.go 変更前 変更後
変更前
変更後
アーキテクチャ変更の結果 - backendアプリの内部に11個のサーバーを並列で稼働。 - 当然、個別にスケールできなくなった。 - ただし、集約したサービスの大部分はリクエスト量が多くない。 (管理画面からのアクセス) -
リクエスト量が多いサービスもRedisを利用して負荷をかなり減らしているので、デメリッ トは小さいと判断。
アーキテクチャ変更の結果 - 起動時間やスケールの所要時間はほとんど変化なし。 - ひとつのアプリ内で複数のサーバーを起動すると影響が出るかもと危惧していたが大 丈夫でした。 - Goのnet/httpを単純に使ってるのでリソース消費量は小さい。
- リソース消費の大きな言語やフレームワークを利用していると悪影響が出やすいかもし れない。
実際のPR, Issue - Issue: マイクロサービスから一部モジュラモノリスへの変更 - https://github.com/bucketeer-io/bucketeer/issues/405 - その他の関連情報やPRなどをこのIssueにまとめています。
まとめ ひとつのアプリ内で複数サーバーを走らせることによって、増えす ぎたマイクロサービスをまとめることができた。
採用強化中です✊ サイバーエージェント Developer Productity室はエンジニア募集中で す! ご興味ある方は是非 DP室公式サイト: https://site.developerproductivity.dev/ を御覧ください!