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
Kei Shiratsuchi
PRO
June 18, 2024
Technology
0
78
モノリスとマイクロサービスの橋渡し - ベターからモアベターへ
リアーキテクチャにおけるアンチパターンへの向き合い方と次なる挑戦【オフライン】@ラクスルオフィス
https://findy.connpass.com/event/319637/
Kei Shiratsuchi
PRO
June 18, 2024
Tweet
Share
More Decks by Kei Shiratsuchi
See All by Kei Shiratsuchi
なぜ リアーキテクティング専任チームを作ったのか
kei_s
PRO
2
1.4k
実践 Rails アソシエーションリファクタリング / Rails association refactoring in practice
kei_s
PRO
8
8.1k
「Go言語でつくるインタプリタ」を Rust で移植してみた / "Write An Interpreter In Go" In Rust
kei_s
PRO
1
1.8k
Rust言語で作るインタプリタ / Write An Interpreter In Rust
kei_s
PRO
2
580
育児休業のご報告と、育児グッズとしてのスマートスピーカー / Parental Leave and SmartSpeaker
kei_s
PRO
0
840
「深層学習による自然言語処理」読書会 第6章2.7
kei_s
PRO
0
440
「深層学習による自然言語処理」読書会 第5章5.1
kei_s
PRO
0
410
最近個人的に気になるプログラミング言語おさらい Ruby, Python, Go, Rust, Julia
kei_s
PRO
0
960
「深層学習による自然言語処理」読書会 第2章2.1~2.5
kei_s
PRO
0
410
Other Decks in Technology
See All in Technology
「最高のチューニング」をしないために / hack@delta 24.10
fujiwara3
15
2.7k
ActiveRecord SQLインジェクションクイズ (Rails 7.1.3.4)
kozy4324
9
2.1k
Data Migration on Rails
ohbarye
7
4.5k
グローバル展開を見据えたサービスにおける機械翻訳プラクティス / dp-ai-translating
cyberagentdevelopers
PRO
1
110
とあるユーザー企業におけるリスクベースで考えるセキュリティ業務のお話し
4su_para
0
250
Capybara+生成AIでどこまで本当に自然言語のテストを書けるか?
yusukeiwaki
6
1.1k
サイバーエージェントにおける生成AIのリスキリング施策の取り組み / cyber-ai-reskilling
cyberagentdevelopers
PRO
1
130
オニオンアーキテクチャで実現した 本質課題を解決する インフラ移行の実例
hryushm
13
2.7k
Trusted Types API と Vue.js
lycorptech_jp
PRO
1
300
新R25、乃木坂46 Mobileなどのファンビジネスを支えるマルチテナンシーなプラットフォームの全体像 / cam-multi-cloud
cyberagentdevelopers
PRO
1
110
初心者に Vue.js を 教えるには
tsukuha
3
210
よくわからんサービスについての問い合わせが来たときの強い味方 Amazon Q について
kazzpapa3
0
140
Featured
See All Featured
Become a Pro
speakerdeck
PRO
24
4.9k
Into the Great Unknown - MozCon
thekraken
31
1.5k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
22k
Visualization
eitanlees
143
15k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
41
9.2k
Fireside Chat
paigeccino
32
3k
Teambox: Starting and Learning
jrom
132
8.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
Typedesign – Prime Four
hannesfritz
39
2.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
3
360
Transcript
モノリスとマイクロサービスの橋渡し - ベターからモアベターへ - 白土 慧, Kei Shiratsuchi, @kei_s ϦΞʔΩςΫνϟʹ͓͚ΔΞϯνύλʔϯͷ͖߹͍ํͱ࣍ͳΔઓ,
2024.06.18(Tue)
自己紹介 • 白土 慧 (シラツチ ケイ) • kei-s • @kei_s
• 2021〜: 株式会社アンドパッド • リアーキテクティングチーム(リアーキチーム)を立ち上げ • 主に大規模な Rails アプリケーションを対象
このトークでは • 多様なサービスを提供するためのアーキテクチャについて、ANDPADの 事例として、Railsとマイクロサービス間のgRPC通信を例にお話しします • 現在進行形でアーキテクチャを進化させています • アンチパターンではなく、正攻法な進化と捉えています • トークの流れ
• ANDPADのサービス成長の歴史 • モノリスとマイクロサービスの接続 • 利点・トレードオフと、変化への対応
前提 • ANDPAD: 建築・建設業向けのSaaS • 様々な業務ドメイン向けのプロダクトを提供 • 施工管理、検査、チャット、etc… • 顧客がサービスを様々な組み合わせで利用できる
• 提供するプロダクトが多く、開発チームも多い
ANDPADサービスと アーキテクチャの(ざっくり)歴史
古代: 単一サービスのRailsアプリ • 2016年サービス提供開始時 • 施工管理サービスをRailsで構築 • 施工管理にまつわる新機能を実装 • 黒板
• 検査 • … 本体Rails 施工管理 黒板 検査
中世: 新規サービスをモノリスに構築 • 現場ではなく、建築事務所での業務をサポート するサービス • 引合粗利管理 • 本体Railsに新たなドメインのサービスが追加 •
ユーザ、案件データなどを施工管理サービ スと共有しているが、独自の画面・データ モデルが増える • モジュラモノリスとして切り出しうるが、当時 はそのような仕組みが整備されていなかった 本体Rails 施工管理 引合粗利管理
近代: 新サービスを別なRailsアプリで提供 • 建築事務所向けに新サービスを立ち上 げ • 受発注 • 開発速度を重視し、本体と別に新規 Railsアプリを立ち上げ
• 本体Railsアプリの肥大化を回避 • 開発メンバーはRailsエンジニアが 多かった • 本体RailsとREST APIで連携 本体Rails 施工管理 受発注 Rails 引合粗利管理
現代: 新規サービスをマイクロサービス化 • 新たなドメインへの参入。本格的にVertical SaaSへ • 職人の稼働管理 • … •
新規サービスを次々と出していきたい • マイクロサービス化 • 各サービスごとに技術選定、gRPC で連携 • ユーザデータは共通化、サービス特有の データはそれぞれのサービスが持つ • Goエンジニアの増加 本体Rails 施工管理 受発注 Rails マイクロ サービス マイクロ サービス 引合粗利管理
注意 • この発表ではマイクロサービスと呼称していますが、一 般的なマイクロサービスの定義とはズレがあります。 • 実際には、一つのプロダクトが一つのサービスになって おり、いわゆるマイクロサービスよりは粒度が大きいで す。 • 一般的な定義である、単一の永続化ストレージに依存せ
ずにデプロイ・開発できる状態を目指しています • 絶賛取組中です
ANDPADアーキテクチャの歴史まとめ • 古代: 単一サービスのRailsアプリ • 中世: 新規サービスをモノリスに構築 • 近代: 新サービスを別なRailsアプリで提供
• 現代: 新規サービスをマイクロサービス化 • 巨大なモノリスと外部サービス群という構成
モノリスと マイクロサービスの連携
gRPCによる通信 • モノリスとマイクロサービス、マイクロサービス間の連携 には gPRC による同期通信を採用 • パフォーマンス • スキーマ駆動
• Goエンジニアが主導し、導入・キャッチアップがスムー ズに進んだ
マイクロサービス導入時の実装 • gRPC APIサーバをGoで実装 • 本体RailsアプリのDBを直接参照する • 基本的に参照系のみを実装 • マイクロサービスからの通信は参照系
が大半 • ユーザデータの確認、案件ステータ スの同期 • 更新が必要な際は、本体Railsに更新 用REST APIを追加し呼び出す 本体Rails マイクロ サービス マイクロ サービス DB gRPCサーバ
利点・トレードオフと 変化への対応
利点とトレードオフ • 利点 • 比較的シンプルな実装で、すぐに提供開始できる • 複雑な本体Railsから独立して開発できる • 高速にレスポンスできる
利点とトレードオフ • トレードオフ • 本体Railsのモデルを用いないため、ビジネスロ ジックが分散してしまう • 複雑なデータモデルを扱うのが難しい • 更新系APIによるデータ更新は、バリデーション
やコールバックなど複雑なロジックを再実装する 必要がある • 本体側のロジック変更に追従するのが難しい
導入からこれまでの判断 • マイクロサービスの導入は不可避 • Vertical SaaSとして目指す状態を本体Railsだけで 実装するのは困難 • 新規サービスで必要なgRPC APIは限られる
• コアとなるいくつかのデータのみ • 更新系は少ないだろうという想定 • すぐにでも導入してマイクロサービスを立ち上げたい • → 利点に対して、許容できるトレードオフという判断
これからを見据えて • マイクロサービス化によって、新サービスの提供がス ムーズになった • 今後もマイクロサービスは増えるだろう • 必要なgRPC APIが増えるだろう •
複雑なデータモデルが必要になる可能性がある • ビジネスロジックの乖離に気づけない可能性がある • → トレードオフが重要になってきている
これから • 本体RailsにgRPC APIを実装する • 利点 • Railsのモデルを用いてビジネスロジックを 共通化できる •
テストにより、モデルのロジック変更が gRPC APIに影響があることを把握できる • トレードオフ • Go+直接DB参照に比べ、Railsのモデルを 通した操作になるので通信速度が劣化する 可能性が高い 本体Rails マイクロ サービス マイクロ サービス gRPC API
進め方 • 本体RailsにgRPC APIを実装し、一つのマイクロサービス を対象に移行可能か検証 • 本体Railsへの組み込み、リリースフローの実装・検証 • パフォーマンス懸念の検証 •
どの程度の速度なら許容可能なのかの検証 • Go実装からの改善ポイントの検証 • 認証方式、スキーマ定義の改善 • 現在、絶賛進行中です💪
まとめ • サービスの進化、時代の変化により、求められるアーキ テクチャは変わっていく • 将来の成長を加味して、早めに判断できると良い • アーキテクチャのトレードオフを把握することで、比較的 安心してアーキテクチャ変更に取り組むことができる