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
8.8k
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
1k
Other Decks in Programming
See All in Programming
外接に惑わされない自システムの処理時間SLIをOpenTelemetryで実現した話
kotaro7750
0
110
はじめてのDSPy - 言語モデルを『プロンプト』ではなく『プログラミング』するための仕組み
masahiro_nishimi
4
17k
技術的負債の正体を知って向き合う
irof
0
280
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
360
ネストしたdata classの面倒な更新にさようなら!Lensを作って理解するArrowのOpticsの世界
shiita0903
1
130
ドメイン駆動設計のエッセンス
masuda220
PRO
15
6k
Google Opalで使える37のライブラリ
mickey_kubo
3
160
Migration to Signals, Resource API, and NgRx Signal Store
manfredsteyer
PRO
0
130
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
390
開発組織の戦略的な役割と 設計スキル向上の効果
masuda220
PRO
10
1.8k
React Nativeならぬ"Vue Native"が実現するかも?_新世代マルチプラットフォーム開発フレームワークのLynxとLynxのVue.js対応を追ってみよう_Vue Lynx
yut0naga1_fa
2
1.8k
20251016_Rails News ~Rails 8.1の足音を聴く~
morimorihoge
3
860
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.3k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Building a Modern Day E-commerce SEO Strategy
aleyda
44
7.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Producing Creativity
orderedlist
PRO
348
40k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Faster Mobile Websites
deanohume
310
31k
Side Projects
sachag
455
43k
Building Applications with DynamoDB
mza
96
6.7k
Git: the NoSQL Database
bkeepers
PRO
431
66k
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