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
650
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
3
150
RECRUIT TECH CONFERENCE 2025 プレイベント【関田】
recruitengineers
PRO
0
21
RECRUIT TECH CONFERENCE 2025 プレイベント【高橋】
recruitengineers
PRO
0
89
RECRUIT TECH CONFERENCE 2025 プレイベント【岡本】
recruitengineers
PRO
2
31
RECRUIT TECH CONFERENCE 2025 プレイベント【恒川】
recruitengineers
PRO
0
27
20250130_『SUUMO』の裏側!第2弾 ~機械学習エンジニアリング編
recruitengineers
PRO
1
960
Asset Centric な データ変換パイプラインの攻略法
recruitengineers
PRO
1
140
Kotlin Multiplatformのポテンシャル
recruitengineers
PRO
2
210
デザイン初め新年会2025_川端_PdM Days2025
recruitengineers
PRO
1
69
Other Decks in Technology
See All in Technology
Postmanを使いこなす!2025年ぜひとも押さえておきたいPostmanの10の機能
nagix
2
130
トラシューアニマルになろう ~開発者だからこそできる、安定したサービス作りの秘訣~
jacopen
2
1.6k
ハッキングの世界に迫る~攻撃者の思考で考えるセキュリティ~
nomizone
13
4.7k
現場で役立つAPIデザイン
nagix
30
11k
ホワイトボードチャレンジ 説明&実行資料
ichimichi
0
110
5分で紹介する生成AIエージェントとAmazon Bedrock Agents / 5-minutes introduction to generative AI agents and Amazon Bedrock Agents
hideakiaoyagi
0
220
Swiftの “private” を テストする / Testing Swift "private"
yutailang0119
0
110
インフラをつくるとはどういうことなのか、 あるいはPlatform Engineeringについて
nwiizo
5
2.3k
AndroidデバイスにFTPサーバを建立する
e10dokup
0
240
2.5Dモデルのすべて
yu4u
2
700
AWSでRAGを実現する上で感じた3つの大事なこと
ymae
3
1k
Developer Summit 2025 [14-D-1] Yuki Hattori
yuhattor
19
5.5k
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
8
350
Being A Developer After 40
akosma
89
590k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
51k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
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 による性能改善から始める技術的負債解消@スタディサプリ ご清聴ありがとうございました