Cloud Runのコールドスタートについて整理してみた

記事タイトルとURLをコピーする

G-gen の武井です。当記事では Cloud Run のコールドスタートについて整理した結果をご紹介します。

Cloud Run の概要

Cloud Run とは、コンテナとしてパッケージされたアプリケーションを簡単に実行できる Google Cloud のフルマネージド型のサーバーレスプラットフォームサービスです。

インフラの管理はほぼ必要で、コンテナを実行するインスタンスは負荷に応じて自動的にスケールアウトし、処理をしていないときはインスタンス数を 0 までスケールインさせることも可能です。

その他 Cloud Run の詳細については弊社ブログで解説しておりますのでそちらをご参照ください。

blog.g-gen.co.jp

コールドスタートについて理解する

コールドスタートとは

コールドスタート とは、新しいインスタンスが起動する際に実行される 初期化プロセスに伴う遅延 のことです。

初期化プロセスとは、「コンテナイメージのダウンロード、アプリケーションの起動、必要なライブラリのロード」といった、アプリケーションの起動に必要な一連のプロセスを指します。

Cloud Run が ゼロからスケーリング (スケールアウト) する際や、リクエストの増加によりコンテナインスタンスがスケールアウトする際に発生します。

Cloud Run のスケールイン/アウト

冒頭でも述べましたが、Cloud Run はリクエスト負荷に応じて自動的に スケールイン (インスタンスの削除) / スケールアウト (インスタンスの追加) します。

ただし、すべてのリクエストを処理した場合でもすべてのインスタンスをすぐにシャットダウンすることはしません。

これはコールドスタートの影響を最小限に抑えるための設計思想で、一部のインスタンスを最大で 15 分間 アイドル状態で確保することで、その後のリクエストに最小限の遅延で応答きるよう考慮されています。

コールドスタートが発生する理由

ゼロスケール状態で新たにリクエストを受け付けたり、リクエストの増加によりコンテナインスタンスのスケールアウトが起こるとコールドスタート (遅延) が発生することがおわかりいただけたかと思います。

以降の章でコールドスタートの影響を軽減する方法をご紹介します。

コールドスタートの対策

起動時の CPU ブースト

起動時の CPU のブースト 機能は、インスタンスの起動時間中とインスタンス開始後の 10 秒間に追加の CPU を提供するもので、コールドスタートによる遅延軽減に有効です。

設定も簡単で、以下の公式ガイドに沿って設定するだけで起動時の CPU ブーストをご利用いただけます。

詳細は弊社ブログで解説しておりますのでこちらもあわせてご確認ください。

blog.g-gen.co.jp

最小インスタンス

Cloud Run は、リクエストを処理していないインスタンス(アイドル状態)を最大 15分 経過後に削除します。

最小インスタンス1 以上 の数で設定するとアイドル状態のインスタンスを常に確保してゼロスケール状態になるのを防ぐため、コールドスタートの改善が見込めます。

実行環境の選択

Cloud Run の実行環境には 第1世代第2世代 があり、前者は後者に比べ短い時間でコールドスタートで収束します。

ただし各世代にはそれぞれ適切なユースケースがあり、例えば NFS ボリュームのマウント が必須の場合、第1世代では対応していません。

第1世代で問題ないユースケースではコールドスタートによる遅延軽減が見込めます。

コールドスタート対策に伴う料金

Cloud Run はサービスに対するリクエスト数の他に、リクエストを処理している間に割り当てられた CPU と メモリの利用時間 (100ミリ秒単位) で課金されます。

そのため、起動 CPU ブーストを設定した場合は追加の課金が発生します。また、最小インスタンス数を 1 以上にしている場合のみ、アイドル状態のインスタンスに対しても料金が発生します。

詳細は公式ガイドをご確認ください。

関連記事

blog.g-gen.co.jp

武井 祐介 (記事一覧)

2022年4月にジョイン。クラウドソリューション部所属。G-gen唯一の山梨県在住エンジニア

Google Cloud Partner Top Engineer 2024 に選出。IaC や CI/CD 周りのサービスやプロダクトが興味分野です。

趣味はロードバイク、ロードレースやサッカー観戦です。