【こーるどすたーと】

コールドスタート とは?

💡 久しぶりに使うと起動に時間がかかる「エンジンの暖機運転」
📌 このページのポイント
コールドスタート vs ウォームスタート コールドスタート コンテナ生成 初期化・依存読込 関数実行 合計レイテンシ: 高い オーバーヘッド ウォームスタート コンテナ起動済み(再利用) 実行 関数実行のみ 合計レイテンシ: 低い ウォームスタートではオーバーヘッドが不要 → 応答速度が大幅に向上
コールドスタートの仕組み
ひよこ ひよこ

コールドスタートってなんで起きるの?

ペンギン先生 ペンギン先生

サーバーレスは「使っていないときはリソースがゼロ」が売りだよね。でもリクエストが来たときに実行環境を0から用意する必要がある。コンテナの起動・ランタイムの初期化・コードのダウンロードと展開を全部やってからコードが動くから、その分だけ遅延が発生するんだ。

ひよこ ひよこ

どれくらい遅くなるの?

ペンギン先生 ペンギン先生

言語によって全然違うんだ。PythonNode.jsなら100〜300ms程度だけど、Java・.NETだと1〜5秒かかることもある。JVMの起動やクラスロードに時間がかかるからね。パッケージサイズが大きいほどコードのダウンロードにも時間がかかるよ。

ひよこ ひよこ

コールドスタートを避ける方法ってあるの?

ペンギン先生 ペンギン先生

AWS Lambdaには「Provisioned Concurrency」があって、あらかじめ実行環境を温めておける。定期的にダミーリクエストを送って環境を維持する「ウォーミング」もよく使われるよ。あとはパッケージサイズを小さくする、不要なライブラリを除く、というのも効果的だね。

ひよこ ひよこ

Provisioned Concurrencyを使えばコールドスタートは完全に解決するの?

ペンギン先生 ペンギン先生

理論上はそうなんだけど、実運用ではそう単純じゃないんだ。Provisioned Concurrencyは「常にN個の環境を温めておく」仕組みだから、Nを超えるリクエストが同時に来たらやっぱりコールドスタートが発生する。そしてNを大きくすると常時課金が発生して、サーバーレスの「使った分だけ払う」メリットが薄れる。結局「コールドスタートのレイテンシ」と「常時起動のコスト」のトレードオフで、ビジネス要件としてレイテンシのP99(99パーセンタイル)がどこまで許容されるかによって判断が変わるんだよ。APIゲートウェイの裏のLambdaなら数百msは許容できるけど、リアルタイム性が求められる決済APIだとコールドスタートは致命的、みたいにね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コールドスタート」って出てきたら「サーバーレス関数が初回起動時に遅くなる問題のことだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Cold Start」 = 冷えた状態からの起動
💬 Cold(冷たい)+ Start(起動)。エンジンが冷えた車を動かすときに時間がかかるのと同じイメージだよ
← 用語集にもどる