Open1
Lambdaのスロットリングと同時実行数
- 同時実行数とは、AWS Lambda 関数が同時に処理できる未完了のリクエストの数
- 同時実行リクエストごとに、実行環境の個別のインスタンスをプロビジョニングされる
- Lambdaは実行環境を初期化(Init)→呼び出し(Invoke)のフェーズがある
- 初期化は実行環境が最初にリクエストを処理する時にしか実行されない
- 複数のリクエストが発生した場合、実行環境を増やしてリクエストを処理する
- 関数の同時実行とは、関数が同時に処理している同時リクエストであり、実行環境数を一致するわけではない
- 1リクエストの処理時間が短ければ、1秒以内で同じ実行環境で処理できるリクエストが増える
関数の同時実行数の計算
### 公式
Concurrency = (average requests per second) * (average request duration in seconds)
### 例:リクエストの平均所要時間が 500 ミリ秒
Concurrency = (100 requests/second) * (0.5 second/request) = 50
- 利用できる同時実行が不足すると、関数でスロットリングが発生する(リクエストがドロップされ始めまる)
- 予約された同時実行
-関数が常に利用可能であることを確実にしたい場合に指定する数- 関数に割り当てる同時インスタンスの最大数でもある
- プロビジョニングされた同時実行
- 関数に割り当てる、事前に初期化された実行環境の数
- アカウントのすべての関数で、Lambda はアカウントの同時実行数の 10 倍に相当する 1 秒あたりのリクエスト数の制限を適用する
- デフォルトのアカウントの同時実行上限は 1,000 であるため、アカウントの関数は 1 秒あたり最大 10,000 件のリクエストを処理できる
- 突然のトラフィック急増によるオーバースケーリングを防ぐために、Lambda では関数がスケールできる速度を10 秒ごとに 1,000 の実行環境インスタンス (または 10 秒ごとに 1 秒あたり 10,000 リクエスト) に制限している