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
810
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
『ホットペッパービューティー』のiOSアプリをUIKitからSwiftUIへ段階的に移行するためにやったこと
recruitengineers
PRO
4
1.5k
経営の意思決定を加速する 「事業KPIダッシュボード」構築の全貌
recruitengineers
PRO
4
220
Browser
recruitengineers
PRO
12
3.3k
JavaScript 研修
recruitengineers
PRO
8
1.9k
TypeScript入門
recruitengineers
PRO
37
14k
モダンフロントエンド 開発研修
recruitengineers
PRO
13
7.5k
Webアクセシビリティ入門
recruitengineers
PRO
4
2k
攻撃と防御で実践するプロダクトセキュリティ演習~導入パート~
recruitengineers
PRO
4
2.6k
モバイルアプリ研修
recruitengineers
PRO
6
2.1k
Other Decks in Technology
See All in Technology
バイブコーディングと継続的デプロイメント
nwiizo
2
490
Optuna DashboardにおけるPLaMo2連携機能の紹介 / PFN LLM セミナー
pfn
PRO
2
920
セキュアな認可付きリモートMCPサーバーをAWSマネージドサービスでつくろう! / Let's build an OAuth protected remote MCP server based on AWS managed services
kaminashi
3
220
AI駆動開発を推進するためにサービス開発チームで 取り組んでいること
noayaoshiro
0
230
OpenAI gpt-oss ファインチューニング入門
kmotohas
2
1.1k
about #74462 go/token#FileSet
tomtwinkle
1
520
AIツールでどこまでデザインを忠実に実装できるのか
oikon48
6
2.8k
SwiftUIのGeometryReaderとScrollViewを基礎から応用まで学び直す:設計と活用事例
fumiyasac0921
0
150
Git in Team
kawaguti
PRO
2
310
動画データのポテンシャルを引き出す! Databricks と AI活用への奮闘記(現在進行形)
databricksjapan
0
160
AWSにおけるTrend Vision Oneの効果について
shimak
0
140
How to achieve interoperable digital identity across Asian countries
fujie
0
140
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
Designing for humans not robots
tammielis
254
26k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
4 Signs Your Business is Dying
shpigford
185
22k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
19
1.2k
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 による性能改善から始める技術的負債解消@スタディサプリ ご清聴ありがとうございました