Google Cloud Well-Architected Framework のパフォーマンス最適化の柱におけるこの原則では、ワークロード要件の変化に基づいてリソースを動的に調整できる弾力性を組み込むための推奨事項が示されています。
弾力性により、システムのさまざまなコンポーネントを個別にスケーリングできます。このような対象を絞ったスケーリングにより、リソースのプロビジョニングで過不足なく必要な場所にリソースを正確に割り当てることで、パフォーマンスを向上させ、費用対効果を高めることができます。
原則の概要
システムのパフォーマンス要件は、システムの垂直スケーリングと水平スケーリングのタ���ミングと方法に直接影響します。システムの容量を評価し、ベースラインでシステムが処理すると想定される負荷を決定する必要があります。次に、負荷の増減にシステムがどのように対応するかを決定する必要があります。
負荷が増加する場合、システムは水平方向にスケールアウトするか、垂直方向にスケールアップするか、あるいはその両方を行う必要があります。水平方向のスケーリングの場合は、レプリカノードを追加して、システム全体に増加した需要を満たすのに十分な容量があることを確認します。垂直方向のスケーリングの場合は、アプリケーションの既存のコンポーネントを、容量、メモリ、ストレージがより大きいコンポーネントに置き換えます。
負荷が減少すると、システムは(水平方向、垂直方向、またはその両方で)スケールダウンする必要があります。
システムがスケールアップまたはスケールダウンする状況を定義します。トラフィックの増加が予想される期間には、システムを手動でスケールアップする計画を立てます。負荷の増減に対応する自動スケーリングなどのツールを使用します。
推奨事項
弾力性を活用するには、以下のセクションの推奨事項を検討してください。
ピーク負荷期間に備えて計画する
顧客の需要の増加が予想される期間など、既知のイベントに対して効率的なスケーリング パスを計画する必要があります。
トラフィックの増加が予想される期間に先立って、システムのスケールアップを検討してください。たとえば、小売業であれば、季節ごとのセール中に需要が増加することが予想されます。そうしたセールの前にシステムを手動でスケールアップまたはスケールアウトして、システムが負荷の増加に即座に対応できるようにするか、既存の上限を直接調整することをおすす����ます。そうし������ば、リ����タイムの変更に応じてリソースを追加するまでに数分かかることがあります。アプリケーションの容量がすぐには増加せず、一部のユーザーで遅延が発生する場合があります。
需要やトラフィックの急増といった未知のイベントや予期しないイベントに対しては、自動スケーリング機能を使用すると、指標に基づいて弾力的なスケーリングをトリガーできます。このような指標としては、CPU 使用率、ロードバランサの処理能力、レイテンシ、Cloud Monitoring で定義したカスタム指標などがあります。
たとえば、Compute Engine マネージド インスタンス グループ(MIG)で実行されるアプリケーションを考えてみましょう。このアプリケーションには、平均 CPU 使用率が 75% に達するまで各インスタンスが最適に動作するという要件があります。この例では、CPU 使用率がしきい値に達するとインスタンスをさらに作成する自動スケーリング ポリシーを定義します。新しく作成されたインスタンスが負荷の吸収を助け、MIG に構成されたインスタンスの最大数に達するまで、平均 CPU 使用率が最適なレートで維持されます。需要が減少すると、自動スケーリング ポリシーによって不要になったインスタンスが削除されます。
BigQuery のリソース スロット予約を計画するか、マネージド オートスケーラーを使用して Spanner の自動スケーリング構成の上限を調整します。
予測スケーリングを使用する
システム コンポーネントに Compute Engine が含まれている場合は、予測自動スケーリングがワークロードに適しているかどうかを評価する必要があります。予測自動スケーリングは、指標の過去のトレンド(CPU 使用率など)に基づいて将来の負荷を予測します。予測は数分ごとに再計算されるため、オートスケーラーは予測を直近の負荷の変化にすばやく適応できます。予測自動スケーリングがなければ、オートスケーラーは、リアルタイムで観測された負荷の変化に基づいて受動的にグループをスケーリングすることしかできません。予測自動スケーリングは、リアルタイム データと過去のデータの両方を使用して、現在の負荷と予測される負荷の両方���対応します。
サーバーレス アーキテクチャを実装する
以下のような、本質的に弾力性のあるサーバーレス サービスを使用して、サーバーレス アーキテクチャを実装することを検討してください。
ルールのファインチューニングが必要な他のサービスの自動スケーリング(Compute Engine など)とは異なり、サーバーレス自動スケーリングは即時実行され、リソースをゼロまでスケールダウンできます。
Kubernetes の Autopilot モードを使用する
Kubernetes をより大きく制御する必要がある複雑なアプリケーションの場合は、Google Kubernetes Engine(GKE)の Autopilot モードを検討してください。Autopilot モードでは、デフォルトで自動化とスケーラビリティが提供されます。GKE は、トラフィックに基づいてノードとリソースを自動的にスケーリングします。GKE はノードの管理、アプリケーション用の新しいノードの作成、自動的なアップグレードと修復の構成を行います。