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
Trace Queriesの活用でfreee会計のDB負荷削減のきっかけとした話
Search
ryu
August 08, 2024
Technology
0
310
Trace Queriesの活用でfreee会計のDB負荷削減のきっかけとした話
2024年2月にリリースされたTrace Queriesを用いて、可観測性の向上させることでfreee会計のDB負荷削減のきっかけとした話をします
ryu
August 08, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
撤退危機からのピボット : 4年目エンジニアがリードする TypeScript で挑む事業復活 / crisis-to-pivot-4th-year-engineer-ts-relaunch
carta_engineering
2
750
テスト設計チュートリアル ちびこん編 ’25
omn
1
440
OCI Database Management サービス詳細
oracle4engineer
PRO
1
4.5k
君だけのオリジナル async / await を作ろう / TSKaigi 2025
susisu
17
12k
Rebase エンジニアリング組織の現状とこれから
rebase_engineering
0
110
AIのための オンボーディングドキュメントを整備する - hirotea
hirotea
8
1.9k
AIの電力問題を概観する
rmaruy
0
160
“新卒らしさ”を脱ぎ捨てて 〜1年を経て学んだこと〜
rebase_engineering
0
100
2025advance01
minamizaki
0
110
Contract One Dev Group 紹介資料
sansan33
PRO
0
5.8k
Standard Schema: スキーマライブラリの統一企画とは何か
nozomuikuta
1
440
新卒から4年間、20年もののWebサービスと向き合って学んだソフトウェア考古学 - PHPカンファレンス新潟2025 / new graduate 4year software archeology
oguri
2
260
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Designing for humans not robots
tammielis
253
25k
Unsuck your backbone
ammeep
671
58k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
How STYLIGHT went responsive
nonsquared
100
5.6k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Docker and Python
trallard
44
3.4k
Practical Orchestrator
shlominoach
187
11k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Typedesign – Prime Four
hannesfritz
41
2.6k
Transcript
Trace Queriesの活⽤で freee会計のDB負荷削減のきっかけとした話 2024.08.07
2 ⼤⽊⻯勝 経歴 • 2019~2021 SIerに⼊社 ◦ バックエンドエンジニアをやりながらCI/CD ‧
GCPなども触る • 2022~2023 みんなの銀⾏⼊社 ◦ DevOpsエンジニアとして安全なDeployフロー の構築を⾏う • 2023.6 Enabling SREとしてfreee⼊社 ◦ Enabling SREとしてプロダクトチームへのSRE プラクティス導⼊や可観測性の向上の取り組み を⾏う 最近のマイブーム • ⽔耕栽培 ◦ レタス、ミニ⻘梗菜、バジルを育てています Enabling SREチーム マネージャー Ohiki Ryuma
freeeで何が起きていた?
4 • 各種マイクロサービスからや直接ユーザからfreee会計に対してアクセスが来る freee会計ってどんなアーキテクチャ? 検索しているSpanはここ 各クラスタの前段にはenvoyが存在
5 freee会計DBの負荷がやばい • freee会計は10年以上の開発をされていく中で巨⼤なN+1が様々なところで発⽣ ◦ 様々な機能でN+1が起きているがどのAPIで特に頻発しているかは分からない • ユーザ数の増加も相まって負荷が⾼まっている
6 会計DBの負荷がやばい • 他クラスタから会計クラスタにN+1のリクエストが⾶んでくることもある ◦ どのAPIで特に頻発しているかは分からない そもそもここまでくると Traceの画⾯すらまともに開けない…
7 ここまでのまとめ • freee会計はユーザ数の増加やシステムの複雑化に伴ってDBへの負荷がやばいこと になっていた ◦ 負荷の⾼い処理のTrace単体を⾒つけることは出来てもどのAPIでよく負荷が⾼くなっているかを 集計する⽅法は無かった • 他にも以下のようなことも体系的に集計する⽅法はなかった
◦ slowクエリを投げているAPI ◦ ライターインスタンスにSELECTクエリをたくさん投げているAPI
8 ここまでのまとめ • freee会計はユーザ数の増加やシステムの複雑化に伴ってDBへの負荷がやばいこと になっていた ◦ 負荷の⾼い処理のTrace単体を⾒つけることは出来てもどのAPIでよく負荷が⾼くなっているかを 集計する⽅法は無かった • 他にも以下のようなことも体系的に集計する⽅法はなかった
◦ slowクエリを投げているAPI ◦ ライターインスタンスにSELECTクエリをたくさん投げているAPI DatadogのTrace Queriesが 解決のきっかけの⼀つに!
Trace Queriesとは?
10 • これまでA->Bという親⼦関係のあるSpanに対して以下のような検索は出来なかった ◦ AでエラーになっているかつBでエラーになっているトレース Trace Queries とは? 1つのSpanに対してしか検索できない 両⽅でエラーが起きているTraceを検索できない
11 • 他にもA->Bという親⼦関係のあるSpanに対して以下のような検索は出来なかった ◦ Bが10s以上かかっているAのSpanをパスの種類毎に集計し多い順に並べる Trace Queries とは? パスの情報はこっちにあるので パスの種類毎に集計出来ない
検索しているSpanはここ 遅いクエリを検索することは出来る
12 • DatadogのTraceをサービス間の依存関係も含めて検索できる機能 ◦ これまで出来なかった柔軟な検索が可能に! Trace Queriesとは? Span毎に検索 検索したいSpan間の依存関係を設定 Trace全体の期間やSpan数を⼀緒に検索できる
freeeでの実際の活⽤例
14 • N+1を起こしているパスグループをN+1が起きている回数順にリスト化 N+1の依存関係があるリクエストを発⾒したい
15 N+1の依存関係があるリクエストを発⾒したい A B B B B …
16 N+1の依存関係があるリクエストを発⾒したい 検索したいSpan間の依存関係を設定 aのspan = envoyのspanの span tagであるパスグループで集計 Root Spanに絞ることでマイクロサービス間の
envoyがカウントされないようにする • Root Spanであるenvoyのspanに⼊っているパスグループの情報で集計する
17 • slowクエリを起こしているパスグループをリクエスト数順にリスト化 slowクエリを起こしているリクエストパスを発⾒したい
18 • slowクエリのうちライターインスタンスに向いているSELECT⽂をリスト化 ◦ transactionを広く張っている関係上ライターに⾼負荷なSELECT⽂が流れていたことが可視化 ライターインスタンスへの遅いSELECT⽂を⾒つけたい SQLのspanに情報として⼊っている インスタンスの向き先で検索
19 • Trace Queriesの使い⽅を実際のユースケース含めてDoc化 ◦ これまでSREや⼀部のエンジニアしか使いこなせていなかった所からセルフサービスに! 誰でもDB負荷の原因を⾒つけるのに活⽤出来るように
20 • エンジニア⾃⾝がTrace Queriesを⽤いて影響の⼤きそうな機能を修正することで負荷が軽減! ◦ Writer インスタンスの負荷: DBLoad 25 %減
◦ SELECT クエリの Reader 使⽤率: 20%上昇 結果
21 • Trace Queriesを使えば柔軟なTraceの検索が⾏なえより可観測性が向上する! ◦ 今回⾒せたのは1例でSpan tagに埋めている情報次第で⾊々な活⽤法が考えられます • Traceをエンジニア⾃⾝が⾒れるようにノウハウ化することで改善がより進むように! ◦
Datadogをエンジニア⾃⾝が使えるようにする、つまりセルフサービス化することによりス トリームアラインドなチームへ • Trace Queriesで負荷の⾼いリクエストを可視化することで⼤幅なDB負荷の削減の⼀助に! ◦ 実際の修正は会計チームのメンバーやDBREの活動によるものです。ありがとうございまし た! まとめ
ご清聴ありがとうございました!