Ch1. チューニングの基礎知識
TL;DR
パフォーマンスチューニングは、個々の要素の高速化ではなく、全体最適化の問題である
一箇所だけ早くても、他で詰まっていたら意味がない(=ボトルネック)
パフォーマンスチューニングは次の3つをひたすら繰り返す作業である
- 負荷試験の実施
- 実施結果の確認、原因の特定
- ボトルネックの改善
ボトルネックとなりうる箇所は次の5つである
- CPU時間
- メモリ領域
- メモリI/O帯域
- ネットワークI/O帯域
- ストレージI/O帯域
Question
- Webサービスの高速化とは何か
- Webサービスの高速化はなぜ必要なのか
- Webサービスの高速化のために何をすればいいのか
- チューニングとは何か
- チューニングの手順は
- チューニングで気をつけることは
3R
Webサービスの高速化とは何か
- レイテンシ、スループットを改善すること
- Webサービスの利用者がリクエストを送信してから、利用者にレスポンスが届くまでの時間を短くすること(=レイテンシ)
- この一連の流れにかかる時間のことをRTT(Round Trip Time)という
- 2.5秒以下がボーダーライン、できれば1秒未満が望ましい
- 同時並行で処理できるリクエスト数を多くすること(=スループット)
Webサービスの高速化はなぜ必要なのか
- ユーザー体験の向上のため
- 利用者を逃さない
- SEO対策に効果があるため
- Core Web Vitalsという指標
- LCP:
- FID:
- CLS:
- Core Web Vitalsという指標
- コスト効率のため
- 1つの処理でサーバーを占有する時間が短くなるため
Webサービスの高速化のために何をすればいいのか
- Webサービスの構造を把握する
- マクロ的視点:アーキテクチャ全体を見る
- ミクロ的視点:データの流れを要素ごとに分解してみる
- 各要素の入力・計算・出力を把握する
- 処理が遅い = 入力・計算・出力のどこかに問題がある
- どこかを特定するのには次の観点で分解してみると良い
- CPU時間
- メモリ領域
- メモリI/O帯域
- ネットワークI/O帯域
- ストレージI/O帯域
チューニングとは何か
- Webサービスをいい感じにする
「推測せず計測する」とは
- チューニングの心構え
- 計測結果をチューニングの出発点とする
「公平に比較する」とは
- 計測結果を比較するときの心構え
- 前提条件を揃えて比較する
- アプリのバージョン
- スペック
- 設定値
- ウォームアップ状況
- 負荷の状況
- etc…
「1つずつ比較する」とは
- チューニングの心構え
- 色々な改善案が思い浮かぶと思うが、一度にまとめて実施するのではなく、1つずつ適用していく
- 時間がない時は別
チューニングの手順
- 負荷試験を実施
- 結果を確認
- 改善
- 1~3を繰り返す
チューニング時に気をつけること
- 制約を確認する
- インフラの構成、レスポンスデータの形式など
- ボトルネックだけにアプローチする
- ボトルネックでない部分を変えるとかえってパフォーマンスが落ちる
- ボトルネックは外側から解消する
- データの出口に近い部分から解消していく
まとめ
- Webサービスの高速化は、ユーザー体験を向上させるだけでなく、コスト効率も向上させる、非常に重要な工程である。
- 高速化は、パフォーマンスチューニングを実施すると効率的に実現することができる
- パフォーマンスチューニングは、負荷試験を実施し、その結果からボトルネックを特定し、ボトルネックを解消するという3つのステップを繰り返す、地道な作業である
- ボトルネックを解消しても無くなるわけではなく、他の場所に移動するだけである
- ボトルネックを完全に無くすことはできない