同時実行数と制限 どうじじっこうすうとせいげん
同時実行数コンカレンシーLambdaスロットリングスケーリングサーバーレス
同時実行数と制限について教えて
同時実行数と制限とは
同時実行数(コンカレンシー、Concurrency) とは、サーバーレス関数(AWS Lambda などの FaaS)が「同じ瞬間に並行して処理できるリクエストの最大数」のことです。たとえば同時実行数が 100 であれば、100 件のリクエストまでは同時に処理できますが、101 件目は待機または拒否されます。
サーバーレスは「リクエストが来たら自動でスケール(台数を増やす)する」という特性を持ちますが、それは無限ではありません。クラウドプロバイダーはリージョンごと・アカウントごとに上限を設けており、これを超えると スロットリング(Throttling) と呼ばれるエラーが発生します。ビジネスの発注・選定・設計フェーズで見落としやすいポイントの一つです。
実務上、突発的なアクセス集中やバッチ処理との競合などで同時実行数の上限に達してしまい、ユーザーにエラーが返るトラブルは珍しくありません。上限を正しく把握し、必要に応じてリザーブドコンカレンシーやプロビジョンドコンカレンシーを設定しておくことが、安定したサービス運用の鍵です。
同時実行数の仕組み
サーバーレスでは、リクエストが届くたびに関数の「実行環境(インスタンス)」が起動します。同時実行数とは、その実行環境が同時に何本立ち上がれるか、と考えると直感的です。
| 用語 | 意味 |
|---|---|
| 同時実行数(コンカレンシー) | ある瞬間に並行処理できるリクエスト数 |
| スロットリング | 上限超過時に新規リクエストを拒否すること(HTTP 429) |
| リザーブドコンカレンシー | 特定の関数に同時実行枠を専用確保する設定 |
| プロビジョンドコンカレンシー | コールドスタートを防ぐため、実行環境をあらかじめ温めておく設定 |
| アカウントレベル上限 | AWS の場合デフォルト 1,000(リージョンごと。申請で引き上げ可) |
同時実行数の計算式
関数の同時実行数は、次の式でざっくり見積もれます。
同時実行数 ≈ リクエスト数(件/秒)× 関数の平均実行時間(秒)
例)100 req/秒 × 0.5秒 = 50 の同時実行数が必要
覚え方
「同時は同士(どうし)を助ける」→ 同時実行数を超えたら助けられずスロットリング!
リクエストが増えたら「仲間(インスタンス)」を増やすけど、チームの人数制限(上限) があるイメージで。
歴史と背景
- 2014年 — AWS Lambda が登場。「サーバー管理不要で関数を実行」という概念が登場し、自動スケーリングが注目を集める
- 2015年頃 — 利用が拡大するにつれ、同時実行数の上限(当初は低め)でスロットリングが頻発し、問題として認知されるようになる
- 2018年 — AWS がリザーブドコンカレンシーを正式サポート。関数ごとに枠を確保できるようになり、重要な関数が枠を食い尽くされる問題を緩和
- 2019年 — プロビジョンドコンカレンシーが追加。コールドスタート(起動遅延)対策として注目される
- 現在 — Google Cloud Functions・Azure Functions などでも同様の概念が整備され、サーバーレス設計の必須知識として定着
コンカレンシーの種類と比較
3種類のコンカレンシー設定
スロットリングが起きたときの流れ
リクエスト到着
│
▼
同時実行数に空きがある?
│
YES ──────────────────→ 関数を実行(正常)
│
NO
│
▼
リトライ設定あり?
│
YES ──→ キューで待機 → 空き次第実行
│
NO
│
▼
HTTP 429 / TooManyRequestsException を返す(スロットリング)
主要クラウドの上限比較
| プロバイダー | デフォルト上限 | 引き上げ |
|---|---|---|
| AWS Lambda | 1,000(リージョンあたり) | サポートへ申請で可能 |
| Google Cloud Functions | 3,000(プロジェクトあたり) | 申請で可能 |
| Azure Functions(消費プラン) | 200(サブスクリプションあたり) | 申請で可能 |
関連する規格・RFC
| 規格・仕様 | 内容 |
|---|---|
| HTTP 429 Too Many Requests | スロットリング時に返す標準HTTPステータスコード(RFC 6585) |
| CloudEvents v1.0 | サーバーレスイベントの標準仕様。コンカレンシー設計に影響する |
| AWS Service Quotas | AWSサービスの上限を一元管理・申請する仕組み |
関連用語
- サーバーレス — サーバー管理不要でコードを実行するクラウドの仕組み
- FaaS(Function as a Service) — 関数単位でデプロイ・実行するサーバーレスの形態
- コールドスタート — 初回リクエスト時に実行環境の起動遅延が発生する現象
- スロットリング — 上限超過時に新規リクエストを制限・拒否すること
- オートスケーリング — 負荷に応じてリソースを自動的に増減する仕組み
- AWS Lambda — AWSが提供する代表的なFaaSサービス