Auto Scalingは、システムモニタリングタイプのイベントトリガータスクのトリガー条件として、(ALB) QPS per Backend Serverシステムメトリックを提供します。 これにより、ECSインスタンスとエラスティックコンテナインスタンスの自動スケーリングが可能になります。 このトピックでは、(ALB) QPS per Backend Serverシステムメトリックを使用して、エラスティックコンテナインスタンスの自動スケーリングを有効にする方法について説明します。
概念
Application Load Balancer (ALB) は、アプリケーション層で実行され、HTTP、HTTPS、Quick UDP Internet Connections (QUIC) などのさまざまなプロトコルをサポートするAlibaba Cloudサービスです。 ALBは高い弾力性を提供し、アプリケーション層で大量のネットワークトラフィックを処理できます。 詳細については、「ALBとは何ですか?」をご参照ください。
1秒あたりのクエリ数 (QPS) は、ALBが処理できるHTTPまたはHTTPSクエリまたはリクエストの1秒あたりの数を測定します。 このメトリックは、レイヤー7リスナーに固有です。 (ALB) バックエンドサーバーごとのQPSは、サーバーのサービスパフォーマンスを評価するために使用されるメトリックです。 このメトリックの値は、次の式を使用して計算されます。バックエンドサーバーあたりのQPS=1秒あたりにALBが受信したクライアントリクエストの総数 /ALBバックエンドサーバーグループのECSインスタンスまたはエラスティックコンテナインスタンスの総数。
シナリオ
ALBインスタンスを使用してクライアント要求 (またはQPS) を集中的に受信する場合、クライアント要求は処理のためにバックエンドサーバーに転送されます。 バックエンドサーバーは、ECSインスタンスまたはエラスティックコンテナインスタンスです。 クライアント要求の数が急増した場合、ビジネスシステムは、ビジネスを円滑かつ安定して実行するために、バックエンドサーバーをアジャイルな方法でスケールアウトする必要があります。
この場合、バックエンドサーバーの自動スケーリングを有効にするためのアラートトリガー条件としてバックエンドサーバーごとの (ALB) QPSメトリックを使用するイベントトリガータスクを作成できます。 このソリューションにより、ビジネスアプリケーションの高可用性が向上します。 このソリューションは、次の利点を提供します。
バックエンドサーバーごとの (ALB) QPSメトリックの値が指定されたしきい値より大きい場合、Auto Scalingはスケールアウトイベントをトリガーしてバックエンドサーバーの数を増やし、各バックエンドサーバーのワークロードを減らします。 これにより、システムの応答時間と安定性が向上します。
バックエンドサーバーごとの (ALB) QPSメトリックの値が指定されたしきい値未満の場合、Auto Scalingはスケールインイベントをトリガーしてバックエンドサーバーの数を減らし、コスト効率を向上させます。
前提条件
RAM (Resource Access Management) ユーザーを使用する場合、ALBリソースを表示および管理する権限がRAMユーザーに付与されます。 詳細については、「RAM ユーザーへの権限の付与」をご参照ください。
少なくとも1つの仮想プライベートクラウド (VPC) と1つのvSwitchが作成されます。 詳細については、「Resource Orchestration Service (ROS) コンソール」をご参照ください。
ステップ1: ALBの設定
ALBインスタンスを作成します。
詳細については、「ALBインスタンスの作成」をご参照ください。
次の表に、ALBインスタンスの作成に必要なパラメーターを示します。
パラメーター
説明
例
[インスタンス名]
ALBインスタンスの名前を入力します。
alb-qps-instance
[VPC]
ALBインスタンスのVPCを選択します。
vpcテスト****-001
Zone
ALBインスタンスのゾーンとvSwitchを選択します。
説明ALBはクロスゾーン展開をサポートしています。 指定したリージョンで2つ以上のゾーンが使用可能な場合は、少なくとも2つのゾーンを選択して高可用性を確保します。
ゾーン: 杭州ゾーンGと杭州ゾーンH
vSwitch: vsw-test003とvsw-test002
ALBインスタンスのサーバーグループを作成します。
詳細については、「サーバーグループの作成と管理」をご参照ください。
サーバーグループの作成に必要なパラメーターを次の表に示します。
パラメーター
説明
例
サーバーグループタイプ
作成するサーバーグループのタイプを指定します。 値Serverは、サーバーグループにエラスティックコンテナインスタンスが含まれることを指定します。
サーバー
サーバーグループ名
サーバーグループの名前を入力します。
alb-qps-servergroup
[VPC]
[VPC] ドロップダウンリストからVPCを選択します。 VPCに存在するサーバーのみをサーバーグループに追加できます。
重要このステップでは、ステップ1で指定したVPCを選択します。
vpcテスト****-001
ALBインスタンスのリスナーを設定します。
左側のナビゲーションウィンドウで、
を選択します。[インスタンス] ページで、lb-qps-instanceという名前のALBインスタンスを見つけ、[操作] 列の [リスナーの作成] をクリックします。
Server Load Balancerの設定ウィザードの [リスナーの設定] ステップで、[リスナーポート] パラメーターを80に設定し、他のパラメーターのデフォルト設定を維持してから、[次へ] をクリックします。
説明ビジネス要件に基づいて、Listener portパラメーターに別のポート番号を指定できます。 この例では、ポート番号80が使用されます。
Server Load Balancerの設定ウィザードの [サーバーグループの選択] で、[サーバーグループ] フィールドの下にある [サーバータイプ] を選択し、ステップ2で作成したalb-qps-servergroupという名前のサーバーグループを選択し、[次へ] をクリックします。
[Server Load Balancerの設定] ウィザードの [設定の確認] ステップで、パラメーター設定を確認し、[送信] をクリックします。 表示されたメッセージボックスで [OK] をクリックします。
設定が完了したら、[インスタンスの詳細] タブをクリックして、ALBインスタンスのelastic IPアドレス (EIP) を取得します。
手順2: ALBサーバーグループのスケーリンググループを作成する
ECSタイプのスケーリンググループを作成する手順は、Elastic Container Instanceタイプのスケーリンググループを作成する手順とは異なります。 スケーリンググループを作成するときに表示されるパラメーターが優先されます。 このステップでは、Elastic Container Instanceタイプのスケーリンググループが作成されます。
スケーリンググループを作成します。
詳細については、「スケーリンググループの作成」をご参照ください。 次の表に、スケーリンググループの作成に必要なパラメーターを示します。 ビジネス要件に基づいて、次の表に記載されていないパラメーターを設定できます。
パラメーター
説明
例
スケーリンググループ名
スケーリンググループの名前を入力します。
alb-qps-scalinggroup
データ型
計算能力を提供するために、スケーリンググループによって管理されるインスタンスのタイプを指定します。
ECI
インスタンス設定ソース
Auto Scalingは、インスタンス設定ソースパラメーターの値に基づいてインスタンスを作成します。
スクラッチから作成
最小インスタンス数
エラスティックコンテナインスタンスの総数が下限未満の場合、エラスティックコンテナインスタンスの総数が下限に達するまで、Auto Scalingはスケーリンググループにエラスティックコンテナインスタンスを自動的に作成します。
1
最大インスタンス数
エラスティックコンテナインスタンスの総数が上限を超えた場合、エラスティックコンテナインスタンスの総数が上限を下回るまで、Auto Scalingは自動的にスケーリンググループからエラスティックコンテナインスタンスを削除します。
5
[VPC]
ALBインスタンスが存在するVPCを選択します。
vpcテスト****-001
vSwitch
ALBインスタンスで使用されるvSwitchを選択します。
この例では、vsw-test003とvsw-test002が選択されています。
ALBとNLBサーバーグループの関連付け
手順1で作成したALBサーバーグループを選択します。 次に、ポート80に入ります。
サーバーグループ: sgp-****/alb-qps-servergroup
ポート: 80
スケーリング設定を作成して有効にします。
詳細については、「Elastic Container Instanceタイプのスケーリング設定の作成」をご参照ください。 次の表に、スケーリング設定の作成に必要なパラメーターを示します。 ビジネス要件に基づいて、次の表に記載されていないパラメーターを設定できます。
パラメーター
説明
例
コンテナーグループの設定
コンテナーグループの仕様を選択します。 仕様には、vCPUの数とメモリサイズが含まれます。
vCPU: 2 vCPU
メモリ: 4 GiB
コンテナー設定
コンテナイメージとイメージタグを選択します。
コンテナ画像: registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx
画像タグ: 最新
スケーリンググループの有効化
詳細については、「スケーリンググループの有効化または無効化」をご参照ください。
説明この例では、 [最小インスタンス数] パラメーターを1に設定します。 この場合、Auto Scalingは、スケーリンググループを有効にした後、自動的にスケールアウトイベントをトリガーして1つのエラスティックコンテナインスタンスを作成します。
エラスティックコンテナインスタンスとインスタンスで実行されているコンテナのステータスを確認し、コンテナが期待どおりに実行されることを確認します。
手順1で作成したALBインスタンスのEIPにアクセスして、
nginx
に期待どおりにアクセスできるかどうかを確認します。
手順3: バックエンドサーバーごとの (ALB) QPSメトリックに基づいてイベントトリガータスクを作成する
Auto Scaling コンソール にログインします。
スケーリングルールを作成します。
この例では、2つのスケーリングルールが作成されます。 Add1という名前の1つのスケールアウトルールを使用して、1つのエラスティックコンテナインスタンスを追加します。 Reduce1という名前の1つのスケールインルールを使用して、スケーリンググループから1つのエラスティックコンテナインスタンスを削除します。 詳細については、「スケーリングルールの管理」をご参照ください。
イベントトリガータスクを作成します。
[スケーリンググループ] ページで、名前がalb-qps-scalinggroupであるスケーリンググループを見つけ、[操作] 列の [詳細] をクリックします。
を選択し、[イベントトリガータスクの作成] をクリックします。
この例では、2つのイベントトリガータスクが作成されます。 Alarm1という名前の1つのイベントトリガータスクを使用してAdd 1をトリガーします。 Alarm2という名前のもう1つのイベントトリガータスクを使用してReduce1をトリガーします。 詳細については、「イベントトリガータスクの管理」をご参照ください。
Alarm1を作成するときは、(ALB) QPS per Backend Serverメトリックを選択し、Average(Average) >= 100 Count/sのアラートトリガー条件を指定します。
説明バックエンドサーバーあたりのQPS=合計QPS /エラスティックコンテナインスタンスの合計数
Alarm2を作成するときに、(ALB) バックエンドサーバーごとのQPSメトリックを選択し、平均 (平均) < 50カウント /秒のアラートトリガー条件を指定します。
モニタリング効果の確認
Apache JMeter、ApacheBench、wrkなどのストレステストツールを使用して、手順1で作成されたALBインスタンスのEIPでストレステストを実行できます。 ストレステストを設定すると、QPS値が500に達するシナリオをシミュレートできます。 テスト中、Auto Scalingコンソールの [モニタリング] タブで次の傾向を確認できます。
QPS値がアラートしきい値を超えると、スケールアウトイベントのイベントトリガータスクがトリガーされ、エラスティックコンテナインスタンスが追加されます。 新しいelasticコンテナーインスタンスが追加されるたびに、各インスタンスのワークロードが減少し、QPS値が減少します。