すべてのプロダクト
Search
ドキュメントセンター

Performance Testing:gRPC マイクロサービスのストレステストを実行する

最終更新日:Jan 08, 2025

マイクロサービス ストレステスト機能は、仮想プライベートクラウド (VPC) にデプロイされているマイクロサービスのストレステストを実行するために使用されます。 パフォーマンス テスト (PTS) コンソールで簡単な設定を行った後、マイクロサービスのストレステストを迅速に実行できます。 このトピックでは、gRPC マイクロサービスのストレステストを実行する方法について説明します。

背景情報

典型的なマイクロサービスアーキテクチャでは、各サービスはゲートウェイを使用して公開され、各サービスのセキュリティはネットワーク分離を実装することで確保されます。 ほとんどの場合、クラウド内のマイクロサービスは VPC にデプロイされ、より安全になります。 ネットワーク分離は、VPC 内のマイクロサービスのストレステストにおいて大きな課題となります。 従来のソリューションは、VPC に基づいてストレステストツールを構築し、そのツールを使用してマイクロサービスのストレステストを実行することです。 たとえば、Apache JMeter ツールを使用してストレステストを実行できます。 Apache JMeter ツールの構築には時間がかかり、コーディングが必要であり、Apache JMeter ツールはマイクロサービスのストレステストに対して限定的なサポートしか提供できません。 PTS によって開発されたマイクロサービス ストレステスト機能は、これらの問題を解決するのに役立ちます。 この機能を使用すると、PTS コンソールで簡単な設定を行った後、マイクロサービスのストレステストを迅速に実行できます。

手順

  1. PTS [コンソール] にログインし、 を選択し、 をクリックします。パフォーマンステスト > シナリオの作成gRPC

  2. [grpc シナリオの作成] ページで、[シナリオ名] パラメーターを設定し、[proto ファイルのアップロード] をクリックして必要な proto ファイルをアップロードします。

    説明

    アップロードする proto ファイルの名前が既存の proto ファイルと同じ名前の場合、既存の proto ファイルは上書きされます。 アップロードする proto ファイルと関連するローカル proto ファイルを比較する場合は、[アクション] 列でアップロードされた proto ファイルの MD5 値を取得し、その MD5 値をローカル proto ファイルの MD5 値と比較して、ファイルが異なるかどうかを確認できます。

  3. [シナリオ設定] タブで、[grpc リクエストノードの追加] をクリックして、目的のセッションに必要なテストノードを追加します。

シナリオの設定

ビジネスメッセージの右側にある ryi アイコンをクリックしてビジネスメッセージを展開し、基本情報、出力パラメーター、チェックポイントを設定します。

パラメーター

説明

サービス URL

gRPC マイクロサービスの IP アドレス。

127.0.0.1

サービスポート

gRPC マイクロサービスのポート番号。

50051

リクエストタイムアウト期間

テストエンドがテスト対象エンドからの応答を待つ最大期間。単位:ミリ秒。

5000

SSL/TLS

安全な接続を確立するかどうかを指定します。

オフ

関数名

gRPC メソッドのフルネーム。

説明

このパラメーターは、パッケージ名.API 操作名/メソッド名 形式で設定します。

package.service/method

メタデータ

このパラメーターの値は、HTTP リクエストヘッダーに似ています。 このパラメーターは、key:value 形式で設定します。

a:1,b:2

説明

複数のキーと値のペアはコンマ (,) で区切ります。

JSON 形式のリクエスト

proto ファイルで JSON 形式で記述されたメッセージ。

{
     "shelf": {
        "id": 1,
        "theme": "hello"
        }
 }

出力パラメーターの設定

セッションの [出力パラメーターの定義] タブで、セッションの出力パラメーターを設定します。 詳細については、「出力パラメーター」をご参照ください。

チェックポイントを構成する

セッションの [チェックポイント (アサーション)] タブで、セッションのチェックポイントを設定します。 詳細については、「チェックポイント (アサーション)」をご参照ください。

(オプション) コントローラーとタイマー

異なるストレステストシナリオの要件に基づいて、コントローラーとタイマーを追加できます。

  • [シナリオ設定] タブで、[コントローラーの追加] をクリックして必要なコントローラーを選択します。

    • ループコントローラー: テストノードがループで実行される回数を制御します。

      ループコントローラーを選択し、コントローラーの横にある 循环控制器的更多图标 アイコンをクリックします。 次に、ループで実行するノードを選択し、ループ回数を指定します。 ストレステスト中、ループコントローラーで指定されたテストノードは、指定された回数だけ順番に実行されます。

    • トランザクションコントローラー: トランザクションコントローラー内のすべてのテストノードは 1 つのトランザクションとしてカウントされます。 [親サンプルの生成] スイッチと [サンプルにタイマーと前処理/後処理の期間を含める] スイッチが表示されます。

      • 親サンプルの生成:

        • このスイッチがオンになっている場合、トランザクションコントローラー内の各ノードのストレステスト結果はストレステストレポートに個別に記録されず、トランザクションコントローラーの結果として集計されます。

        • このスイッチがオフになっている場合、トランザクションコントローラーとコントローラー内のテストノードのストレステスト結果がレポートに表示されます。

      • サンプルにタイマーと前処理/後処理の期間を含める: このスイッチがオンになっている場合、ストレステストレポートのトランザクションコントローラーの平均応答時間は、すべてのテストノード、タイマー、前処理/後処理の平均応答時間の合計です。 このスイッチがオフになっている場合、トランザクションコントローラーの平均応答時間は、すべてのテストノードの平均応答時間の合計のみです。

    • 1 回だけコントローラー: コントローラーに追加されたノードは 1 回だけ実行されます。

  • [シナリオ設定] タブで、[タイマーの追加] をクリックして必要なタイマーを選択します。

    • 定数タイマー: ストレステスト中の休止期間を示す休止期間を指定します。単位:ミリ秒。

    • 同期タイマー: [タイムアウト][シミュレートされたユーザー数] の値を指定します。これは、指定された時間範囲内に特定のユーザー数に達した後にストレステストがトリガーされることを示します。 ただし、指定された時間範囲内に特定のユーザー数に達しない場合、継続的な待機なしでテストがトリガーされます。

    • 統一ランダムタイマー: 休止期間を指定します。 [一定遅延オフセット][ランダム遅延] を設定できます。 一定遅延オフセットは固定休止時間を示し、ランダム遅延は最大ランダム休止時間を示します。 統一ランダムタイマーの休止期間は、一定遅延オフセットで指定された固定休止時間と、ランダム遅延で指定された時間範囲内のランダム値の合計です。 各ランダム値は等しい発生確率を持ちます。

    • ガウス タイマー: 休止期間を指定します。 ガウス タイマーは統一ランダムタイマーに似ています。 [一定遅延オフセット][ランダム遅延] を設定できます。 ランダム休止時間が正規分布に準拠する必要がある場合は、ガウス タイマーを使用できます。

    • 固定スループットタイマー: テストノードがスループットに基づいて実行されるようにスループットを指定します。 条件を設定し、対応するスループットを指定できます。 設定できる条件には、[現在のスレッドのみ][すべてのアクティブスレッド][現在のリンクのアクティブスレッド][グローバルアクティブスレッド][現在のリンクのグローバルアクティブスレッド] があります。

PTSシナリオを作成する

パラメーター

説明

ストレスの原因

  • インターネット: ストレステストを開始するノードは世界中にあります。 対応するノードリソース (IP アドレス) は、ストレステストの規模に基づいて割り当てられます。

  • Alibaba Cloud 仮想プライベートクラウド (VPC): Alibaba Cloud VPC でのストレステストは、VPC 経由で実行されます。 ストレステストでは、ストレステスターとテスト対象サーバーは同じリージョンにあります。 詳細については、「Alibaba Cloud VPC でのストレステスト」をご参照ください。

負荷モード

  • 仮想ユーザーモード: クライアントの観点から、ビジネスシステムの各ノードでホストできるオンラインユーザー数を知りたい場合は、このモードを使用してターゲット仮想ユーザーを設定できます。

  • 1 秒あたりのリクエスト数 (RPS) モード: RPS モードはスループットモードです。 このモードでは、RPS を指定してサーバーの観点からシステムのスループット機能を測定し、仮想ユーザーモードから RPS モードへの面倒な変換をなくし、ストレステストを迅速に実装できます。

自動増加モード

  • 手動調整: 仮想ユーザーの数は固定です。 対応する [負荷予測チャート] は、仮想ユーザーの数を示すフラットラインです。 ストレステストは常に特定の数の仮想ユーザーに基づいて実行されます。

  • 段階的増加: 仮想ユーザーの数は段階的に増加します。 これは、システムに負荷をかける仮想ユーザーの数が段階的に増加することを意味します。 仮想ユーザーの数は、一定期間ごとに値だけ増加し、予想される仮想ユーザー数に達します。 次に、到達した仮想ユーザー数は一定期間維持されます。 対応する [負荷予測チャート] は、ステップ形式のグラフです。

最大 VU 数

仮想ユーザーモードでのシナリオ全体の最大 VU 数。

増加率

段階的増加モードでは、増加率を指定する必要があります。

単一負荷レベルの期間

段階的増加モードでは、単一負荷レベルの期間内にビジネス上の問題を発見できるように、単一負荷レベルの期間を 1 分以上に設定する必要があります。

テストの合計期間

ストレステストの期間が増加する場合、期間は次の式を使用して計算された値以上になります。単一負荷レベルの期間/増加量 × 1.1 (切り上げ)。 ただし、期間は 24 時間を超えることはできません。

指定された IP アドレスの数

負荷をかける IP アドレスの数。 詳細については、「負荷をかける IP アドレスの数を指定する」をご参照ください。

リージョン固有のトラフィック

ストレステスターが配置されているリージョンを設定するかどうかを指定します。 このスイッチをオンにして、ローカルユーザートラフィックをシミュレートできます。 このスイッチをオンにした後、ストレステスターのリージョン分布を設定できます。 これにより、負荷トラフィックのリージョン分布のカスタマイズが実装されます。 詳細については、「カスタムトラフィック」をご参照ください。

ストレステストタスクの開始

  • [保存して開始] をクリックします。 [注記] ページで、[今すぐ実行][テストは許可されており、適用される法律および規制に準拠しています。] を選択し、[開始] をクリックします。

  • シナリオをデバッグするには、[デバッグ] をクリックします。 詳細については、「シナリオのデバッグ」をご参照ください。

次のステップ

サンプルシナリオ

このセクションでは、特定の proto ファイルに基づいて gRPC ストレステストシナリオを作成する方法について説明します。

  1. 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;
    }
  2. [grpc シナリオの作成] ページで、[proto ファイルのアップロード] をクリックして上記の proto ファイルをアップロードします。 image

  3. [シナリオ設定] タブで次のパラメーターを設定した後、[保存して開始] をクリックします。

    • 関数名: このパラメーターを 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; //棚のテーマ
      }