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
240
Trace Queriesの活用でfreee会計のDB負荷削減のきっかけとした話
2024年2月にリリースされたTrace Queriesを用いて、可観測性の向上させることでfreee会計のDB負荷削減のきっかけとした話をします
ryu
August 08, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
ドメイン名の終活について - JPAAWG 7th -
mikit
33
20k
スクラムチームを立ち上げる〜チーム開発で得られたもの・得られなかったもの〜
ohnoeight
2
350
Why does continuous profiling matter to developers? #appdevelopercon
salaboy
0
180
OCI 運用監視サービス 概要
oracle4engineer
PRO
0
4.8k
透過型SMTPプロキシによる送信メールの可観測性向上: Update Edition / Improved observability of outgoing emails with transparent smtp proxy: Update edition
linyows
2
210
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
570
ハイパーパラメータチューニングって何をしているの
toridori_dev
0
140
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
240
強いチームと開発生産性
onk
PRO
33
11k
Lexical Analysis
shigashiyama
1
150
Featured
See All Featured
Embracing the Ebb and Flow
colly
84
4.5k
Making Projects Easy
brettharned
115
5.9k
Music & Morning Musume
bryan
46
6.2k
Automating Front-end Workflow
addyosmani
1366
200k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
BBQ
matthewcrist
85
9.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Teambox: Starting and Learning
jrom
133
8.8k
GitHub's CSS Performance
jonrohan
1030
460k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
Gamification - CAS2011
davidbonilla
80
5k
A Philosophy of Restraint
colly
203
16k
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の活動によるものです。ありがとうございまし た! まとめ
ご清聴ありがとうございました!