No.
2023-09-17
  • Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
  • 27
  • 28
  • 29
  • 30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Ch1. チューニングの基礎知識

TL;DR

パフォーマンスチューニングは、個々の要素の高速化ではなく、全体最適化の問題である

一箇所だけ早くても、他で詰まっていたら意味がない(=ボトルネック)

パフォーマンスチューニングは次の3つをひたすら繰り返す作業である

  1. 負荷試験の実施
  2. 実施結果の確認、原因の特定
  3. ボトルネックの改善

ボトルネックとなりうる箇所は次の5つである

  1. CPU時間
  2. メモリ領域
  3. メモリI/O帯域
  4. ネットワークI/O帯域
  5. ストレージI/O帯域

Question

  • Webサービスの高速化とは何か
  • Webサービスの高速化はなぜ必要なのか
  • Webサービスの高速化のために何をすればいいのか
  • チューニングとは何か
  • チューニングの手順は
  • チューニングで気をつけることは

3R

Webサービスの高速化とは何か

  • レイテンシ、スループットを改善すること
  • Webサービスの利用者がリクエストを送信してから、利用者にレスポンスが届くまでの時間を短くすること(=レイテンシ)
    • この一連の流れにかかる時間のことをRTT(Round Trip Time)という
    • 2.5秒以下がボーダーライン、できれば1秒未満が望ましい
  • 同時並行で処理できるリクエスト数を多くすること(=スループット)

Webサービスの高速化はなぜ必要なのか

  • ユーザー体験の向上のため
    • 利用者を逃さない
  • SEO対策に効果があるため
    • Core Web Vitalsという指標
      • LCP:
      • FID:
      • CLS:
  • コスト効率のため
    • 1つの処理でサーバーを占有する時間が短くなるため

Webサービスの高速化のために何をすればいいのか

  1. Webサービスの構造を把握する
    • マクロ的視点:アーキテクチャ全体を見る
    • ミクロ的視点:データの流れを要素ごとに分解してみる
  2. 各要素の入力・計算・出力を把握する
    • 処理が遅い = 入力・計算・出力のどこかに問題がある
    • どこかを特定するのには次の観点で分解してみると良い
      • CPU時間
      • メモリ領域
      • メモリI/O帯域
      • ネットワークI/O帯域
      • ストレージI/O帯域

チューニングとは何か

  • Webサービスをいい感じにする

「推測せず計測する」とは

  • チューニングの心構え
  • 計測結果をチューニングの出発点とする

「公平に比較する」とは

  • 計測結果を比較するときの心構え
  • 前提条件を揃えて比較する
    • アプリのバージョン
    • スペック
    • 設定値
    • ウォームアップ状況
    • 負荷の状況
    • etc…

「1つずつ比較する」とは

  • チューニングの心構え
  • 色々な改善案が思い浮かぶと思うが、一度にまとめて実施するのではなく、1つずつ適用していく
  • 時間がない時は別

チューニングの手順

  1. 負荷試験を実施
  2. 結果を確認
  3. 改善
  4. 1~3を繰り返す

チューニング時に気をつけること

  • 制約を確認する
    • インフラの構成、レスポンスデータの形式など
  • ボトルネックだけにアプローチする
    • ボトルネックでない部分を変えるとかえってパフォーマンスが落ちる
  • ボトルネックは外側から解消する
    • データの出口に近い部分から解消していく

まとめ

  • Webサービスの高速化は、ユーザー体験を向上させるだけでなく、コスト効率も向上させる、非常に重要な工程である。
  • 高速化は、パフォーマンスチューニングを実施すると効率的に実現することができる
  • パフォーマンスチューニングは、負荷試験を実施し、その結果からボトルネックを特定し、ボトルネックを解消するという3つのステップを繰り返す、地道な作業である
  • ボトルネックを解消しても無くなるわけではなく、他の場所に移動するだけである
  • ボトルネックを完全に無くすことはできない