負荷テスターの使用

このセクションでは、 DirectX サンプルの実行 での負荷テストの実行方法を紹介しています。サンプルの実行には、2 つのクラスタが必要です。1 つ目のクラスタが Genvid スタックを実行し、もう 1 つが負荷テストを実行します。負荷テスターは、開発目的のためにローカルで実行することもできます。

クラウドでのゲームの実行については、 AWS クラウド環境 を参照してください。

このアプリケーションは、メトリクスを statsd に送信します。 TICK Stack メトリクス を使用して、メトリクスの収集、確認ができます。

はじめに

テスト用アプリケーションをローカルで実行することもできますが、負荷テストはクラウド上で実行することを前提としています。今回のデモでは DirectX サンプルの実行 を使用します。このサンプルをクラウドにデプロイする方法については クラウドの DirectX サンプルを作成する を参照してください。

設定ファイルの編集

負荷テストを行っている場合は、負荷バランサーや同様の構成で、パブリックなエントリーポイントを持つシステムが設定されいる可能性が高いです。クライアントが正しい設定を使用するように設定するには、 設定ファイル を修正するか、より複雑なログインプロトコルを使用している場合は、 app/src/cube_client.ts ソースファイルの basic_session 関数を修正します。例えば、Cube サンプルには、以下のようなコードがあります。

  // Starts the connection to the services
  start() {
    fetch("/api/public/channels/join", {
      method: "POST",
    })
      .then((data) => data.json())
      .then((res) => {
        if (res.name === "Error") {
          genvid.error(`Failed getting stream info: ${res.message}. Retrying in ${this.fiboStartIterator.get()} seconds...`);
          setTimeout(() => {
            this.start();
            this.fiboStartIterator.next();
          }, this.fiboStartIterator.get() * 1000);
        } else {
          this.onChannelJoin(res);
        }
      })
      .catch((error) => genvid.error(`Can't get the stream info: ${error}`));
  }

Web サーバー上の URL``/api/public/channels/join``を取得します。 cube_client.ts`では、デフォルトでローカルホストを指すように設定されている設定キー  ``custom.loadtester.join_url` の値を使用しています。代わりに、ジョインコールのパブリック URL を指すようにしてください。

テスト用クラスタを作成する

最初のステップで、テストクライアントを実行するためのクラスタを作成します。ゲームと同じクラスタでサンプルを実行することもできますが、異なるリージョンの場合でも異なるクラスタで実行することをお勧めします。負荷テストに関連した追加コストが発生しますが、実際のゲーム体験にとても近いサンプルができます。

basic_cluster クラスタモジュールを使用しますが、サーバーと内部インスタンスのみを使用します。

  1. Bastion UI で、 basic/basic_cluster モジュールを使用してクラスタを作成します。このデモでは loadtest と呼びます。
  2. infrastructure のリンクをクリックします (今は、デフォルト設定を使用します)。
  3. Settings メニューをクリックします。

# instance_game_count, instance_encoding_countinstance_public_count を 0 に設定します。

# instance_internal_type には t2.large のような大きなインスタンスを選択し、 instance_internal_count を増加させます。
実行したいロードテスターのインスタンスの数に応じて、必要な場合に使用します。
  1. Commands メニューをクリックします。
  2. guilabel:Plan Apply`をクリックし、結果が良ければ :guilabel:`Apply して、完了するまで待ちます。

負荷テスト用クラスタの初期化

テストクラスタを設定します。まず、クラスタを初期化します。

genvid-sdk -c loadtest setup

このクラスタでは SDK は実行されず、loadtester クライアントのみが実行されるため、 genvid-sdk load-config-sdk コマンドを実行する必要はありません。次に、負荷テスタークライアントをビルドしてロードします。

py loadtester.py prepare                   # Install the genvid.js library and run npm install
py loadtester.py build-cloud
py loadtester.py -c loadtest upload-images --update-config
py loadtester.py -c loadtest load

注釈

また、両方のクラスタのメトリクスを収集するために、メトリクス集約スタックをインストールすることをお勧めします。 TICK Stack メトリクス を参考にしてください。

py tick.py -c testcluster load

負荷テストの実行

このコマンドを実行して負荷テスターを実行します。

genvid-sdk -c loadtest start

全てのジョブが起動しますが、 クラスタ UI のジョブ画面 を見ると、 loadtester ジョブが停止していることがわかります。これはタスク数が 0 であるためです。UI から手動で追加するか、以下のコマンドを実行してください。

genvid-sdk -c loadtest set-taskgroup-count --step 1 --interval 5 loadtester 3

--step は一度に生成する新しいタスクの数で、--interval は各ステップ間の秒単位の間隔です。その後は、タスク名 () とターゲットカウントです。詳細は genvid-sdk ツールを参照してください。

重要

実行できる負荷テスターの数は、クラスタで利用可能なリソースによります。多数起動できる場合は、 loadtest クラスタに内部インスタンスを追加したり、より大きなインスタンスの使用をお試しください。