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