×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ Datadog APM による 性能改善から始める技術的負債解消 @mopp Japan Datadog User Group Meetup#5 Google Slides: https://x.gd/GpKxP Speaker Deck: https://x.gd/g9vTB
Slide 2
Slide 2 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ About mopp ● 仕事 ○ ソフトウェアエンジニア ● エディタ ○ NeoVim VimConf 2024 の運営スタッフをしています ● 最近のできごと ○ 浅草でカヌレを食べたら美味しかった
Slide 3
Slide 3 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ About スタディサプリ 小中高 様々なスタディサプリの内 小中高向けのスタディサプリの お話しをします
Slide 4
Slide 4 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 今日はこれだけ 覚えればOK! Datadog 育成は 開発フローに組み込もう 例: rails new した → Dashboard も new する Code - Test - Monitor 開発フロー Code Test 開発者 Monitor 実装 動作確認 モニタリング構築 早くリリースし てぇ
Slide 5
Slide 5 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 今日のテーマ Datadog で性能改善してみた
Slide 6
Slide 6 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ ここから使う Datadog の機能 ● Dashboard ● APM ○ Trace Explorer ○ Continuous Profiler ● (機能の正式名称が合っているか自信がない) ● ※これからお話しする順序で導入したわけではありません。
Slide 7
Slide 7 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ レガシーソフトウェアの改善がしたい ● ソフトウェアがレガシーとは? ○ 雑に言えば「触るのが怖い」もの ○ 技術的負債が溜まっている ● 遭遇するとリファクタしたくなる 開発者 怖ぇ… リファクタしよ レガシー ソフトウェア エンドユーザ 可読性が低い テスト不足 非効率な実装 etc… めっちゃ 使うぞ お金を生む (とてもえらい) 開発する 利用する 生産性を低下させる (えらくない)
Slide 8
Slide 8 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 改善には指標が必要 ● ロブ・パイクの「プログラミング5カ条」にも書いてある ○ ルール2: 計測せよ ■ 計測するまで性能改善をしてはならない ■ 計測しても、その箇所が圧倒的に遅くない限りは改善してはならない 計測する対象を表す 指標が必要
Slide 9
Slide 9 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 改善には指標が必要 計測せよ つまり Datadog せよ ということ
Slide 10
Slide 10 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 改善指標の選定 ● 今回は「レイテンシ」を採用 ○ 計測しやすい ■ 注: 本来求めている指標は可読性 ● でも、妥当な定量化が難しい ● 行数、クラス長、ABC metric などはあるが… ● 開発者しかうれしくない ○ エンドユーザにもメリットがある ■ うれしい人は多いほうがいい ● 他の指標は? ○ CPU消費量、メモリ消費量、などが定番 エンドユーザ 早いほうが うれしい 開発者 レイテンシの グラフは もうあるぞ
Slide 11
Slide 11 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 自身への戒め: 本当にユーザは嬉しい? ● 先述のルール2は「労力に見合った価値はあるか?」と問うている ○ 例: 1週間で100msを30msにするより 3日でズレた CSS を直すほうがうれしいかも ● プロダクトオーナーと合意形成するのが理想 ○ すると「どのくらいの値なら許容なんだっけ?」となる ○ これを進めていくと SLO にも繋がる ○ でも、結構たいへん 開発者 リファクタ してぇ… プロダクトオーナー 新機能リリース してぇ… 重視する観点の違いが 対立の火種に
Slide 12
Slide 12 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 今回の改善対象 ● POST されるエンドポイント一つ ○ リクエストされるデータが数種類ある ● 時間がないので以下省略! Ruby アプリケーション クライアント HTTP POST N種類のデータ 開発者 改善
Slide 13
Slide 13 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ Dashboard 整備 ぬくもり コメント 処理ブロック毎に表示 ハズレ値を少し減らすために 折れ線は p50, p75, p90, p95 の4つのみ 関心事の単位でグループウィジェット化 ● グラフをいい感じに描画する
Slide 14
Slide 14 text
#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 導入前)
Slide 15
Slide 15 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ ● Profiler ○ 初手に見る ○ 大きなボトルネックを探すため ● Traces ○ 次に見る ○ 一つの処理の流れで ● Dashboard ○ 修正リリース後に影響確認 それぞれの使い分け Traces Profiler Dashboard ボトルネックを探る 全体影響確認 個別事例から探る リリース後
Slide 16
Slide 16 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ ● 不要なクエリ削除 ○ Profiler で発見 ■ 「あれ、何でこのテーブルへのクエリがあるんだ?」 ○ 定数に置換可能だった ○ 合計2件あった 得られた成果
Slide 17
Slide 17 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 得られた成果 ● クエリ回数削減 ○ Profiler であたりを付けて実装を読んだら発見 ■ 処理の流れで重めの同じクエリを2回実行していた ■ オブジェクトにキャッシュして1回に削減 ○ Trace でも同じようなものを発見 ■ 同様に改善 ○ 合計4箇所あった
Slide 18
Slide 18 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 得られた成果 ● レイテンシが下がった ○ 約 50ms くらい、エンジニアの稼働で2人週弱 ○ 先述したルール2を振り返ると物足りないかも?
Slide 19
Slide 19 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 得られた成果 ● 副次的な効果として ○ 可読性の低い部分を改修した ○ テストを追加した
Slide 20
Slide 20 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ 振り返り ● 連鎖して改善点が見つけられる ○ 似たような問題が意外とあった ■ 目的なくコードリーディングすると案外見つけられない… ● 実装を修正することで可読性の改善点も具体的に見えてくる ● レイテンシを指標にしていたのに Profiler の CPU Time を見ていた ○ WALL Time を見るべきだったかも? ● Trace の活用余地がまだある ○ 最近登場した Waterfall が便利そう!
Slide 21
Slide 21 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ まとめ 03
Slide 22
Slide 22 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ まとめ ● Code - Test - Monitor 開発フロー で監視も共に育てる ● 性能改善を取っ掛かりに技術的負債解消を始める ○ 連鎖して具体的な改善タスクが出てくる ● APM の Traces, Continuous Profiler 最高便利 ○ どんどん新しい機能が増えている ○ まだまだ使い込める
Slide 23
Slide 23 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ フリー素材コーナー ● ご自由にお使いください エンドユーザ1 Drawn by ujihisa https://x.gd/i1vWi エンドユーザ2 Drawn by mopp https://x.gd/OE0Sn
Slide 24
Slide 24 text
#JDDUG Datadog APM による性能改善から始める技術的負債解消@スタディサプリ ご清聴ありがとうございました