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 による性能改善から始める技術的負債解消@スタディサプリ ご清聴ありがとうございました