スケールアウト オプションを確認する
Azure App Service は、Web アプリを自動的にスケールアウトするための以下の 2 つのオプションをサポートしています。
- Azure オートスケールを使用した自動スケーリング。 オートスケールでは、ユーザーが定義したルールに基づいてスケーリングに関する決定が行われます。
- Azure App Service の自動スケーリング。 自動スケーリングでは、ユーザーが選択したパラメーターに基づいてスケーリングに関する決定が行われます。
自動スケーリングとは
自動スケーリングは、現在の需要に基づいて使用可能なリソースを調整するクラウドのシステムまたはプロセスです。 自動スケーリングでは、"スケール アップとスケール ダウン" ではなく、"スケール インとスケール アウト" が行われます。
自動スケーリングのトリガーは、スケジュールに従って、またはシステムのリソースが不足しているかどうかを評価することで、行うことができます。 たとえば、CPU 使用率が増えた場合、メモリの占有率が増加した場合、サービスが受信する要求の数が急増している場合、または複数の要因の組み合わせで、自動スケールがトリガーされる可能性があります。
Azure App Service の自動スケーリング
Azure App Service の自動スケーリングでは、実行中の Web アプリのリソース メトリックが監視されます。 増加するワークロードを処理するためにその他のリソースが必要な状況を検出し、システムが過負荷になる前に、それらのリソースを確実に利用できるようにします。
自動スケーリングでは、Web サーバーを追加または削除し、それらの間に負荷を分散させることによって、環境内の変化に対応します。 自動スケーリングにより、アプリに利用されている Web サーバーの CPU パワー、メモリ、ストレージ容量が影響を受けることはなく、Web サーバーの数が変わるだけです。
自動スケーリング ルール
自動スケーリングでは、ユーザーが定義するルールに基づいて決定が行われます。 ルールでは、メトリックのしきい値を指定し、このしきい値を超えると自動スケーリング イベントがトリガーされます。 自動スケーリングでは、ワークロードが小さくなったらリソースの割り当てを解除することもできます。
自動スケーリング ルールの定義は慎重に行ってください。 たとえば、サービス拒否攻撃の結果として、受信トラフィックが大幅に増加する可能性があります。 DoS 攻撃による要求の急増を処理しようとするのは無駄なことで、大きな損害を被ります。 このような本物ではない要求は、処理するのではなく破棄しなければなりません。 より良いソリューションは、そのような攻撃中に発生する要求の検出とフィルタリングを実装し、要求がサービスに届かないようにすることです。
どのようなときに自動スケーリングを検討する必要があるか
自動スケーリングでは、サービスに対して柔軟性が提供されます。 たとえば、休暇中にビジネス アプリのアクティビティが増加/減少することが予想される場合があります。
自動スケーリングを使用すると、可用性とフォールト トレランスが向上します。 インスタンスがすぐに要求に確認応答できないため、または過負荷になったインスタンスがクラッシュしたために、サービスに対するクライアントの要求が拒否されることがないようにするのに役立ちます。
自動スケーリングは、Web サーバーを追加または削除することによって動作します。 Web アプリで各要求の一部としてリソースを集中的に使用する処理が実行される場合は、自動スケーリングは効果的なアプローチではない可能性があります。 このような状況では、手動によるスケールアップが必要な場合があります。 たとえば、Web アプリに送信される要求に、大規模なデータセットに対する複雑な処理の実行が含まれる場合、インスタンスのサイズによっては、この 1 つの要求でインスタンスの処理とメモリ容量がすべて消費されることがあります。
自動スケーリングは、長期的な増加を処理するには最善の方法ではありません。 Web アプリのユーザーが最初は少数でも、時間と共に人気が高まるかもしれません。 自動スケーリングには、リソースの監視と、スケーリング イベントをトリガーするかどうかの判断に関連する、オーバーヘッドがあります。 このシナリオでは、増加率を予測できるのであれば、時間と共に手動でシステムをスケーリングする方が、コスト効果の高いアプローチである可能性があります。
サービスのインスタンスの数も要因です。 ほとんどの時間はサービスの少数のインスタンスしか実行されないと予想されるかもしれません。 しかしながら、このような状況で、自動スケーリングが有効かどうかに関わりなく、サービスにはダウンタイムまたは可用性低下の可能性があります。 インスタンスの初期数を少なくすると、ワークロードの増加を処理する容量が少なくなり、かつ、自動スケーリングで起動するインスタンス数が多くなります。
Azure App Service の自動スケーリング
自動スケーリングは、Web アプリと App Service プランのスケーリングに関する決定を自動的に処理する新しいスケールアウト オプションです。 これは、スケジュールとリソースに基づいてスケーリング ルールを定義できる、既存の Azure 自動スケーリングとは異なるものです。 自動スケーリングでは、スケーリング設定を調整して、アプリのパフォーマンスを向上させ、コールド スタートの問題を回避することができます。 プラットフォーム上にあるスケールアウト時にバッファーとして機能するインスタンスが事前にウォームアップすることで、パフォーマンスのスムーズな移行を実現します。 課金は、事前にウォームアップされたインスタンスを含め、すべてのインスタンスに対して 1 秒単位で行われます。
自動的にスケールアウトを行う必要があるシナリオを以下にいくつか示します。
- リソース メトリックに基づいて自動スケーリング ルールを設定する必要はありません。
- 同じ App Service プラン内の Web アプリを、互いに異なる方法で個別にスケーリングする必要があります。
- Web アプリが、その Web アプリほど高速にスケーリングすることができないデータベースまたはレガシ システムに接続されている。 スケーリングを自動的に行うことで、App Service プランでスケーリングできるインスタンスの最大数を設定できます。 この設定は、Web アプリがバックエンドをあふれさせないようにするのに役立ちます。