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
freee 技術の日 2024 Day1 進化していくシステムアーキテクチャ
Search
Yu Usami
June 03, 2024
Programming
1
6.4k
freee 技術の日 2024 Day1 進化していくシステムアーキテクチャ
freee 技術の日 2024
にて発表した『進化していくシステムアーキテクチャ』のスライドになります。
発表のアーカイブはyoutubeにて
公開されて
いますので、そちらをご覧ください。
Yu Usami
June 03, 2024
Tweet
Share
More Decks by Yu Usami
See All by Yu Usami
海外進学→現地就職→転職帰国→転職→レイオフ
usami
3
970
Other Decks in Programming
See All in Programming
KawaiiLT 登壇資料 キャリアとモチベーション
hiiragi
0
160
The Missing Link in Angular’s Signal Story: Resource API and httpResource
manfredsteyer
PRO
0
140
実践Webフロントパフォーマンスチューニング
cp20
45
10k
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
150
プロダクト横断分析に役立つ、事前集計しないサマリーテーブル設計
hanon52_
3
530
AIコーディングエージェントを 「使いこなす」ための実践知と現在地 in ログラス / How to Use AI Coding Agent in Loglass
rkaga
4
1.2k
状態と共に暮らす:ステートフルへの挑戦
ypresto
3
1.1k
M5UnitUnified 最新動向 2025/05
gob
0
120
今話題のMCPサーバーをFastAPIでサッと作ってみた
yuukis
0
110
Make Parsers Compatible Using Automata Learning
makenowjust
2
6.9k
Serving TUIs over SSH with Go
caarlos0
0
550
note の Elasticsearch 更新系を支える技術
tchov
9
3.4k
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
178
53k
Six Lessons from altMBA
skipperchong
28
3.7k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.2k
Music & Morning Musume
bryan
47
6.5k
Why Our Code Smells
bkeepers
PRO
336
57k
Visualization
eitanlees
146
16k
GraphQLの誤解/rethinking-graphql
sonatard
71
10k
Producing Creativity
orderedlist
PRO
344
40k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
105
19k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
Transcript
進化していく システムアーキテクチャ 宇佐美 ゆう 2024年5⽉31⽇
2 宇佐美 ゆう 2023年4月入社 - サービス基盤 全社にまたがるアーキテクチャ課題の 解決と基盤技術開発に従事 システムアーキテクト
1. SaaS企業の成⻑とアーキテクチャの変遷 2. freeeが抱えるアーキテクチャ課題 3. アーキテクチャ課題解決に向けての取り組み 進化していく システムアーキテクチャ
SaaS企業の成長 創業期 急成長期 成長拡大期
創業期 • ユーザー数・売上は0 • 2〜3人で開発 • とにかくリリース! • 開発・運用コストは最低限で
創業期のシステムアーキテクチャ app servers database server load balancer client
freee(2012-2013)のシステムアーキテクチャ app servers database server load balancer client freee会計 MySQL
Rails • CEO含む3人で開発 • 2013/3確定申告リリース目標 • Rails + EC2
SaaS企業の成長 創業期 急成長期 成長拡大期
急成長期 • ユーザー数・売上共に伸びてきた • 10〜20人で開発 • 事業拡大・機能追加・安定稼働 • 資金面の余裕
急成長期のシステムアーキテクチャ client database servers service A service B
freee(2014-2017)のシステムアーキテクチャ client service A freee会計 freee人事労務 共通 Auth • エンジニア
20人ほど • HRプロダクトリリース • 共通機能の切り出し
SaaS企業の成長 創業期 急成長期 成長拡大期
成長拡大期 • 事業の多角化 • 100人超で開発 • 開発生産性・自動化 • コスト最適化
成長拡大期のシステムアーキテクチャ app containers database clusters client
freee(2018-2023)のシステムアーキテクチャ app containers database clusters client EKS Aurora Read-only Replicas
• エンジニア 80〜250人 • 増えたサービスの統制 • DBパフォーマンス問題
freeeが抱えるアーキテクチャ課題 サービス数の爆発 依存関係の複雑化 パフォーマンス問題 開発生産性の鈍化 障害の高度化・重篤化
1. 依存関係をシンプルに 2. 肥⼤化したサービスの分割 3. 標準化‧ガイドライン整備 アーキテクチャ課題解決への取り組み
1. 依存関係をシンプルに 循環依存 相互依存
1. 依存関係をシンプルに PubSubの仕組みで相互依存・循環依存を解消 service A service B
1. 依存関係をシンプルに PubSubの仕組みで相互依存・循環依存を解消 subscribe publish
event stream service A service B
2. 肥大化したサービスの分割 ドメインベースでのサービス分割 ドメイン分析を元に、適切な粒度でのドメイン分割を実現する • 会計モノリスからの各種サービス切り出し • 肥大化したサービスへの追加機能開発制限 • 新規サービスの立ち上げを容易に
3. 標準化・ガイドライン整備 サービス間連携ガイドライン 複数サービスとの連携を前提としたサービスを実装する際の原則・実装例 原則例: • 連携先のサービスが常に正常に動作することを前提としない • freee API標準に準拠し、API経由もしくはイベント経由で連携する
• サービス間での相互依存・循環依存をしない • 分散トランザクションを実装しようとしない
3. 標準化・ガイドライン整備 ドメインサービスのガイドライン ドメインサービスの切り分け方・実装の指針となるべく策定中 検討項目: • SLI / SLO •
DB write がスケールする実装方針 • freee-bootstrap の利用
おわりに アーキテクチャには正解も不正解もない。 あるのはトレードオフだけだ。 『進化的アーキテクチャ』著者 Neal Ford
None