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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
【Oracle Cloud ウェビナー】[Oracle AI Database + AWS] Oracle Database@AWSで広がるクラウドの新たな選択肢とAI時代のデータ戦略
oracle4engineer
PRO
2
190
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
610
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.6k
ECS障害を例に学ぶ、インシデント対応に備えたAIエージェントの育て方 / How to develop AI agents for incident response with ECS outage
iselegant
4
430
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.6k
GitHub Copilot CLI を使いやすくしよう
tsubakimoto_s
0
110
pool.ntp.orgに ⾃宅サーバーで 参加してみたら...
tanyorg
0
1.3k
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
200
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
2
210
広告の効果検証を題材にした因果推論の精度検証について
zozotech
PRO
0
210
猫でもわかるKiro CLI(セキュリティ編)
kentapapa
0
120
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
230
Featured
See All Featured
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
How to build a perfect <img>
jonoalderson
1
4.9k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
780
Building Applications with DynamoDB
mza
96
6.9k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
100
A Tale of Four Properties
chriscoyier
162
24k
Test your architecture with Archunit
thirion
1
2.2k
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/ を御覧ください!