#はじめに
- Webアプリケーションについて負荷試験が必要になり、初心者ながら負荷試験についての基礎事項を調べてまとめておこうと思います
- この分野に詳しい人の話をぜひ聞いてみたいものです…
#負荷試験って目的とは
- 負荷試験の目的とは、システムの可用性を高めることだと思います。そしてそれはオンプレミスの場合とクラウドの場合で異なる
-
オンプレミスの場合
- ユースケースを想定して、システムの応答性能を推測するため
- 高負荷時のシステム改善を実施するため
- 目的の性能を提供するために必要なハードウェアをあらかじめ選定するため
-
クラウドの場合
- ユースケースを想定して、システムの応答性能を推測するため
- 高負荷時のシステム改善を実施するため
- 目的の性能を提供するために必要なハードウェアをあらかじめ選定するため
- システムがスケール性を持つことを確認するため
- システムのスケール特性を把握するため
- クラウドではスケーラブルなクラウドデザインパターンを構成するのみでなく、スケール性をもつシステムを担保することが非常に重要である
-
#負荷試験の指標
- スループット
- 単位時間に処理を行う量
- webシステムでは「1秒間に処理を行うHTTPリクエストの数」を示すことが多く、rps(Request Per Second)と呼ぶ
- 「ネットワーク上を流れるデータ転送速度」として利用する場合もある
- ネットワーク帯域と呼ぶ
- 単位時間に処理を行う量
- レイテンシ
- 処理時間には2種類が存在する
- 「ユーザーから見た処理時間」
- ユーザーがリクエストを送ってレスポンスを受け取るまでの時間
- 「システムから見た処理時間」
- Webシステムがリクエストを受け取ってからレスポンスを返すまでの時間
- 2種類の処理時間には以下のような関係が成り立つ
- 「ユーザーから見た処理時間」=「システムから見た処理時間」+「データがネットワークを往復する時間」
- ブラウザを利用する場合は、ブラウザがデータを受け取ってから画面描画が完了するまでをレイテンシと呼ぶ場合もある
- 「ユーザーから見た処理時間」
- 処理時間には2種類が存在する
#システムの性能改善
- スループットの改善
- 複数のサブシステムによって構成されているWebシステムは、もっともスループットが低いサブシステムによって全体のスループットが制限される
- もっともスループットが低いサブシステムをボトルネックと呼ぶ
- ボトルネックを改善したら次のボトルネックを検知して間然するPDCAを繰り返して全体のスループットを向上させる
- ボトルネックは移動するものだと理解すること
- 重要なことは負荷試験は繰り返し実施されること
- 複数のサブシステムによって構成されているWebシステムは、もっともスループットが低いサブシステムによって全体のスループットが制限される
- レイテンシの改善
- 待ち時間を含めた各サブシステムの処理時間の総和であるため、「大きな処理時間を要している処理」から順々に改善できる点がないかを検討する
- 処理時間にとって最大の改善個所はアプリケーションの実装部分であることが多い
- 非効率なアルゴリズム
- 無駄なI/O
- データベースのインデックス不足
- アプリケーションの実装部分である場合は、プロファイラーを利用して処理の詳細な処理時間を確認することが可能
- yourkitなど
- 重要な点としてレイテンシは***「待ち時間を含めた時間」***であるため、スループットが上限に近づくと必然的に待ち時間も増加するため、裏を返せばスループットが向上すればレイテンシも改善することもありうる
#今後について
- ひとまず負荷試験を行う上での用語や性能改善については調べられたので、今後は負荷試験に利用するtoolを調べてみることにする