$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Datadog APM による 性能改善から始める技術的負債解消
Search
Recruit
PRO
August 06, 2024
Technology
6
870
Datadog APM による 性能改善から始める技術的負債解消
2024/08/07に、Japan Datadog User Group Meetup#5で発表した、moppの資料です。
Recruit
PRO
August 06, 2024
Tweet
Share
More Decks by Recruit
See All by Recruit
プロダクトマネジメントの分業が生む「デリバリーの渋滞」を解消するTPMの越境
recruitengineers
PRO
3
710
あなたの知らない Linuxカーネル脆弱性の世界
recruitengineers
PRO
4
300
dbtとBigQuery MLで実現する リクルートの営業支援基盤のモデル開発と保守運用
recruitengineers
PRO
4
220
『ホットペッパービューティー』のiOSアプリをUIKitからSwiftUIへ段階的に移行するためにやったこと
recruitengineers
PRO
4
1.7k
経営の意思決定を加速する 「事業KPIダッシュボード」構築の全貌
recruitengineers
PRO
4
390
Browser
recruitengineers
PRO
12
4k
JavaScript 研修
recruitengineers
PRO
9
2.2k
TypeScript入門
recruitengineers
PRO
37
15k
モダンフロントエンド 開発研修
recruitengineers
PRO
16
8.4k
Other Decks in Technology
See All in Technology
21st ACRi Webinar - Univ of Tokyo Presentation Slide (Ayumi Ohno)
nao_sumikawa
0
120
pmconf2025 - 他社事例を"自社仕様化"する技術_iRAFT法
daichi_yamashita
0
780
非CUDAの悲哀 〜Claude Code と挑んだ image to 3D “Hunyuan3D”を EVO-X2(Ryzen AI Max+395)で動作させるチャレンジ〜
hawkymisc
1
160
今からでも間に合う!速習Devin入門とその活用方法
ismk
1
420
Uncertainty in the LLM era - Science, more than scale
gaelvaroquaux
0
780
モバイルゲーム開発におけるエージェント技術活用への試行錯誤 ~開発効率化へのアプローチの紹介と未来に向けた展望~
qualiarts
0
650
エンジニアとPMのドメイン知識の溝をなくす、 AIネイティブな開発プロセス
applism118
4
670
eBPFとwaruiBPF
sat
PRO
4
2.5k
安いGPUレンタルサービスについて
aratako
2
2.6k
因果AIへの招待
sshimizu2006
0
910
AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば
1ftseabass
PRO
0
110
第4回 「メタデータ通り」 リアル開催
datayokocho
0
110
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
4 Signs Your Business is Dying
shpigford
186
22k
Designing for humans not robots
tammielis
254
26k
Docker and Python
trallard
47
3.7k
Producing Creativity
orderedlist
PRO
348
40k
Thoughts on Productivity
jonyablonski
73
5k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Rails Girls Zürich Keynote
gr2m
95
14k
Scaling GitHub
holman
464
140k
Transcript
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ Datadog APM による 性能改善から始める技術的負債解消 @mopp Japan
Datadog User Group Meetup#5 Google Slides: https://x.gd/GpKxP Speaker Deck: https://x.gd/g9vTB
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ About mopp • 仕事 ◦ ソフトウェアエンジニア
• エディタ ◦ NeoVim VimConf 2024 の運営スタッフをしています • 最近のできごと ◦ 浅草でカヌレを食べたら美味しかった
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ About スタディサプリ 小中高 様々なスタディサプリの内 小中高向けのスタディサプリの お話しをします
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 今日はこれだけ 覚えればOK! Datadog 育成は 開発フローに組み込もう 例:
rails new した → Dashboard も new する Code - Test - Monitor 開発フロー Code Test 開発者 Monitor 実装 動作確認 モニタリング構築 早くリリースし てぇ
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 今日のテーマ Datadog で性能改善してみた
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ ここから使う Datadog の機能 • Dashboard •
APM ◦ Trace Explorer ◦ Continuous Profiler • (機能の正式名称が合っているか自信がない) • ※これからお話しする順序で導入したわけではありません。
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ レガシーソフトウェアの改善がしたい • ソフトウェアがレガシーとは? ◦ 雑に言えば「触るのが怖い」もの ◦
技術的負債が溜まっている • 遭遇するとリファクタしたくなる 開発者 怖ぇ… リファクタしよ レガシー ソフトウェア エンドユーザ 可読性が低い テスト不足 非効率な実装 etc… めっちゃ 使うぞ お金を生む (とてもえらい) 開発する 利用する 生産性を低下させる (えらくない)
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 改善には指標が必要 • ロブ・パイクの「プログラミング5カ条」にも書いてある ◦ ルール2: 計測せよ
▪ 計測するまで性能改善をしてはならない ▪ 計測しても、その箇所が圧倒的に遅くない限りは改善してはならない 計測する対象を表す 指標が必要
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 改善には指標が必要 計測せよ つまり Datadog せよ ということ
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 改善指標の選定 • 今回は「レイテンシ」を採用 ◦ 計測しやすい ▪
注: 本来求めている指標は可読性 • でも、妥当な定量化が難しい • 行数、クラス長、ABC metric などはあるが… • 開発者しかうれしくない ◦ エンドユーザにもメリットがある ▪ うれしい人は多いほうがいい • 他の指標は? ◦ CPU消費量、メモリ消費量、などが定番 エンドユーザ 早いほうが うれしい 開発者 レイテンシの グラフは もうあるぞ
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 自身への戒め: 本当にユーザは嬉しい? • 先述のルール2は「労力に見合った価値はあるか?」と問うている ◦ 例:
1週間で100msを30msにするより 3日でズレた CSS を直すほうがうれしいかも • プロダクトオーナーと合意形成するのが理想 ◦ すると「どのくらいの値なら許容なんだっけ?」となる ◦ これを進めていくと SLO にも繋がる ◦ でも、結構たいへん 開発者 リファクタ してぇ… プロダクトオーナー 新機能リリース してぇ… 重視する観点の違いが 対立の火種に
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 今回の改善対象 • POST されるエンドポイント一つ ◦ リクエストされるデータが数種類ある
• 時間がないので以下省略! Ruby アプリケーション クライアント HTTP POST N種類のデータ 開発者 改善
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ Dashboard 整備 ぬくもり コメント 処理ブロック毎に表示 ハズレ値を少し減らすために
折れ線は p50, p75, p90, p95 の4つのみ 関心事の単位でグループウィジェット化 • グラフをいい感じに描画する
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ • APM 導入前 ◦ アプリケーションで時間計測 →
Custom Metrics 送信 • APM 導入後 ◦ APM の Generate Metrics で Custom Metrics を生成 ◦ Trace も見られるし、グラフ描画も出来て一石二鳥 APM APM → Dashboard 連携 Trace Trace Trace Generate metrics Dashboard アプリケーション Send traces Send metrics (APM 導入前)
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ • Profiler ◦ 初手に見る ◦ 大きなボトルネックを探すため
• Traces ◦ 次に見る ◦ 一つの処理の流れで • Dashboard ◦ 修正リリース後に影響確認 それぞれの使い分け Traces Profiler Dashboard ボトルネックを探る 全体影響確認 個別事例から探る リリース後
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ • 不要なクエリ削除 ◦ Profiler で発見 ▪
「あれ、何でこのテーブルへのクエリがあるんだ?」 ◦ 定数に置換可能だった ◦ 合計2件あった 得られた成果
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 得られた成果 • クエリ回数削減 ◦ Profiler であたりを付けて実装を読んだら発見
▪ 処理の流れで重めの同じクエリを2回実行していた ▪ オブジェクトにキャッシュして1回に削減 ◦ Trace でも同じようなものを発見 ▪ 同様に改善 ◦ 合計4箇所あった
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 得られた成果 • レイテンシが下がった ◦ 約 50ms
くらい、エンジニアの稼働で2人週弱 ◦ 先述したルール2を振り返ると物足りないかも?
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 得られた成果 • 副次的な効果として ◦ 可読性の低い部分を改修した ◦
テストを追加した
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 振り返り • 連鎖して改善点が見つけられる ◦ 似たような問題が意外とあった ▪
目的なくコードリーディングすると案外見つけられない… • 実装を修正することで可読性の改善点も具体的に見えてくる • レイテンシを指標にしていたのに Profiler の CPU Time を見ていた ◦ WALL Time を見るべきだったかも? • Trace の活用余地がまだある ◦ 最近登場した Waterfall が便利そう!
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ まとめ 03
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ まとめ • Code - Test -
Monitor 開発フロー で監視も共に育てる • 性能改善を取っ掛かりに技術的負債解消を始める ◦ 連鎖して具体的な改善タスクが出てくる • APM の Traces, Continuous Profiler 最高便利 ◦ どんどん新しい機能が増えている ◦ まだまだ使い込める
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ フリー素材コーナー • ご自由にお使いください エンドユーザ1 Drawn by
ujihisa https://x.gd/i1vWi エンドユーザ2 Drawn by mopp https://x.gd/OE0Sn
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ ご清聴ありがとうございました