コンテナーとサーバーレスのアプリケーションのスケーリング
ヒント
このコンテンツは eBook の「Azure 向けクラウド ネイティブ .NET アプリケーションの設計」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。
アプリケーションをスケーリングするには、2 種類の方法があります。スケール アップとスケール アウトです。前者は、1 つのリソースにキャパシティを追加するという方法で、後者は、リソースの数を追加するという方法です。
シンプルな解決策: スケール アップ
CPU、メモリ、ディスク I/O 速度、およびネットワーク I/O 速度を増強して既存のホスト サーバーをアップグレードすることを、スケール アップと呼びます。 クラウドネイティブ アプリケーションをスケールアップするには、クラウド ベンダーから、よりキャパシティの高いリソースを選択します。 たとえば、お使いの Kubernetes クラスターにより大きな VM が使用された新しいノード プールを作成できます。 その後、コンテナー化されたサービスを新しいプールに移行します。
サーバーレス アプリをスケールアップするには、専用の App Service プランから、プレミアムの Functions プランやプレミアムのインスタンス サイズを選択します。
クラウドネイティブ アプリのスケール アウト
クラウドネイティブ アプリケーションでは、大規模な需要変動が発生し、急にスケーリングの必要が生じることがよくあります。 そのような場合は、スケール アウトが適しています。スケール アウトは、既存のクラスターにマシン (ノードと呼ばれます) やアプリケーション インスタンスを追加することで、水平的に行うことができます。 Kubernetes では、アプリの構成設定を手動で調整する (たとえば、ノード プールをスケーリングする) か、自動スケーリングを使用して、スケーリングを行うことができます。
AKS クラスターでは、次の 2 つの方法のいずれかで自動スケーリングを実行できます。
まず、水平ポッド自動スケーラーでは、リソースの需要を監視し、その需要に応じてポッド レプリカを自動的にスケーリングできます。 トラフィックが増加すると、追加のレプリカが自動的にプロビジョニングされ、サービスがスケール アウトされます。 同様に、需要が減少すると、それらが削除され、サービスがスケール インされます。 スケーリングの基準となるメトリックは、利用者が定義します (CPU 使用率など)。 また、実行するレプリカの最小数と最大数を指定することもできます。 AKS はそのメトリックを監視し、それに応じてスケーリングを実行します。
次に、AKS クラスター自動スケーラー機能では、Kubernetes クラスターのコンピューティング ノードを、需要に応じて自動的にスケーリングできます。 この機能を使用すると、コンピューティング キャパシティの増強が必要になるたびに、ベースとなる Azure 仮想マシン スケール セットに新しい VM を自動的に追加することができます。 また、不要になったときには、ノードが削除されます。
図 3-11 は、これら 2 つのスケーリング サービスの関係を示したものです。
図 3-11 App Service プランのスケール アウト。
両者を連携的に使用すれば、コンテナー インスタンスとコンピューティング ノードの数を最適化して、需要の変動に対応することができます。 水平ポッド自動スケーラーでは、必要なポッドの数が最適化されます。 クラスター自動スケーラーでは、必要なノードの数が最適化されます。
Azure Functions のスケーリング
Azure Functions では、需要に応じて自動的にスケール アウトが実行されます。 サーバー リソースは、トリガーされたイベントの数に基づいて、動的に割り当てられ、削除されます。 料金は、関数の実行時に消費されたコンピューティング リソースの分だけ発生します。 課金は、実行数、実行時間、およびメモリの使用量に基づいて行われます。
既定の従量課金プランでは、多くのアプリにとって経済的でスケーラブルなソリューションが提供されるのに対し、プレミアム オプションでは、開発者がカスタムの Azure Functions 要件を柔軟に設定できます。 プレミアム プランにアップグレードすると、インスタンス サイズ、事前ウォーミングされたインスタンス (コールド スタートの遅延を回避するため)、および専用 VM を制御できるようになります。
.NET