本ガイドでは、Performance Testing Service (PTS) を用いた性能テストの計画および実行に必要な技術要件を定義します。これらの要件に従ってテストを実施することで、システムの実際の処理能力を評価し、本番環境におけるリスクを未然に防止するとともに、インフラストラクチャーが想定されるトラフィックパターンを適切に処理できることを検証できます。
適用範囲
本要件は、性能テストを実施するすべてのプロジェクトに適用されます。本ガイドでは以下の項目について説明します。
システム環境
テストメトリック
ビジネスモデルおよびテストモデル
データ量
テスト種別
ビジネスセッションとシナリオ
モニタリングおよびボトルネック分析
チューニング
PTS を用いた分散型ストレステスト
システム環境
環境の選択
システム環境は、本番環境、テスト環境、その他の環境に分類されます。性能テストは通常、本番環境または専用のテスト環境で実行されます。それぞれには以下のような利点と課題があります。
| 環境 | 利点 | 課題 |
|---|---|---|
| 本番環境 | 実際のインフラストラクチャーに対する正確な測定が可能 | テストデータの後始末が必要;スケジュールを慎重に設定しないと、稼働中のサービスに影響を与えるリスクあり |
| テスト | 実際のトラフィックから隔離されており、リスクを制御可能 | 本番環境と同等の規模での再現にはコストがかかる;結果が本番環境の挙動を正確に反映しない可能性あり |
本番環境:稼働中のサービスへの影響を避けるため、非ピーク時間帯にストレステストを実行してください。Alibaba Cloud のフルリンクストレステストは、本番環境でのテストをより効率的に実施する手法です。テスト終了後は、テストデータをクリーンアップするか、ビジネスインテリジェンス (BI) レポートから除外する必要があります。
テスト環境:本番環境の規模の一部(通常は半分、4 分の 1、または 8 分の 1)で構築します。一般的な戦略として、本番環境内に特定アプリケーション向けの独立したテストクラスターを展開する方法や、複数の環境間でデータベースを共有する方法があります。また、関連性のあるデータを維持するために、本番環境からマスク済みのデータ(通常は過去 6~12 か月分)をインポートします。
テスト環境の要件
テスト環境は、可能な限り本番環境に近い状態で構成してください。
| 要件 | 詳細 |
|---|---|
| アーキテクチャー | 本番環境と同じシステムアーキテクチャー |
| インスタンス仕様 | 同じ Elastic Compute Service (ECS) インスタンスタイプまたはコンテナの仕様 |
| ソフトウェアバージョン | 同一のオペレーティングシステム、ミドルウェア、データベース、およびアプリケーションのバージョン |
| 構成パラメーター | オペレーティングシステム、ミドルウェア、データベース、アプリケーションのパラメーターを本番環境と同一 |
| データ量 | 本番環境と同程度のオーダー(桁) |
| スケーリング手法 | ロードジェネレーターの台数を減らし、その他のリソースも比例して縮小。目標は本番環境構成の半分または 4 分の 1 |
テスト環境の調査
テスト開始前に、モニタリングおよびボトルネック分析のためのベースラインを確立するために、テスト環境の各レイヤーを調査してください。
| レイヤー | 調査対象 | 目的 |
|---|---|---|
| システムアーキテクチャー | システム構成、各レイヤーの機能、本番環境との相違点 | ボトルネック分析および生産性能評価 |
| オペレーティングシステム | OS プラットフォームおよびバージョン | ツールによるモニタリング |
| ミドルウェア | ミドルウェアの種類およびバージョン | ツールによるモニタリングおよびボトルネック分析 |
| データベース | データベースの種類およびバージョン | ツールによるモニタリングおよびボトルネック分析 |
| アプリケーション | 実行中のインスタンスおよびそのパラメーター | 問題検出およびボトルネック分析 |
ミドルウェア、データベース、アプリケーションの各レイヤーにおける問題をトレースするには、Application Real-Time Monitoring Service (ARMS) などのアプリケーションパフォーマンスマネジメント (APM) ツールをご利用ください。
テストメトリック
メトリックのカテゴリ
以下の 4 カテゴリーにわたってメトリックを追跡します。
| カテゴリ | 主なメトリック |
|---|---|
| ビジネス | 同時接続ユーザ数、トランザクション毎秒 (TPS)、成功率、レスポンスタイム (RT) |
| リソース | CPU 使用率、メモリ使用率、ディスク I/O、ネットワーク I/O、カーネルパラメーター(セマフォ、オープンファイル数) |
| アプリケーション | アイドルスレッド数、データベース接続数、ガーベッジコレクション (GC) 回数、フル GC 回数、メソッド実行時間 |
| フロントエンド | ページ読み込み時間、DNS 解決時間、接続時間、転送時間 |
メトリックのしきい値の定義
テスト実行前に、各メトリックのしきい値を定義してください。明確なしきい値がない場合、テスト結果は実用的な意味を持たなくなります。開発、運用、ビジネスなど、関係者によって期待値や重視するメトリックは異なります。
ビジネスメトリックのベンチマーク:
| メトリック | ガイドライン |
|---|---|
| レスポンスタイム (RT) | ほとんどのサービスでは 1 秒以内を推奨します。淘宝(タオバオ)などの高性能システムでは、通常数十ミリ秒単位の RT を達成しています。しきい値が平均値、中央値、p95、p99 のいずれに適用されるかを明示してください。単純な平均値で応答時間を集計すると、実際のユーザーに影響を与える遅延スパイクが隠れてしまう可能性があります |
| TPS | システム規模により異なります:中小企業向けは 50~1,000、銀行向けは 1,000~50,000、淘宝(タオバオ)などの高トラフィックプラットフォーム向けは 30,000~300,000 |
| 成功率 | 業界標準では、負荷下でも 99.6 % を上回ることが求められます |
リソースメトリックのガイドライン:
CPU 使用率は 75 % 以下に抑えてください
スワップ領域の使用は完全に回避してください
システムが容量限界に達した際に、ボトルネックとなるのは CPU、メモリ、I/O などのリソースであるべきであり、アプリケーションレベルの問題であってはなりません。リソースに起因するボトルネックの場合、リソースを追加することで処理能力を拡張できますが、アプリケーションに起因するボトルネックの場合、リソースを追加しても処理能力は向上しません
ビジネスモデル
ビジネスモデルの役割
各ビジネス運用(ログイン、検索、カート追加、支払いなど)は、異なる量のシステムリソースを消費します。ビジネス運用の種類とその比率の組み合わせが、システム全体の処理能力を決定します。テストトラフィックの構成が本番環境と一致しない場合、テスト結果には実用的な価値がありません。
例えば、EC サイトでは、プロモーションの種類や商品カテゴリーによって、読み取り中心の操作と書き込み中心の操作の比率が変化します。PTS における正確なトラフィックモデリングは、こうしたパターンを捉え、真のシステムボトルネックを明らかにします。
ビジネスタイプを選択
高ボリューム、高リスク、高成長のビジネス運用を代表的なテストケースとして選択してください。
すでに本番環境で稼働中のシステムの場合:
ピーク時におけるビジネス運用の種類とボリュームを収集します。時間帯によって構成が大きく異なる場合は、複数のビジネスモデルを定義してください
ピーク時の高リソース消費や異常を示すタイムウィンドウを特定し、その根本原因を調査してください
過去の本番環境インシデントをレビューします。以前のテストで除外されていたビジネス運用がインシデントの原因であった場合、今後のテストモデルに追加してください
まだ本番環境に投入されていないシステムの場合:
関係者インタビューおよび要件分析を通じて、ビジネス運用の種類と比率を決定してください
特定のビジネス運用がプロモーションやイベント時に急増する可能性を評価してください
初期のテスト実行後に、各運用ごとのリソース消費をレビューします。低比率の運用が不釣り合いに高いリソースを消費している場合、その重みをモデル内で調整してください
データ量
基本データ量
基本データ量とは、データベース内に既に存在するデータ(履歴レコード、参照データ、累積されたビジネスデータ)を指します。既存データの量はクエリパフォーマンスに直接影響を与えます。数千件のレコードに対する検索と、数百万件のレコードに対する検索では、動作が大きく異なります。
要件:
テスト環境のデータ量は、本番環境と同程度のオーダー(桁)に揃えてください
今後 3 年間のデータ成長を見込んでください。データが急速に増加する場合は、テスト環境に追加のデータをロードしてください
本番環境にテストアカウントを挿入する場合は、十分なデータ準備およびクリーンアップロジックを計画してください
フルリンクストレステストにおいても、テスト環境と本番環境のデータ量は同程度のオーダー(桁)である必要があります
パラメータ化されたデータ量
パラメータ化されたデータは、テスト入力(ユーザー ID、商品 ID、検索語など)の可変性を制御します。小さなパラメータセットではキャッシュヒットが発生し、パフォーマンス結果が過大評価される可能性があります。
要件:
パラメータ化されたデータ量を最大化してください。必要に応じて、キャッシュをクリアするか、プログラムによって追加のデータを生成してください
パラメータ化されたデータは現実的に分布させてください。あるビジネス運用が地理的分布パターンを持つ場合(例:地域固有の在庫照会)、テストデータにもそれを反映させてください
テストモデル
テストモデルは、ビジネスモデルから派生します。多くの場合、両者は同一ですが、技術的制約やセキュリティポリシーにより、あるビジネス運用をシミュレートできない場合は、その運用をテストモデルから除外し、残りの比率を再計算してください。
除外された運用が重大なリスクを伴う場合(例:支払いフロー)、そのリスクを個別に評価してください。リスクが高い場合は、単に除外するのではなく、代替のテスト手法を検討してください。
テスト種別
性能テストの種別は、大きく「負荷テスト」と「ストレステスト」の 2 つに分けられ、さらにいくつかの特殊なバリエーションがあります。
| テスト種別 | VU / スループット | 持続時間 | 使用タイミング | 必須? |
|---|---|---|---|---|
| 単一トランザクションベンチマークテスト | 低 | 短 | 個別の運用に対するベースラインパフォーマンスを確立する | 任意 |
| 単一トランザクション負荷テスト | 段階的増加 | 中 | 特定の運用に対するリソース消費を評価する。本番環境未投入のシステムに推奨 | 任意 |
| 混合トランザクション負荷テスト(キャパシティテスト) | 平均生産量 | 中~長 | 現実的な混合ワークロード下でのシステム全体の処理能力を判定する | 必須 |
| 混合トランザクションストレステスト | 平均以上 | 中 | 予想されるピーク負荷を超えて負荷をかけ、システムの限界点を特定する | 任意 |
| ビジネスミューテーションテスト | 単一運用で急増 | 短 | 特定の運用が予期せず急増した際のシステム挙動を検証する | 任意 |
| 混合トランザクション安定性テスト | 平均生産量 | 長(数時間以上) | 長期間にわたる継続的なパフォーマンスを検証する | 必須 |
| 混合トランザクション信頼性テスト | 平均生産 | 長 | 障害条件下におけるフェールオーバー、復旧、劣化挙動をテストする | 任意 |
| バッチテスト | 可変 | 可変 | バッチ処理のパフォーマンスを測定する | 任意 |
| 混合トランザクションへのバッチ影響テスト | 混合 | 長 | バッチジョブが同時オンライントランザクションのパフォーマンスに与える影響を評価する | 任意 |
進行戦略
シンプルなテスト種別から始め、徐々に複雑な種別へと進めてください。まず単一トランザクションベンチマークテストを実行してベースラインを確立し、次に混合トランザクション負荷テスト、その後ストレステストおよび安定性テストへと進めてください。最低限、2 つの必須テスト種別(混合トランザクション負荷テストおよび混合トランザクション安定性テスト)は必ず実行してください。
単一のテスト種別では、すべてのリスクを検出することはできません。異なるテスト種別は、異なる障害モードを対象としています。システムのリスクプロファイルに基づいて、優先順位を付けて実施してください。
ビジネスセッション
ビジネストランザクションとは、完全なユーザーのワークフローを表す、順序付けられた API 呼び出しのシーケンスです。たとえば、一般的な E コマースのトランザクションは、次のようなパターンに従う場合があります。
製品カタログの閲覧
特定の製品の検索
製品詳細ページの表示
カートへの商品追加
ログイン
チェックアウトの完了
支払いの実行
これらのセッションの精度は、テストが現実のパフォーマンスをどれだけ正確に反映するかに直接影響します。
要件:
実際の本番環境のビジネスルールおよびユーザーのワークフローに基づいてセッションを設計してください
ユーザーの思考時間(think time)を模倣するために、各ステップ間に現実的な待機時間を含めてください。思考時間がなければ、テストは現実のトラフィックパターンと一致しない不自然なリクエスト頻度を生成します
サーバー応答を検証するために、キーポイントにチェックポイント(アサーション)を追加してください。詳細については、「インターフェイス応答パラメーター」をご参照ください
すべての可変データ(ユーザー認証情報、商品 ID、検索クエリなど)をパラメータ化し、データ量を最大化してください
シナリオ
ストレステストシナリオとは、複数の HTTP/HTTPS API 呼び出しまたは URL を組み合わせて、実際の本番環境トラフィックをシミュレートするワークロードです。各シナリオは、負荷プロファイル(圧力モード、ラップアップ手法、持続時間)を定義します。
最重要要件:テストにおける各ビジネス運用の TPS 比率は、本番環境のピーク時間帯における実際のビジネス比率と一致しなければなりません。
RPS モードおよび同時実行数モード
PTS では、2 種類の負荷モードがサポートされています。実際のシステムが受信するトラフィックのタイプに合ったモードを選択してください。
オープンワークロードモデル(RPS モード:推奨):リクエストの到着率を制御します。Web アプリケーションなど、制御不能な外部トラフィックを受けるシステムに適しています。最も一般的なケースです。
クローズドワークロードモデル(同時実行数モード):同時接続ユーザ数を制御します。コールセンターのように、アクセスを制御するシステムに適しています。
実際のシステムがオープンワークロードであるにもかかわらず、クローズドワークロードモデルでテストを実施した場合、テスト結果は実際の本番環境の挙動を反映しません。同時実行数モードでは、応答時間に基づいて暗黙的にリクエスト率が制限されるため、実際のトラフィック条件下で顕在化するパフォーマンスの問題が隠れてしまいます。
例:2 つのインターフェイス A および B の本番環境比率は 1:4 であり、それぞれの応答時間は 1 ms および 100 ms です。
| モード | 設定 | 結果 |
|---|---|---|
| RPS モード(推奨) | A を 100 RPS、B を 400 RPS に設定 | 直接的な 1:4 の比率。ビジネスモデルは本番環境と一致 |
| 同時実行モード | A の同時接続ユーザ数を 1 に、B の同時接続ユーザ数を 400 に設定します | 応答時間の 100 倍の差を補正する必要があります。スループット比を 1:4 にするには、同時実行数比を 1:400 とする必要があります |
RPS モードでは、応答時間の差異に基づく同時実行数の調整計算が不要であり、トラフィック構成をより正確に制御できます。
モニタリング
包括的モニタリングの重要性
性能テスト中のモニタリングには、リアルタイムでのボトルネック検出およびテスト後の根本原因分析という 2 つの目的があります。すべてのレイヤーにわたる包括的なメトリックがなければ、ボトルネックの原因を特定することは推測に過ぎません。
モニタリング対象のメトリック
| レイヤー | 主なメトリック |
|---|---|
| オペレーティングシステム | CPU 使用率(User、Sys、Wait、Idle)、メモリ使用率(スワップを含む)、ディスク I/O、ネットワーク I/O、カーネルパラメーター |
| ミドルウェア | スレッドプール、Java Database Connectivity (JDBC) 接続プール、Java 仮想マシン (JVM) メトリック(GC 頻度、フル GC 頻度、ヒープサイズ) |
| データベース | 遅延 SQL ステートメント、ロック、キャッシュヒット率、セッション数、プロセス数 |
| アプリケーション | メソッド実行時間、同期/非同期処理、バッファリング、キャッシュ動作 |
ボトルネック分析
性能ボトルネックは、通常、オペレーティングシステムのリソース、ミドルウェアの構成、データベースの問題、アプリケーションのロジックの 4 つのカテゴリに分類されます。
レイヤー別分析の焦点
| レイヤー | 焦点領域 |
|---|---|
| オペレーティングシステム | CPU、メモリ、ディスク I/O、ネットワーク I/O |
| ミドルウェア | スレッドプール、JDBC 接続プール、JVM メトリック(GC 頻度、フル GC 頻度、ヒープサイズ) |
| データベース | 遅延 SQL ステートメント、ロック待ち、デッドロック、キャッシュヒット率、セッション数、プロセス数 |
| アプリケーション | メソッド実行時間、アルゴリズム効率、同期/非同期処理、キャッシュ使用状況、バッファリング |
| ロードジェネレーター | ロードジェネレーター機器のリソース消費。通常、ロードジェネレーター自体がボトルネックになることは稀です。PTS には、これを自動的に処理する組み込みの保護およびスケジューリングメカニズムがあります |
各レイヤーにおけるターゲットを絞った分析により、効率的なチューニングが可能になります。無関係なリソースを追加するのではなく、実際のボトルネックを修正してください。
チューニング
ボトルネックを特定した後、システムをチューニングし、改善効果を検証するために再テストを実施してください。主なチューニング対象は以下のとおりです。
| レイヤー | チューニング対象 |
|---|---|
| ミドルウェア | スレッドプールサイズ、データベース接続プールサイズ、JVM パラメーター |
| データベース | 遅延 SQL の最適化、デッドロックおよびロック待ちの解消、キャッシュヒット率の向上、プロセスおよびセッションパラメーターの調整 |
| アプリケーション | メソッド実行時間、アルゴリズム最適化、同期処理から非同期処理への変更、キャッシュ戦略、バッファーのサイズ調整 |
| システムリソース | CPU やメモリの高使用率は、通常、ハードウェア不足ではなく、アプリケーションの設定やパラメーター構成の不適切さに起因します。リソースのスケーリングを行う前に、アプリケーションレベルの問題を解決してください |
PTS を用いた分散型ストレステスト
Performance Testing Service (PTS) は、分散型ストレステストを実施するための SaaS プラットフォームです。追加のインストールやデプロイメントは不要です。
トラフィックシミュレーション
PTS は、世界中の数百の都市および複数のキャリアにまたがるコンテンツデリバリーネットワーク (CDN) ノードからテストトラフィックを生成します。このアプローチにより、地理的分布やキャリア固有のルーティングを含む、現実のエンドユーザーのアクセスパターンをシミュレートできます。
シナリオ設計
主流のブラウザ録画プラグインを使用してシナリオの録画を行うか、ビジュアルインターフェイスを通じて API の逐次実行および並列実行を編成できます(コーディング不要)。
データファイル、ビルトイン関数、文字列操作、応答抽出を用いてリクエストをパラメータ化します。PTS は「データファクトリー」として機能し、簡単なエンコーディングでリクエストパラメーターを整形します。
API 呼び出し間で Cookie およびセッション状態を維持し、多段階の思考時間やトラフィック制御をサポートする拡張可能な命令を提供します。
本格的なテストを実行する前に、シナリオおよび個別の API をデバッグしてください。
負荷制御
2 種類の負荷モード: 同時実行数モードおよび秒間リクエスト数(RPS)モード
高速起動: 数分以内にストレステストを開始できます
リアルタイム調整: トラフィックの変更は数秒以内に反映されます
パルス機能: 1 秒あたり数百万クエリ(QPS)の瞬間的なスパイクを生成できます
安全制御: 必要に応じて、ストレステストトラフィックを即座に停止できます
レポート
PTS は、各テスト中に同時実行数、TPS、RT、および各 API のサンプリングログといったリアルタイムデータを収集します。テスト後の分析用に、レポートが自動的に生成されます。
対応業種
PTS は、EC、メディア、金融・保険、物流、広告マーケティング、ソーシャルネットワーキングなど、幅広い業種のワークロードをサポートします。