🔥

Cloud Runのオートスケーラをちゃんと理解する

2024/12/25に公開

はじめに

この記事はBrainpad Advent Calendar 2024 の12日目になります。

背景

Cloud Runはフルマネージドのプラットフォームでコンテナ化されたアプリケーションをデプロイできるGoogle Cloudのサービスです。
本記事では、Cloud Runの提供する機能の一つであるオートスケーリングについて理解することを目的とします。

用語

  • リビジョン: デプロイされたアプリケーションのバージョンを指す。各リビジョンに対して独立した設定ができる
  • インスタンス: アプリケーションをホストする仮想コンテナ

Cloud Runのスケーリングに関する設定項目

  • インスタンスのCPUコア数
  • インスタンスのRAMサイズ
  • 最小インスタンス数(デフォルト:0)
  • 最大インスタンス数(デフォルト:100)
  • 最大同時リクエスト(デフォルト:80)
  • タイムアウト時間(デフォルト:300s)

オートスケーラの評価ロジック

以下を5秒ごとに評価する

  • 稼働中インスタンスの1分間の平均CPU使用率が60%を超えた時、60%を維持するようにスケールアウトする
  • 1分間の同時実行数が最大同時リクエスト数を超えた時、最大同時実行するに張り付くようにスケールアウトする
  • インスタンスの最大数を超えた時、スケールアウトする

最大インスタンス数について

前述の通り、Cloud Runには最大インスタンス数を設定することができる。最大インスタンス数については以下に注意する必要がある。

最大インスタンス数を超過するとき(インスタンスが不足するとき)

  • 少なくとも平均起動時間の間はリクエストが保留される
  • この時間枠内で使用可能になるインスタンスがない場合、リクエストは失敗し、429 エラーコードが返される

最大インスタンス数はリビジョンごとの最大数である

  • リビジョンのインスタンスの数が最大数を超えてはならないことを意味する

トラフィックの急増による最大インスタンス数の超過

  • トラフィックの急増やシステム メンテナンスなどの一部のケースでは、Cloud Run が短期間に最大インスタンス数を超えるインスタンスを作成することがある
  • 最長 15 分、またはリクエスト タイムアウトの設定で指定された値まで継続する
  • 超過したインスタンスは、アイドル状態になってから 15 分以内に破棄される

つまり、Cloud Runでは最大インスタンス数を超えることもあるため、コスト要件によってはサービスが許容できるインスタンス値よりも少ない最大インスタンス値を設定するべきである。

参考

https://cloud.google.com/run/docs/about-instance-autoscaling?hl=ja

Discussion