Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 による性能改善から始める技術的負債解消@スタディサプリ ご清聴ありがとうございました