マネージド オートスケーラー

このページでは、マネージド オートスケーラーの仕組みと、マネージド オートスケーラーを使用する場合の費用と制限事項について説明します。また、マネージド オートスケーラーの構成方法の決定に役立つ情報も提供します。

マネージド オートスケーラーの仕組み

マネージド オートスケーラーを有効にすると、Spanner によってインスタンスのサイズが自動的に調整されます。マネージド オートスケーラー機能は、負荷の増減に応じて、インスタンスのワークロードやストレージのニーズの変化に対応します。マネージド自動スケーリングは、スケールアップ(インスタンスへのコンピューティング容量の追加)、またはスケールダウン(インスタンスからのコンピューティング容量の削除)のいずれかを行います。

マネージド オートスケーラーを構成する際には、小規模なインスタンスの場合は処理単位を使用し、大規模なインスタンスの場合はノードを使用できます。このドキュメントでは、ノードまたは処理単位を意味するコンピューティング容量という用語を使用しています。

Spanner マネージド オートスケーラーは、次の条件に基づいて必要なコンピューティング容量を決定します。

  • 優先度の高い CPU 使用率の目標値
  • ストレージ使用率の目標値
  • 下限
  • 上限

スケーリング項目ごとに推奨インスタンス サイズが生成され、Spanner は自動的に最も高いインスタンス サイズを使用します。たとえば、インスタンスがストレージ使用率の目標を達成するためには 10 ノードが必要で、CPU 使用率の目標を達成するためには 12 ノードが必要な場合、Spanner はインスタンスを 12 ノードにスケーリングします。

コンピューティング容量が変化すると、Spanner はストレージを継続的に最適化します。すべてのサーバー間でデータを再調整して、トラフィックが均等に分散され、個々のサーバーが過負荷にならないようにします。詳細については、制限事項をご覧ください。

マネージド オートスケーラーがインスタンスを最大値までスケーリングしても、ワークロードがターゲットよりも CPU 使用率を高くしている場合、ワークロード リクエストのレイテンシが増加するか、失敗することがあります。インスタンスの最大コンピューティング容量目標までスケールアップしても、ワークロードが最大ストレージ容量の上限よりも多くのストレージを必要とする場合、書き込みリクエストは失敗する可能性があります。最大ターゲットに到達したかどうかを確認するには、Google Cloud コンソールの [システム分析情報] ページでマネージド オートスケーラーのシステム イベントログを表示します。詳細については、ストレージの上限をご覧ください。

Spanner がインスタンスをスケールダウンするとき、スケールアップ時よりも遅いレートでコンピューティング容量が削除され、レイテンシへの影響が少なくなります。

費用

マネージド オートスケーラーを有効にする前に Spanner インスタンスを構成した方法と、マネージド オートスケーラーに設定した上限により、Spanner の総費用が上下する場合があります。

たとえば、ピーク時のワークロード処理に十分なコンピューティング容量を持つように Spanner インスタンスを手動で構成した場合、マネージド オートスケーラーではインスタンスがアイドル状態のときにコンピューティング容量が減るため、費用が下がる可能性があります。

平均的なワークロードに十分なコンピューティング容量を持つように Spanner インスタンスを手動で構成し、ワークロード トラフィックが増えると全体的なパフォーマンスが低下する場合、マネージド オートスケーラーではインスタンスがビジー状態のときにコンピューティング容量が増えるため、費用が高くなる可能性があります。これにより、パフォーマンスの一貫性が向上します。

最大ノード数または処理ユニット数の上限を特定のレベルに設定することで、Spanner インスタンスの最大コストを制限できます。

制限事項

インスタンスでマネージド自動スケーリング機能を有効化または変更する場合は、次の制限が適用されます。

  • マネージド オートスケーラー機能が有効になっている場合、インスタンスを移動することはできません。まずマネージド オートスケーラーを無効にしてから、インスタンスを移動する必要があります。インスタンスを移動した後、マネージド オートスケーラーを再び有効にできます。
  • 自動スケーリング インスタンスの最小値は、1, 000 処理ユニット以上、または 1 ノード以上に設定する必要があります。
  • 既存のインスタンスで自動スケーリングを有効にする場合、既存のインスタンスの容量が、マネージド オートスケーラーで構成した最小制限値よりも小さくなることがあります。ただし、インスタンスは起動時に、構成された最小値まで自動的にスケールアップします。たとえば、インスタンスにノードが 1 つあるものの、最小値を 2 ノードに設定した場合、インスタンスの起動時にノードが自動的に 2 つにスケールアップされます。

マネージド オートスケーラーのパラメータ

インスタンスを作成または編集してマネージド オートスケーラーを有効にする場合は、次の表に示す値を定義します。

パラメータ 説明
優先度の高い CPU 使用率の目標値 インスタンスの優先度の高い CPU 容量の割合。値は 10 ~ 90% にする必要があります。インスタンスの CPU 使用率が、設定したターゲットを超えると、Spanner はすぐにコンピューティング容量をインスタンスに追加します。CPU 使用率がターゲットより大幅に低い場合、Spanner はコンピューティング容量を削除します。詳しくは、CPU 使用率の目標を決めるをご覧ください。
ストレージ使用率の目標値 Spanner がスケールアップする前に使用できるノード上のストレージの割合。この目標値により、保存するデータ量の変動に対処するために十分なコンピューティング容量が常に確保されます。値は 10 ~ 99% にする必要があります。詳しくは、ストレージ使用率の目標値を決めるをご覧ください。
下限 Spanner がインスタンスをスケールダウンする最小のコンピューティング容量。最小値は、上限に設定した値の 10% より小さい値を指定することはできません。たとえば、上限が 40 ノードの場合、下限は 4 ノード以上である必要があります。この 10% の要件はハードリミットです。詳しくは、下限を決定するをご覧ください。
上限 Spanner がインスタンスをスケールアップするコンピューティング容量の最大値。ノードの場合、この値は 1 ノード(または 1000 処理ユニット)より大きく、ノードまたは処理ユニットの最小数以上である必要があります。この値は、コンピューティングの最小容量に選択した数の 10 倍を超えることはできません。この 10 回という要件はハードリミットです。詳しくは、上限を決定するをご覧ください。

マネージド オートスケーラーを構成する

このセクションでは、マネージド オートスケーラーのパラメータに選択する番号を決定する方法について説明します。初期値を設定したら、インスタンスをモニタリングし、必要に応じて数を調整します。

CPU 使用率の目標値を決める

インスタンスに最適な目標値は、ワークロードのレイテンシとスループットの要件によって異なります。単一リージョンとマルチリージョンの両方のインスタンスで最大 CPU 使用率に関する推奨事項については、高 CPU 使用率に関するアラートをご覧ください。

一般に、許容できない長さのレイテンシが発生した場合は、CPU 使用率の目標値を小さくする必要があります。

ストレージ使用率の目標値を決める

自動スケーリングでは、ストレージ使用率の目標値はノードあたりの割合として表されます。1 ノード(1000 処理ユニット)以上のインスタンスの場合、ストレージ サイズはノードあたり 4 TB に制限されます。

上限を決める

コンピューティング容量の最大量として選択する値は、インスタンスが最も重いトラフィックを処理するために必要なコンピューティング容量と等しくなります。(たとえ、そのボリュームに達することがほとんどないとしても)Spanner は、必要以上に多くのコンピューティング容量にスケールアップすることはありません。この数は、支払い可能な最大コンピューティング容量と考えることもできます。指定できる値の詳細については、自動スケーリング パラメータをご覧ください。

上限には、自動スケーリングに設定した CPU 使用率の目標とストレージ使用率の目標の両方を許可する必要があります。

  • インスタンスを手動割り当てからマネージド 自動スケーリングに変更する場合、インスタンスの過去 1 ~ 2 か月間のコンピューティング容量のうち最も大きい量を探します。マネージド オートスケーラーの上限は、少なくともそれ以上にする必要があります。

  • 新しいインスタンスでマネージド オートスケーラーを有効にする場合は、他のインスタンスの指標を確認し、上限を設定するときにガイドとして使用します。

  • 新しいワークロードで、それがどのように成長するのかわからない場合は、組み込みのストレージ使用率の目標を達成するために必要なコンピューティング容量を推定し、あとで調整します。

また、マネージド オートスケーラーは割り当てを超えるコンピューティング容量を持つようにインスタンスを構成できないため、ノードの残りの割り当て量も把握する必要があります。詳細については、ノードに関する上限をご覧ください。

自動スケーリングを有効にしてインスタンスが起動したら、インスタンスをモニタリングし、最大値に対して選択した値が CPU 目標の推奨上限とストレージ目標の推奨上限以上になるようにします。

下限を決定する

マネージド オートスケーラーの下限を設定して、Spanner インスタンスが最小かつ最もコスト効率の高いサイズにスケールダウンできるようにします。Spanner ではノード数が CPU とストレージの使用率の目標値を維持するために必要な最小数を下回るのを防止します。

マネージド オートスケーラーが許容する最小値は、1 ノードまたは 1,000 処理ユニットです。マネージド オートスケーラー用に構成された最小値未満の容量を持つ既存のインスタンスで自動スケーリングを有効にすると、インスタンスは起動時にこの最小値まで自動的にスケールアップします。

マネージド自動スケーリングを持つインスタンスを起動したら、初期テストを実行して、最小設定サイズで機能することを確認する必要があります。定期的にテストを行い、意図したとおりに動作することを確認する必要があります。

許容値の詳細については、このドキュメントのマネージド オートスケーラーのパラメータをご覧ください。

多くの場合、最小値を 1 より大きい値に設定します。次の状況が発生した場合は、値を大きくするか、最小数を増やしてください。

  • トラフィックが一時的に増加することが予想されるピークスケール イベントがあり、十分なコンピューティング容量を確保する必要がある。
  • アプリケーションが送信するトラフィックが急増している。新しいコンピューティング容量を追加すると、Spanner は新しいノードまたは処理ユニットを使用するように自動的に再調整します。この処理には数分かかることがあるため、控えめな方法を採用し、より高い最小値を選択することをおすすめします。これにより、インスタンスは急増にシームレスに対応できます。
  • コンピューティング容量の最大値を増やします。最小値は、常に最大コンピューティング容量目標の 10% 以下でなければなりません。たとえば、ノードの最大数を 30 に設定した場合は、ノードの最小数を 3 以上に設定する必要があります。

インスタンスの最小コンピューティング容量の値を大きくすると、Spanner は直ちにインスタンスを新しい最小容量にスケーリングしようとします。標準制約が適用されます。割り当ての上限を超えると、マネージド オートスケーラーの構成変更のリクエストが失敗し、構成が更新されません。

Google Cloud CLI のパラメータ フラグと制限事項

Google Cloud CLI を使用してマネージド オートスケーラーを構成する場合は、いくつかの設定が必要なフラグがあります。ノードと処理ユニットのどちらを使用するかを示すオプションのフラグがあります。マネージド オートスケーラーを使用して新しいインスタンスを作成する方法や、既存のインスタンスでマネージド自動スケーリングを有効にする方法については、以下をご覧ください。

インスタンスでマネージド オートスケーラーを有効にする場合は、次のフラグが必要です。

  • autoscaling-high-priority-cpu-percent
  • autoscaling-storage-percent

ノードを使用する場合は、次の両方のフラグを使用して、マネージド オートスケーラーを有効にする必要があります。

  • autoscaling-min-nodes
  • autoscaling-max-nodes

処理単位を使用する場合は、マネージド フラグを有効にするときに次のフラグも使用する必要があります。

  • autoscaling-min-processing-units
  • autoscaling-max-processing-units

Google Cloud CLI を使用して既存のインスタンスにマネージド オートスケーラーを追加する場合は、次の制限が適用されます。

  • --nodes を使用すると、スケーリング範囲ではなく特定の数のノードが設定されるため、--autoscaling-min-nodes フラグまたは --autoscaling-max-nodes フラグと一緒に --nodes フラグを使用することはできません。同様に、--processing-units を使用すると、スケーリング範囲ではなく特定の数の処理単位が設定されるため、autoscaling-min-processing-units フラグまたは autoscaling-max-processing-units フラグと一緒に --processing-units フラグを使用することはできません。
  • ノードと処理単位のフラグを混在させることはできません。たとえば --autoscaling-max-nodesautoscaling-min-processing-units を一緒に使用することはできません。

設定を調整する

コンピューティング容量の使用量に注意し、必要に応じて設定を調整してください。特に、マネージド オートスケーラーを初めて有効にした後は、それを行う必要があります。Google Cloud コンソールの [システム分析情報] ページを使用することをおすすめします。

アクセス制御

マネージド オートスケーラーを構成するには、構成するインスタンスの作成と更新の権限が付与されたロールのプリンシパルである必要があります。

モニタリング

Spanner には、ワークロード要件を満たすためにマネージド オートスケーラーがスケールアップおよびスケールダウンする際に、どの程度適切に機能するかを理解するのに役立ついくつかの指標があります。また、この指標により、ビジネスのワークロードとコスト要件を満たすために、設定が最適かどうかを判断できます。たとえば、インスタンスのノード数が最大値に近い場合は、最大値を増やすことを検討します。Spanner リソースのモニタリングの詳細については、Cloud Monitoring を使用してインスタンスをモニタリングするをご覧ください。

次の指標は、Google Cloud コンソールの [システム分析情報] ページにグラフで表示されます。これらの指標は、Cloud Monitoring で表示することもできます。

  • spanner.googleapis.com/instance/autoscaling/min_node_count
  • spanner.googleapis.com/instance/autoscaling/max_node_count
  • spanner.googleapis.com/instance/autoscaling/min_processing_units
  • spanner.googleapis.com/instance/autoscaling/max_processing_units
  • spanner.googleapis.com/instance/autoscaling/high_priority_cpu_target_utilization
  • spanner.googleapis.com/instance/autoscaling/storage_target_utilization

ロギング

Spanner は、インスタンスをスケーリングするたびにシステム イベント監査ログを作成します。

マネージド オートスケーラー システム イベントログは、Google Cloud コンソールの [システム分析情報] ページで確認できます。

ログ エクスプローラを使用してログを表示することもできます。

  1. Google Cloud コンソールで、ログ エクスプローラを開きます。

    ログ エクスプローラに移動

  2. 適切な Google Cloud プロジェクトを選択します。

  3. [クエリ] フィールドに次のクエリを入力します。

     protoPayload.methodName="AutoscaleInstance"
    

    次のクエリを追加して、ログをさらに絞り込むことができます。

    resource.type="spanner_instance"
    resource.labels.instance_id=INSTANCE_ID
    resource.labels.project_id=PROJECT_ID
    logName="projects/span-cloud-testing/logs/cloudaudit.googleapis.com%2Fsystem_event"
    protoPayload.methodName="AutoscaleInstance"
  4. [クエリを実行] をクリックします。

[クエリ結果] ペインには、過去 1 時間のログが表示されます。

ログの表示の詳細については、Cloud Logging をご覧ください。 ログベースのアラート は、Google Cloud の ログ エクスプローラ ページで設定するか、Cloud Monitoring API を使用して設定することができます。

次のステップ