Google Cloud アーキテクチャ フレームワークのパフォーマンス最適化の柱にこの原則では、ワークロード要件の変化に基づいてリソースを動的に調整する機能である弾力性を組み込むための推奨事項が示されています。
弾力性により、システムのさまざまなコンポーネントを個別にスケーリングできます。このターゲット スケーリングにより、リソースの過剰プロビジョニングや不足プロビジョニングを行わずに、必要な場所にリソースを正確に割り当てることで、パフォーマンスと費用対効果を高めることができます。
原則の概要
システムのパフォーマンス要件は、システムの垂直スケーリングと水平スケーリングのタイミングと方法に直接影響します。システムの容量を評価し、ベースラインでシステムが処理することが期待される負荷を決定する必要があります。次に、負荷の増加と減少にシステムがどのように対応するかを決定する必要があります。
負荷が増加すると、システムは水平方向にスケールアウトするか、垂直方向にスケールアップするか、その両方を行う必要があります。水平方向のスケーリングでは、レプリカノードを追加して、増加した需要を満たすためにシステム全体で十分な容量を確保します。垂直スケーリングの場合は、アプリケーションの既存のコンポーネントを、容量、メモリ、ストレージがより大きいコンポーネントに置き換えます。
負荷が減少すると、システムは(水平方向、垂直方向、またはその両方で)スケールダウンする必要があります。
システムがスケールアップまたはスケールダウンする状況を定義します。トラフィックの増加が予想される期間にシステムを手動でスケールアップする計画を立てます。負荷の増減に応答する自動スケーリングなどのツールを使用します。
推奨事項
弾力性を活用するには、次のセクションの推奨事項を検討してください。
ピーク負荷期間を計画する
顧客需要の増加が予想される期間など、既知のイベントに対して効率的なスケーリング パスを計画する必要があります。
トラフィックの増加が予想される期間の前に、システムのスケールアップを検討してください。たとえば、小売業者の場合、季節のセール期間中に需要が増加することが予想されます。セール前にシステムを手動でスケールアップまたはスケールアウトし、システムが負荷の増加をすぐに処理できるようにするか、既存の上限をすぐに調整することをおすすめします。そうでない場合、リアルタイムの変更に応じてリソースを追加するまでに数分かかることがあります。アプリケーションの容量が十分に速く増加せず、一部のユーザーに遅延が発生する可能性があります。
需要やトラフィックの急増など、未知または予期しないイベントの場合は、自動スケーリング機能を使用して、指標に基づく弾力的なスケーリングをトリガーできます。これらの指標には、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 はノードの管理、アプリケーションの新しいノードの作成、自動アップグレードと修復の構成を行います。