freee 技術の日 2024 Day1 進化していくシステムアーキテクチャ
by
Yu Usami
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
進化していく システムアーキテクチャ 宇佐美 ゆう 2024年5⽉31⽇
Slide 2
Slide 2 text
2 宇佐美 ゆう 2023年4月入社 - サービス基盤 全社にまたがるアーキテクチャ課題の 解決と基盤技術開発に従事 システムアーキテクト
Slide 3
Slide 3 text
1. SaaS企業の成⻑とアーキテクチャの変遷 2. freeeが抱えるアーキテクチャ課題 3. アーキテクチャ課題解決に向けての取り組み 進化していく システムアーキテクチャ
Slide 4
Slide 4 text
SaaS企業の成長 創業期 急成長期 成長拡大期
Slide 5
Slide 5 text
創業期 ● ユーザー数・売上は0 ● 2〜3人で開発 ● とにかくリリース! ● 開発・運用コストは最低限で
Slide 6
Slide 6 text
創業期のシステムアーキテクチャ app servers database server load balancer client
Slide 7
Slide 7 text
freee(2012-2013)のシステムアーキテクチャ app servers database server load balancer client freee会計 MySQL Rails ● CEO含む3人で開発 ● 2013/3確定申告リリース目標 ● Rails + EC2
Slide 8
Slide 8 text
SaaS企業の成長 創業期 急成長期 成長拡大期
Slide 9
Slide 9 text
急成長期 ● ユーザー数・売上共に伸びてきた ● 10〜20人で開発 ● 事業拡大・機能追加・安定稼働 ● 資金面の余裕
Slide 10
Slide 10 text
急成長期のシステムアーキテクチャ client database servers service A service B
Slide 11
Slide 11 text
freee(2014-2017)のシステムアーキテクチャ client service A freee会計 freee人事労務 共通 Auth ● エンジニア 20人ほど ● HRプロダクトリリース ● 共通機能の切り出し
Slide 12
Slide 12 text
SaaS企業の成長 創業期 急成長期 成長拡大期
Slide 13
Slide 13 text
成長拡大期 ● 事業の多角化 ● 100人超で開発 ● 開発生産性・自動化 ● コスト最適化
Slide 14
Slide 14 text
成長拡大期のシステムアーキテクチャ app containers database clusters client
Slide 15
Slide 15 text
freee(2018-2023)のシステムアーキテクチャ app containers database clusters client EKS Aurora Read-only Replicas ● エンジニア 80〜250人 ● 増えたサービスの統制 ● DBパフォーマンス問題
Slide 16
Slide 16 text
freeeが抱えるアーキテクチャ課題 サービス数の爆発 依存関係の複雑化 パフォーマンス問題 開発生産性の鈍化 障害の高度化・重篤化
Slide 17
Slide 17 text
1. 依存関係をシンプルに 2. 肥⼤化したサービスの分割 3. 標準化‧ガイドライン整備 アーキテクチャ課題解決への取り組み
Slide 18
Slide 18 text
1. 依存関係をシンプルに 循環依存 相互依存
Slide 19
Slide 19 text
1. 依存関係をシンプルに PubSubの仕組みで相互依存・循環依存を解消 service A service B
Slide 20
Slide 20 text
1. 依存関係をシンプルに PubSubの仕組みで相互依存・循環依存を解消 subscribe publish event stream service A service B
Slide 21
Slide 21 text
2. 肥大化したサービスの分割 ドメインベースでのサービス分割 ドメイン分析を元に、適切な粒度でのドメイン分割を実現する ● 会計モノリスからの各種サービス切り出し ● 肥大化したサービスへの追加機能開発制限 ● 新規サービスの立ち上げを容易に
Slide 22
Slide 22 text
3. 標準化・ガイドライン整備 サービス間連携ガイドライン 複数サービスとの連携を前提としたサービスを実装する際の原則・実装例 原則例: ● 連携先のサービスが常に正常に動作することを前提としない ● freee API標準に準拠し、API経由もしくはイベント経由で連携する ● サービス間での相互依存・循環依存をしない ● 分散トランザクションを実装しようとしない
Slide 23
Slide 23 text
3. 標準化・ガイドライン整備 ドメインサービスのガイドライン ドメインサービスの切り分け方・実装の指針となるべく策定中 検討項目: ● SLI / SLO ● DB write がスケールする実装方針 ● freee-bootstrap の利用
Slide 24
Slide 24 text
おわりに アーキテクチャには正解も不正解もない。 あるのはトレードオフだけだ。 『進化的アーキテクチャ』著者 Neal Ford
Slide 25
Slide 25 text
No content