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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ryu
August 08, 2024
Technology
0
360
Trace Queriesの活用でfreee会計のDB負荷削減のきっかけとした話
2024年2月にリリースされたTrace Queriesを用いて、可観測性の向上させることでfreee会計のDB負荷削減のきっかけとした話をします
ryu
August 08, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
AWS Devops Agent ~ 自動調査とSlack統合をやってみた! ~
kubomasataka
3
330
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
SMTP完全に理解した ✉️
yamatai1212
0
180
2人で作ったAIダッシュボードが、開発組織の次の一手を照らした話― Cursor × SpecKit × 可視化の実践 ― Qiita AI Summit
noalisaai
1
350
みんなだいすきALB、NLBの 仕組みから最新機能まで総おさらい / Mastering ALB & NLB: Internal Mechanics and Latest Innovations
kaminashi
0
210
What happened to RubyGems and what can we learn?
mikemcquaid
0
200
いよいよ仕事を奪われそうな波が来たぜ
kazzpapa3
3
350
Application Performance Optimisation in Practice (60 mins)
stevejgordon
0
110
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
910
今日から始めるAmazon Bedrock AgentCore
har1101
4
320
ゼロから始めたFindy初のモバイルアプリ開発
grandbig
2
630
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
41k
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2k
Building AI with AI
inesmontani
PRO
1
670
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
150
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
400
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
How to make the Groovebox
asonas
2
1.9k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.5k
WCS-LA-2024
lcolladotor
0
440
ラッコキーワード サービス紹介資料
rakko
1
2.2M
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の活動によるものです。ありがとうございまし た! まとめ
ご清聴ありがとうございました!