🔍

Spanner のマネージド オートスケーラーとオート スケーリング ツールの使いどころ

2023/11/29に公開

こんにちは。次は大阪マラソンを走ります。吉崎です。

Spanner にマネージド オートスケーラー(プレビュー)実装されましたね。
はい。おっしゃる通り、既存のオートスケーラー ツール(以降、autoscaler)とどう使い分けるのか分からないですよね。
そんな声にお応えして、今回は両者の使いどころを紹介します。

オートスケーラーとは?

負荷に応じてノード数を自動で増減してくれる機能です。たとえば、負荷が増えて CPU 使用率が 70 % になったときに、自動でノード数を 1 → 2 に変えてくれます。その逆で、負荷が減ったときにノード数を 2 → 1 にしてくれたりします。便利です。
マネージドの方は以下の妹尾の記事に詳しく、autoscaler は公式ドキュメントをご覧ください。
どちらもオートスケーリングを実現するための機能・ツールですが、できることが異なります。

https://zenn.dev/cloud_ace/articles/spanner-native-autoscaler

マネージド オートスケーラーにできること

settings-managed-autoscaler

スクリーンショットから抜粋し、できることを以下に記載します。

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

以下、3 点留意すべきことがあります。

  1. リージョン/マルチリージョンの別によって CPU 使用率の推奨値が異なること
    リージョン構成の場合、CPU 使用率は 65 % を下回ること、マルチリージョン構成の場合は 45 % を下回ることが推奨されています。
  2. ノード数上限は割り当てを超過できないこと
    ノード数上限はデフォルトで 100 です。マルチリージョンの場合は 25 です。超過する場合は割り当てを増やす申請が必要です。
  3. 処理ユニットに基づくオートスケーリングができないこと
    パラメータの節に記載がありますが、下限値は少なくとも 1000 処理ユニットにする必要があります。2023/11/14 時点で gcloud beta spanner instances update に付随する処理ユニットを指定するオプションによって処理ユニット単位の指定はできませんでした。

autoscaler にできること

autoscaler はマネージド オートスケーラーより柔軟なオートスケーラーです。
具体的には、以下のことを実施できます。決定的な違いは太字にしています。

  • 増加/減少させる処理ユニット/ノード数の設定
    一度に増加/減少する処理ユニット/ノード数を指定できます。たとえば、200 処理ユニットずつ増やしたり、2 ノードずつ増やしたり、ということができます。
  • スケーリングタイミング・頻度の設定
    指定した日時・頻度でスケーリングできます。負荷のピーク直前の 18:00 にノード数を 5 に増やし、1:00 にノード数を 1 に戻すという使い方が可能です。
  • カスタム指標を用いた目標値の設定
    デフォルトでは高い優先度の CPU 使用率、CPU 使用率の 24 時間平均、ストレージ使用率の 3 つ(下記)が用意されていますが、任意の指標を用いることができます。たとえば、Memorystore for Redis の Eviction(メモリを使い切り、既存のキーを削除すること) の発生を先行指標とし、Spanner のノード数を増やすという使い方ができます。

https://github.com/cloudspannerecosystem/autoscaler/blob/a89e38fe7c146e5af695d353ed4f1be991775c5a/src/poller/poller-core/index.js#L62-L94

  • クールダウン期間への配慮
    マネージド オートスケーラーにも備わっていると思いますが、autoscaler はスケールアップ時は 5 分、スケールダウン時は 30 分間オートスケーリングを行いません。
  • 複数インスタンスに対するオートスケーリングの実施
    1 プロジェクトから複数のプロジェクトに存在するインスタンスのオートスケーリングを管理できます。ただし、マネージド オートスケーラーを個別のインスタンスごとに設定すれば同様の状態にできるため、こちらは決定的な違いとまでは言えません。

忘れてはならないのが、autoscaler は複数の Google Cloud プロダクトの組み合わせによって実現されている点です。対してマネージド オートスケーラーは、その名の通りマネージド サービスです。autoscaler が使用するプロダクトと費用については公式ドキュメントをご覧ください。なお、5 分間隔でオートスケール要否を判断する場合には無料で使用できます。

https://cloud.google.com/spanner/docs/autoscaler-tool-overview?hl=ja#costs

決定木

上記の違いをもとに簡単な決定木を作成しました。どちらのオートスケーラーを使えば良いか判断するときに参考にしてみてください。

decision-tree

大まかには、「とりあえずオートスケールを実現したい!」という場合はマネージド オートスケーラー、「決まった時間にスケールアウト/インしたい!」という場合は autoscaler という選択になると思います。

最後に

マネージド オートスケーラーのリリースステージはプレビューです。今後 autoscaler に相当する機能が実装される可能性もありますので、今後のマネージド オートスケーラーに注目しましょう。

Discussion