freee 技術の日 2024 Day1 進化していくシステムアーキテクチャ
by
Yu Usami
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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