🐻❄️
AppServiceにスケーリング設定をしたい!
はじめに
AzureのAppServiceプランで、WebAppsでWebアプリケーションを稼働させています。
Webアプリケーションの利用者が増え、かつ利用時間によってアクセス数が増減する場合、AppServiceプランのスケーリング設定をしなければなりません。
スケーリングの種類
スケーリングには、垂直方向のスケーリングと水平方向のスケーリングがあります。
- 垂直方向のスケーリングは、AppServiceプランのサイズを変更することで、インスタンスの能力を増減させることを指します。
- 水平方向のスケーリングは、インスタンスの数を増減させることを指します。
垂直方向のスケーリング
AppServiceでは、垂直方向のスケーリングをすることはできません。AppServiceに設定したサイズで稼働することになります。
水平方向のスケーリング
水平方向のスケーリングには、手動設定と自動設定(Preview)とルールベースのスケーリングの3種類があります。
- 自動設定(Preview)の公式ページはこちら
- ルールベースのスケーリングの公式ページはこちら
今回はルールベースのスケーリングを設定します。
水平方向のスケーリング設定
スケールアウトをする条件と、スケールインする条件を決めます。
今回は、CPU使用率とMemory使用率を監視します。
条件 | 増減数 | |
---|---|---|
スケールアウト | CPU使用率が80%を超える または Memory使用率が80%を超える | インスタンス数を 1 増やす |
スケールイン | CPU使用率が40%を下回る かつ Memory使用率が40%を下回る | インスタンス数を 1 減らす |
また、何らかが原因で無尽蔵にスケールアウトすることを防ぐために、最大インスタンス数と最小インスタンス数を設定します。
最大インスタンス数 | 最小インスタンス数 |
---|---|
10 | 1 |
スケーリング設定手順
- まず、AppServiceプランの「スケールアウト」を選択します。
- Scale out methodを「Rule Based」に設定し、「Manage rules based scaling」のリンクをクリックします。
- リソースをスケーリングする方法を「カスタム自動スケーリング」に設定します。
- スケールモードを「メトリックに基づいてスケーリングする」に設定し、インスタンスの制限(最小値、最大値、デフォルト値)を設定します。
スケールアウトルールの追加
- 「規則を追加する」を選択します。
- CPU使用率のスケールアウトのルールを設定し、「追加」をクリックします。
変更した箇所- メトリック名: CPU Percentage
- スケール操作をトリガーするメトリックのしきい値:80%
※期間「10分」はデフォルト値です。この設定の場合、10分間の平均CPU使用率が80%を超えた場合にスケールアウトします。
※クールダウン「5分」はデフォルト値です。この設定の場合、スケールアウト後の5分間はスケールアウトしないようにします。この設定によってスケールアウト/スケールインの頻発を防ぐことができます。
- 「規則を追加する」をクリックします。
- Memory使用率のスケールアウトルールを設定し、「追加」をクリックします。
変更した箇所- メトリック名: Memory Percentage
- スケール操作をトリガーするメトリックのしきい値:80%
スケールインルールの追加
- 「規則を追加する」を選択します。
- CPU使用率のスケールインのルールを設定し、「追加」をクリックします。
変更した箇所- メトリック名: CPU Percentage
- 演算子: 次の値より小さい
- スケール操作をトリガーするメトリックのしきい値:40%
- 操作:カウントを減らす量
- 「規則を追加する」をクリックします。
- Memory使用率のスケールインのルールを設定し、「追加」をクリックします。
変更した箇所- メトリック名: Memory Percentage
- 演算子: 次の値より小さい
- スケール操作をトリガーするメトリックのしきい値:40%
- 操作:カウントを減らす量
最後に「保存」をクリックし、スケーリング設定完了です。
まとめ
AppServiceプランのルールベースのスケーリング設定を行いました。
ルールベースではなく、自動スケーリングがプレビュー段階の機能としてリリースされています。
自動スケーリングを使うシーンは以下のシーンです。
- HTTPトラフィックに基づくスケールアウト/スケールイン
- スケジュールベースのスケールアウト/スケールイン
また、自動スケーリングはコールドスタートではなく、事前にウォームアップされたインスタンスが用意されるため、レスポンス時間が短縮されます。
現段階では、要件に応じて使い分けが必要なようです。
Discussion