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
Datadog APM による 性能改善から始める技術的負債解消
Search
Recruit
PRO
August 06, 2024
Technology
6
750
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
毎晩の 負荷試験自動実行による効果
recruitengineers
PRO
5
180
Transformerを用いたアイテム間の 相互影響を考慮したレコメンドリスト生成
recruitengineers
PRO
2
440
Javaで作る RAGを活用した Q&Aアプリケーション
recruitengineers
PRO
1
160
問題解決に役立つ数理工学
recruitengineers
PRO
13
2.8k
Curiosity & Persistence
recruitengineers
PRO
2
200
結果的にこうなった。から見える メカニズムのようなもの。
recruitengineers
PRO
1
430
成長実感と伸び悩みからふりかえる キャリアグラフ
recruitengineers
PRO
1
210
リクルートの オンプレ環境の未来を語る
recruitengineers
PRO
3
380
LLMのプロダクト装着と独自モデル開発
recruitengineers
PRO
1
390
Other Decks in Technology
See All in Technology
Digitization部 紹介資料
sansan33
PRO
1
4.5k
microCMSではじめるAIライティング
himaratsu
0
150
Rethinking Incident Response: Context-Aware AI in Practice
rrreeeyyy
2
940
cdk initで生成されるあのファイル達は何なのか/cdk-init-generated-files
tomoki10
1
670
全部AI、全員Cursor、ドキュメント駆動開発 〜DevinやGeminiも添えて〜
rinchsan
10
5.1k
対話型音声AIアプリケーションの信頼性向上の取り組み
ivry_presentationmaterials
3
1.1k
CDK Toolkit Libraryにおけるテストの考え方
smt7174
1
550
公開初日に Gemini CLI を試した話や FFmpeg と組み合わせてみた話など / Gemini CLI 初学者勉強会(#AI道場)
you
PRO
0
1.3k
AWS CDK 入門ガイド これだけは知っておきたいヒント集
anank
5
750
〜『世界中の家族のこころのインフラ』を目指して”次の10年”へ〜 SREが導いたグローバルサービスの信頼性向上戦略とその舞台裏 / Towards the Next Decade: Enhancing Global Service Reliability
kohbis
3
1.5k
ClaudeCodeにキレない技術
gtnao
1
860
セキュアなAI活用のためのLiteLLMの可能性
tk3fftk
1
330
Featured
See All Featured
It's Worth the Effort
3n
185
28k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
340
Gamification - CAS2011
davidbonilla
81
5.4k
Done Done
chrislema
184
16k
Building Applications with DynamoDB
mza
95
6.5k
Embracing the Ebb and Flow
colly
86
4.8k
Practical Orchestrator
shlominoach
189
11k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Why Our Code Smells
bkeepers
PRO
337
57k
Automating Front-end Workflow
addyosmani
1370
200k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
700
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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 による性能改善から始める技術的負債解消@スタディサプリ ご清聴ありがとうございました