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
660
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
Curiosity & Persistence
recruitengineers
PRO
2
32
結果的にこうなった。から見える メカニズムのようなもの。
recruitengineers
PRO
1
90
成長実感と伸び悩みからふりかえる キャリアグラフ
recruitengineers
PRO
1
35
リクルートの オンプレ環境の未来を語る
recruitengineers
PRO
2
35
LLMのプロダクト装着と独自モデル開発
recruitengineers
PRO
0
38
新規検索基盤でマッチング精度向上に挑む! ~『ホットペッパーグルメ』の開発事例 ビジネス編
recruitengineers
PRO
1
24
新規検索基盤でマッチング精度向上に挑む! ~『ホットペッパーグルメ』の開発事例 技術編
recruitengineers
PRO
0
24
大規模プロダクトにおける フロントエンドモダナイズの取り組み紹介
recruitengineers
PRO
4
64
技術的ミスと深堀り
recruitengineers
PRO
3
50
Other Decks in Technology
See All in Technology
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
19k
What's new in Go 1.24?
ciarana
1
120
RayでPHPのデバッグをちょっと快適にする
muno92
PRO
0
200
目標と時間軸 〜ベイビーステップでケイパビリティを高めよう〜
kakehashi
PRO
8
1k
EDRの検知の仕組みと検知回避について
chayakonanaika
12
5.3k
株式会社Awarefy(アウェアファイ)会社説明資料 / Awarefy-Company-Deck
awarefy
3
12k
4th place solution Eedi - Mining Misconceptions in Mathematics
rist
0
150
データエンジニアリング領域におけるDuckDBのユースケース
chanyou0311
9
2.6k
Two Blades, One Journey: Engineering While Managing
ohbarye
4
2.6k
Oracle Database Technology Night #87-1 : Exadata Database Service on Exascale Infrastructure(ExaDB-XS)サービス詳細
oracle4engineer
PRO
1
220
プロダクト開発者目線での Entra ID 活用
sansantech
PRO
0
120
Qiita Organizationを導入したら、アウトプッターが爆増して会社がちょっと有名になった件
minorun365
PRO
1
320
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
428
65k
Embracing the Ebb and Flow
colly
84
4.6k
Thoughts on Productivity
jonyablonski
69
4.5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Statistics for Hackers
jakevdp
797
220k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Building an army of robots
kneath
303
45k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Being A Developer After 40
akosma
89
590k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
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 による性能改善から始める技術的負債解消@スタディサプリ ご清聴ありがとうございました