マイクロサービス ストレステスト機能は、仮想プライベートクラウド (VPC) にデプロイされているマイクロサービスのストレステストを実行するために使用されます。 パフォーマンス テスト (PTS) コンソールで簡単な設定を行った後、マイクロサービスのストレステストを迅速に実行できます。 このトピックでは、gRPC マイクロサービスのストレステストを実行する方法について説明します。
背景情報
典型的なマイクロサービスアーキテクチャでは、各サービスはゲートウェイを使用して公開され、各サービスのセキュリティはネットワーク分離を実装することで確保されます。 ほとんどの場合、クラウド内のマイクロサービスは VPC にデプロイされ、より安全になります。 ネットワーク分離は、VPC 内のマイクロサービスのストレステストにおいて大きな課題となります。 従来のソリューションは、VPC に基づいてストレステストツールを構築し、そのツールを使用してマイクロサービスのストレステストを実行することです。 たとえば、Apache JMeter ツールを使用してストレステストを実行できます。 Apache JMeter ツールの構築には時間がかかり、コーディングが必要であり、Apache JMeter ツールはマイクロサービスのストレステストに対して限定的なサポートしか提供できません。 PTS によって開発されたマイクロサービス ストレステスト機能は、これらの問題を解決するのに役立ちます。 この機能を使用すると、PTS コンソールで簡単な設定を行った後、マイクロサービスのストレステストを迅速に実行できます。
手順
PTS [コンソール] にログインし、 を選択し、 をクリックします。 gRPC
[grpc シナリオの作成] ページで、[シナリオ名] パラメーターを設定し、[proto ファイルのアップロード] をクリックして必要な proto ファイルをアップロードします。
説明アップロードする proto ファイルの名前が既存の proto ファイルと同じ名前の場合、既存の proto ファイルは上書きされます。 アップロードする proto ファイルと関連するローカル proto ファイルを比較する場合は、[アクション] 列でアップロードされた proto ファイルの MD5 値を取得し、その MD5 値をローカル proto ファイルの MD5 値と比較して、ファイルが異なるかどうかを確認できます。
[シナリオ設定] タブで、[grpc リクエストノードの追加] をクリックして、目的のセッションに必要なテストノードを追加します。
シナリオの設定
ビジネスメッセージの右側にある アイコンをクリックしてビジネスメッセージを展開し、基本情報、出力パラメーター、チェックポイントを設定します。
パラメーター | 説明 | 例 |
サービス URL | gRPC マイクロサービスの IP アドレス。 | 127.0.0.1 |
サービスポート | gRPC マイクロサービスのポート番号。 | 50051 |
リクエストタイムアウト期間 | テストエンドがテスト対象エンドからの応答を待つ最大期間。単位:ミリ秒。 | 5000 |
SSL/TLS | 安全な接続を確立するかどうかを指定します。 | オフ |
関数名 | gRPC メソッドのフルネーム。 説明 このパラメーターは、 | package.service/method |
メタデータ | このパラメーターの値は、HTTP リクエストヘッダーに似ています。 このパラメーターは、 | a:1,b:2 説明 複数のキーと値のペアはコンマ (,) で区切ります。 |
JSON 形式のリクエスト | proto ファイルで JSON 形式で記述されたメッセージ。 |
|
出力パラメーターの設定
セッションの [出力パラメーターの定義] タブで、セッションの出力パラメーターを設定します。 詳細については、「出力パラメーター」をご参照ください。
チェックポイントを構成する
セッションの [チェックポイント (アサーション)] タブで、セッションのチェックポイントを設定します。 詳細については、「チェックポイント (アサーション)」をご参照ください。
(オプション) コントローラーとタイマー
異なるストレステストシナリオの要件に基づいて、コントローラーとタイマーを追加できます。
[シナリオ設定] タブで、[コントローラーの追加] をクリックして必要なコントローラーを選択します。
ループコントローラー: テストノードがループで実行される回数を制御します。
ループコントローラーを選択し、コントローラーの横にある
アイコンをクリックします。 次に、ループで実行するノードを選択し、ループ回数を指定します。 ストレステスト中、ループコントローラーで指定されたテストノードは、指定された回数だけ順番に実行されます。
トランザクションコントローラー: トランザクションコントローラー内のすべてのテストノードは 1 つのトランザクションとしてカウントされます。 [親サンプルの生成] スイッチと [サンプルにタイマーと前処理/後処理の期間を含める] スイッチが表示されます。
親サンプルの生成:
このスイッチがオンになっている場合、トランザクションコントローラー内の各ノードのストレステスト結果はストレステストレポートに個別に記録されず、トランザクションコントローラーの結果として集計されます。
このスイッチがオフになっている場合、トランザクションコントローラーとコントローラー内のテストノードのストレステスト結果がレポートに表示されます。
サンプルにタイマーと前処理/後処理の期間を含める: このスイッチがオンになっている場合、ストレステストレポートのトランザクションコントローラーの平均応答時間は、すべてのテストノード、タイマー、前処理/後処理の平均応答時間の合計です。 このスイッチがオフになっている場合、トランザクションコントローラーの平均応答時間は、すべてのテストノードの平均応答時間の合計のみです。
1 回だけコントローラー: コントローラーに追加されたノードは 1 回だけ実行されます。
[シナリオ設定] タブで、[タイマーの追加] をクリックして必要なタイマーを選択します。
定数タイマー: ストレステスト中の休止期間を示す休止期間を指定します。単位:ミリ秒。
同期タイマー: [タイムアウト] と [シミュレートされたユーザー数] の値を指定します。これは、指定された時間範囲内に特定のユーザー数に達した後にストレステストがトリガーされることを示します。 ただし、指定された時間範囲内に特定のユーザー数に達しない場合、継続的な待機なしでテストがトリガーされます。
統一ランダムタイマー: 休止期間を指定します。 [一定遅延オフセット] と [ランダム遅延] を設定できます。 一定遅延オフセットは固定休止時間を示し、ランダム遅延は最大ランダム休止時間を示します。 統一ランダムタイマーの休止期間は、一定遅延オフセットで指定された固定休止時間と、ランダム遅延で指定された時間範囲内のランダム値の合計です。 各ランダム値は等しい発生確率を持ちます。
ガウス タイマー: 休止期間を指定します。 ガウス タイマーは統一ランダムタイマーに似ています。 [一定遅延オフセット] と [ランダム遅延] を設定できます。 ランダム休止時間が正規分布に準拠する必要がある場合は、ガウス タイマーを使用できます。
固定スループットタイマー: テストノードがスループットに基づいて実行されるようにスループットを指定します。 条件を設定し、対応するスループットを指定できます。 設定できる条件には、[現在のスレッドのみ]、[すべてのアクティブスレッド]、[現在のリンクのアクティブスレッド]、[グローバルアクティブスレッド]、[現在のリンクのグローバルアクティブスレッド] があります。
PTSシナリオを作成する
パラメーター | 説明 |
ストレスの原因 |
|
負荷モード |
|
自動増加モード |
|
最大 VU 数 | 仮想ユーザーモードでのシナリオ全体の最大 VU 数。 |
増加率 | 段階的増加モードでは、増加率を指定する必要があります。 |
単一負荷レベルの期間 | 段階的増加モードでは、単一負荷レベルの期間内にビジネス上の問題を発見できるように、単一負荷レベルの期間を 1 分以上に設定する必要があります。 |
テストの合計期間 | ストレステストの期間が増加する場合、期間は次の式を使用して計算された値以上になります。単一負荷レベルの期間/増加量 × 1.1 (切り上げ)。 ただし、期間は 24 時間を超えることはできません。 |
指定された IP アドレスの数 | 負荷をかける IP アドレスの数。 詳細については、「負荷をかける IP アドレスの数を指定する」をご参照ください。 |
リージョン固有のトラフィック | ストレステスターが配置されているリージョンを設定するかどうかを指定します。 このスイッチをオンにして、ローカルユーザートラフィックをシミュレートできます。 このスイッチをオンにした後、ストレステスターのリージョン分布を設定できます。 これにより、負荷トラフィックのリージョン分布のカスタマイズが実装されます。 詳細については、「カスタムトラフィック」をご参照ください。 |
ストレステストタスクの開始
[保存して開始] をクリックします。 [注記] ページで、[今すぐ実行] と [テストは許可されており、適用される法律および規制に準拠しています。] を選択し、[開始] をクリックします。
シナリオをデバッグするには、[デバッグ] をクリックします。 詳細については、「シナリオのデバッグ」をご参照ください。
次のステップ
サンプルシナリオ
このセクションでは、特定の proto ファイルに基づいて gRPC ストレステストシナリオを作成する方法について説明します。
gRPC マイクロサービスと gRPC メソッドが定義されている proto ファイルをアップロードします。 CreateShelf は、ストレステストを実行する gRPC メソッドであるとします。 proto ファイルで CreateShelf メソッドを定義するサンプルコード:
syntax = "proto3"; package bookstore; service Bookstore { rpc ListShelves (google.protobuf.Empty) returns (ListShelvesResponse) {} //棚一覧を取得 rpc CreateShelf (CreateShelfRequest) returns (Shelf) {} //棚を作成 } message ListShelvesResponse { repeated Shelf shelves = 1; } message CreateShelfRequest { Shelf shelf = 1; }
[grpc シナリオの作成] ページで、[proto ファイルのアップロード] をクリックして上記の proto ファイルをアップロードします。
[シナリオ設定] タブで次のパラメーターを設定した後、[保存して開始] をクリックします。
関数名: このパラメーターを bookstore.Bookstore/CreateShelf に設定します。
説明上記の proto ファイルのコードでは、パッケージ名は bookstore、API 操作名は Bookstore、メソッド名は CreateShelf です。 この例では、関数名パラメーターを bookstore.Bookstore/CreateShelf に設定する必要があります。
JSON 形式のリクエスト: JSON 形式のリクエストフィールドに次のコードを入力します。
{ "shelf": { "id": 1, "theme": "hello" } }
上記の proto ファイルのコードでは、CreateShelf メソッドの入力パラメーターは CreateShelfRequest です。 次のコードは、Shelf フィールドのカスタム値を示しています。
syntax = "proto3"; package bookstore; message Shelf { int64 id = 1; //棚ID string theme = 2; //棚のテーマ }