このページでは、Spanner 用のオートスケーラー ツール(オートスケーラー)について説明します。このオープンソースのツールは、Spanner のコンパニオン ツールとして使用できます。このツールを使用すると、使用中の容量に基づいて、1 つ以上の Spanner インスタンスのコンピューティング容量を自動的に増減できます。
Spanner でのスケーリングの詳細については、Spanner の自動スケーリングをご覧ください。オートスケーラー ツールのデプロイについては、以下をご覧ください。
- Spanner のオートスケーラー ツールを Cloud Run functions にデプロイする。
- Spanner のオートスケーラー ツールを Google Kubernetes Engine(GKE)にデプロイする。
このページでは、オートスケーラーの機能、アーキテクチャ、概要構成について説明します。これらのトピックでは、さまざまなトポロジでサポートされているランタイムのいずれかにオートスケーラーをデプロイする方法について説明します。
オートスケーラー
オートスケーラー ツールは、Spanner デプロイの使用率とパフォーマンスを管理するのに役立ちます。コスト管理とパフォーマンス ニーズのバランスをとるために、オートスケーラーはインスタンスをモニタリングし、自動的にノードや処理単位を追加または削除して、次のパラメータに収まるようにします。
構成可能なマージンを増減した値。
Spanner デプロイの自動スケーリングを使用すると、インフラストラクチャが自動的に調整とスケーリングを行い、ユーザーがほとんどまたはまったく介入せずに負荷要件を満たすことができます。自動スケーリングにより、プロビジョニングされたインフラストラクチャのサイズも適正化され、発生する料金を最小限に抑えることが可能です。
アーキテクチャ
オートスケーラーには、ポーラーとスケーラーという 2 つの主要コンポーネントがあります。構成の異なるオートスケーラーを、構成の異なる複数のトポロジ内の複数のランタイムにデプロイできますが、これらのコア コンポーネントの機能は同じです。
このセクションでは、これらの 2 つのコンポーネントとその目的について詳しく説明します。
ポーラー
ポーラーは、1 つ以上の Spanner インスタンスの時系列指標を収集して処理します。ポーラーは、各 Spanner インスタンスの指標データを前処理して、最も関連するデータポイントのみを評価し、スケーラー関数に送信します。ポーラー関数によって行われた前処理により、リージョン、デュアルリージョン、マルチリージョンの Spanner インスタンスのしきい値の評価プロセスが簡単になります。
スケーラー
スケーラーは、ポーラー コンポーネントから受信したデータポイントを評価し、ノード数または処理単位の数の調整が必要かどうかを判断します。必要な場合はその数で調整します。指標の値としきい値(許容されるマージンも考慮)を比較して、構成されたスケーリング メソッドに基づいてノードや処理単位の数を調整します。詳細については、スケーリング方法をご覧ください。
フロー全体を通して、オートスケーラー ツールは推奨事項とアクションの概要を Cloud Logging に書き込み、トラッキングと監査を行います。
オートスケーラーの機能
このセクションでは、オートスケーラー ツールの主な機能について説明します。
複数のインスタンスを管理する
オートスケーラー ツールは、複数のプロジェクトにまたがる複数の Spanner インスタンスを管理できます。マルチリージョン インスタンス、デュアルリージョン インスタンス、リージョン インスタンスのすべてで、スケーリング時に使用される使用率のしきい値が異なります。たとえば、マルチリージョン デプロイとデュアルリージョン デプロイは高優先度 CPU の使用率 45% でスケーリングされ、リージョン デプロイは高優先度 CPU の使用率 65% でスケーリングされます。両方とも、マージン分のプラスまたはマイナスが許容されます。さまざまなスケーリングのしきい値の詳細については、CPU 使用率の上昇に関するアラートをご覧ください。
独立した構成パラメータ
自動スケーリングの Spanner インスタンスごとに 1 つ以上のポーリング スケジュールを設定できます。各ポーリング スケジュールには固有の構成パラメータのセットがあります。
これらのパラメータは、次の要因によって変動します。
- インスタンスの増減を制御するノードや処理単位の最小数と最大数。これは発生した課金額の管理に役立ちます。
- ワークロードに固有の Spanner インスタンスを調整するのに使用されるスケーリング メソッド。
- Spanner がデータ分割を管理できるようにするためのクールダウン期間。
スケーリング方法
オートスケーラー ツールには、Spanner インスタンスのスケールアップとスケールダウンに対応する 3 つのスケーリング メソッド(段階的、線形、直接)があります。それぞれの方式は、さまざまな種類のワークロードをサポートするように設計されています。別々のポーリング スケジュールを作成する際、自動スケーリングされる Spanner インスタンスごとに 1 つ以上のメソッドを適用できます。
以降のセクションでは、これらのスケーリング方法について詳しく説明します。
段階的
段階的スケーリングは、ワークロードに小規模または複数のピークがある場合に便利です。単一の自動スケーリング イベントで、これらをスムーズに調整できる機能をプロビジョニングできます。
次のグラフは、負荷の増減に複数のステップがある負荷パターンを示しています(ステップごとに小さなピークがあります)。このパターンは、段階的なメソッドに適しています。
この方法では、負荷のしきい値を超えると、構成可能な固定値を使用してノードや処理単位がプロビジョニングまたは削除されます。たとえば、スケーリング アクションごとに 3 つのノードが追加または削除されます。構成を変更することで、いつでも容量の増減を行うことができます。
線形
線形スケーリングは、負荷パターンが徐々に変化する場合や大きなピークが少ない場合に適しています。この方法では、使用率がスケーリングしきい値を下回った状態を維持するために必要なノードや処理ユニットの最小数を計算します。スケーリング イベントごとに追加または削除されるノードや処理単位の数は、固定されたステップ量に制限されません。
次のグラフの負荷パターンは、負荷の急激な増加と減少を示しています。前のグラフと同様に、これらの変動は識別可能なステップにグループ化されません。このパターンは、線形スケーリングを使用すると適切に処理できます。
オートスケーラー ツールは、観測された使用率と使用率のしきい値に対する比率を使用して、現在の総数からノードまたは処理単位を追加または減算するかどうかを計算します。
新しいノード数や処理ユニット数の計算式は次のとおりです。
newSize = currentSize * currentUtilization / utilizationThreshold
直接
直接接続スケーリングでは、容量がすぐに増加します。この方法は、開始時刻がわかっているスケジュールで、事前に定義された数より多いノード数が定期的に必要になるバッチ ワークロードをサポートすることを目的としています。この方法は、スケジュールで指定されたノードや処理単位の最大数までインスタンスをスケーリングします。これは、線形または段階的な方法に加えて使用する必要があります。
次のグラフは、想定される負荷の大幅な増加を示しています。これは、オートスケーラーが直接メソッドで事前にプロビジョニングした容量です。
バッチ ワークロードが完了して使用率が通常レベルに戻ると、構成に応じて、線形または段階的スケーリングが適用され、インスタンスが自動的にスケールダウンされます。
構成
オートスケーラー ツールには、Spanner デプロイメントのスケーリングの管理に使用できるさまざまな構成オプションがあります。Cloud Run functions と GKE パラメータは類似していますが、提供方法が異なります。オートスケーラー ツールの構成の詳細については、Cloud Run functions のデプロイを構成すると GKE のデプロイを構成するをご覧ください。
詳細構成
オートスケーラー ツールには、Spanner インスタンスの管理のタイミングと方法をより細かくコントロールできる高度な構成オプションがあります。以降のセクションでは、これらのコントロールの一部を説明します。
カスタムしきい値
オートスケーラー ツールは、次の負荷指標の推奨される Spanner しきい値を使用して、インスタンスに増減するノードや処理単位の数を決定します。
- 優先度の高い CPU
- 稼働平均 24 時間 CPU
- ストレージの利用率
Spanner 指標用のアラートを作成するで説明されているように、デフォルトのしきい値を使用することをおすすめします。ただし、いくつかのケースでは、オートスケーラー ツールが使用するしきい値を変更したい場合もあります。たとえば、低いしきい値を使用して、オートスケーラー ツールに高いしきい値より早く反応させることが可能です。この変更により、アラートが高いしきい値でトリガーされないようにできます。
カスタム指標
オートスケーラー ツールのデフォルト指標では、ほとんどのパフォーマンスとスケーリングのシナリオに対処できますが、スケールインとスケールアウトを行うタイミングを決定するために使用する独自の指標の指定が必要になることがあります。これらのシナリオでは、metrics
プロパティを使用して、構成でカスタム指標を定義します。
余白
マージンは、しきい値の前後の上限と下限を定義します。オートスケーラー ツールは、指標の値が上限を超えているか、下限より小さい場合にのみ、自動スケーリング イベントをトリガーします。
このパラメータは、しきい値付近の小さいワークロードの変動で自動スケーリング イベントがトリガーされないようにし、オートスケーラーの操作で変動の発生回数を減らすことを目的としています。しきい値とマージンは、指標の値に応じて次のような範囲で定義します。
[threshold - margin, threshold + margin]
マージンが小さいほど範囲は狭くなり、自動スケーリング イベントがトリガーされる確率が高くなります。
指標のマージン パラメータの指定はオプションであり、デフォルトでは、パラメータの前後に 5% のポイントが指定されます。
データ スプリット
Spanner は、スプリットと呼ばれるデータの範囲を、ノードや処理単位と呼ばれるノードの下位区分に割り当てます。ノードや処理単位は、分割されたスプリットのデータを個別に管理して提供します。データ スプリットは、データ量やアクセス パターンなど、いくつかの要因に基づいて作成されます。詳細については、Spanner - スキーマとデータモデルをご覧ください。
データはスプリットに整理され、Spanner はスプリットを自動的に管理します。そのため、オートスケーラー ツールがノードや処理単位を追加または削除する場合は、インスタンスに新しい容量が追加または削除されたときに、Spanner バックエンドがスプリットの再割り当てや再編成を行うのに十分な時間を確保する必要があります。
オートスケーラー ツールは、スケールアップ イベントとスケールダウン イベントの両方でクールダウン期間を使用して、インスタンスに対してノードや処理単位を追加または削除する速度を制御します。この方式を使用すると、コンピューティング ノードや処理単位とデータ スプリット間の関係を再編成するために必要な時間をインスタンスに追加できます。デフォルトでは、スケールアップとスケールダウンのクールダウン期間が次の最小値に設定されています。
- スケールアップ値: 5 分
- スケールダウンの値: 30 分
スケーリングの推奨事項とクールダウン期間の詳細については、Spanner インスタンスのスケーリングをご覧ください。
料金
オートスケーラー ツールのリソース消費量は、コンピューティング、メモリ、ストレージの点でわずかです。オートスケーラーの構成に応じて、Cloud Run functions にデプロイされた場合、オートスケーラーのリソース使用率は通常、依存するサービス(Cloud Run functions、Cloud Scheduler、Pub/Sub、Firestore)の無料枠内にあります。
料金計算ツールを使用すると、予想使用量に基づいて環境の費用見積もりを作成できます。
次のステップ
- オートスケーラー ツールを Cloud Run functions にデプロイする方法を学習する。
- オートスケーラー ツールを GKE にデプロイする方法を確認する。
- Spanner の推奨しきい値について確認する。
- Spanner の CPU 使用率の指標とレイテンシの指標の詳細を確認する。
- Spanner スキーマ設計のベスト プラクティスで、ホットスポットを回避し、データを Spanner に読み込む方法を確認する。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。