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
190
Trace Queriesの活用でfreee会計のDB負荷削減のきっかけとした話
2024年2月にリリースされたTrace Queriesを用いて、可観測性の向上させることでfreee会計のDB負荷削減のきっかけとした話をします
ryu
August 08, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
Towards Effortless Transaction Management in Microservices @KubeDay Japan 2024
scalar
1
100
タイミーのBraze活用 ~PUSH通知を活用したレコメンド~
ozeshun
2
150
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
9
41k
手軽に始める? おうちサーバーのすゝめ
nyagasan
0
190
脆弱星に導かれて
nishimunea
1
1.6k
Eventual Detection Engineering
ken5scal
0
1.2k
Namespace, Now and Then
tagomoris
0
190
音声AIエージェントの世界とRetell AI入門 / Introduction to the World of Voice AI Agents and Retell AI
rkaga
4
870
20240906_JAWS_Yamanashi_#1_leap_beyond_the_AWS_all_certifications
tsumita
1
230
分野に潜むツールの紹介
pojiro
1
350
Tricentisにおけるテスト自動化へのAI活用ご紹介/20240910Shunsuke Katakura
shift_evolve
0
150
スーパーマリオRPGのリメイク版の変更点からみるUX
nishiharatsubasa
1
320
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
PRO
27
7.4k
Scaling GitHub
holman
458
140k
Web development in the modern age
philhawksworth
204
10k
Rails Girls Zürich Keynote
gr2m
93
13k
A better future with KSS
kneath
235
17k
Art, The Web, and Tiny UX
lynnandtonic
294
20k
Atom: Resistance is Futile
akmur
261
25k
Git: the NoSQL Database
bkeepers
PRO
425
64k
Making the Leap to Tech Lead
cromwellryan
128
8.8k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
45
4.8k
Fontdeck: Realign not Redesign
paulrobertlloyd
80
5.1k
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の活動によるものです。ありがとうございまし た! まとめ
ご清聴ありがとうございました!