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
810
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
830
Other Decks in Programming
See All in Programming
自分好みの TS バンドラを Rust で作れる!Deno の内部ライブラリの活用 – Denoで変わるランタイムの景色 実践事例 Lunch LT
pizzacat83
4
500
マイクロサービス基盤にフルマネージドサービスではなくKubernetesを選択する理由
bgpat
8
1.9k
アプリケーションをリプレイスしたら チームとサービス運用に向き合えた
kazatohiei
1
220
What's new in Firebase for building gen AI features気になったところ
mkeeda
0
180
Web 開発における Deno Fresh の活用例:ペアプロタイマー timer.team の開発
lef237
1
580
あらゆるアプリをCompose Multiplatformで書きたい! -ネイティブアプリの「あの機能」を私たちはどう作るか-
subroh0508
1
660
SPLから始める「データ構造」入門
o0h
PRO
6
690
Vertical Architectures for Scalable Angular Applications
manfredsteyer
PRO
0
200
設計の考え方 - インターフェースと腐敗防止層編 #phpconfuk / Interface and Anti Corruption Layer
okashoi
5
1k
技術サポートでよく見かけるパターンと便利な活用方法
tamai_63
0
150
GoogleI/O2024 LT報告会資料
shinsukefujita1126
0
180
日付と闘う-和暦は難しい / vs Dates - Japanese Chronology is Difficult
wkwkhautbois
0
200
Featured
See All Featured
Clear Off the Table
cherdarchuk
87
320k
StorybookのUI Testing Handbookを読んだ
zakiyama
14
4.8k
Adopting Sorbet at Scale
ufuk
69
8.7k
Writing Fast Ruby
sferik
623
60k
BBQ
matthewcrist
80
8.9k
jQuery: Nuts, Bolts and Bling
dougneiner
60
7.3k
The Power of CSS Pseudo Elements
geoffreycrofte
63
5.1k
Designing on Purpose - Digital PM Summit 2013
jponch
112
6.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
188
16k
The Mythical Team-Month
searls
217
42k
Atom: Resistance is Futile
akmur
260
25k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
661
120k
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