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
7.3k
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
990
Other Decks in Programming
See All in Programming
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
780
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
910
脱Riverpod?fqueryで考える、TanStack Queryライクなアーキテクチャの可能性
ostk0069
0
150
なんとなくわかった気になるブロックテーマ入門/contents.nagoya 2025 6.28
chiilog
1
270
生成AI時代のコンポーネントライブラリの作り方
touyou
1
220
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
220
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
260
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
450
Porting a visionOS App to Android XR
akkeylab
0
470
GitHub Copilot and GitHub Codespaces Hands-on
ymd65536
2
150
NPOでのDevinの活用
codeforeveryone
0
840
Team operations that are not burdened by SRE
kazatohiei
1
310
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
Why Our Code Smells
bkeepers
PRO
336
57k
Designing Experiences People Love
moore
142
24k
A Tale of Four Properties
chriscoyier
160
23k
Optimizing for Happiness
mojombo
379
70k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Raft: Consensus for Rubyists
vanstee
140
7k
A Modern Web Designer's Workflow
chriscoyier
695
190k
4 Signs Your Business is Dying
shpigford
184
22k
Navigating Team Friction
lara
187
15k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Code Reviewing Like a Champion
maltzj
524
40k
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