MENU

Lambdaの同時実行、予約済みとプロビジョニング済みの違い

DynamoDB Streamsは「変更の記録」、TTLは「期限切れの自動削除」を説明する画像

おはようございます、YASUです。

DynamoDBのスロットリングの記事で、「上限を超えると断られる」という話を書きましたが、Lambdaにも同じように、同時に処理できる数の上限があります。DVAの勉強で、「予約済み同時実行」と「プロビジョニング済み同時実行」を取り違えたので、シンプルに整理しました。

目次

結論

予約済み同時実行は、関数に専用の枠を確保する仕組みで、追加料金はかかりません。プロビジョニング済み同時実行は、実行環境を事前に準備しておく仕組みで、コールドスタートを減らせますが、追加料金がかかります。

同時実行とは

同時実行は、Lambda関数が、同時に処理している未完了のリクエストの数です。同時に来たリクエストごとに、実行環境が1つずつ用意されます。アカウントのデフォルトの上限は、1つのリージョン内のすべての関数を合わせて、1,000です。ある関数にリクエストが集中すると、この枠を使い切って、他の関数がスロットリングされることがあります。

予約済み同時実行:その関数専用の枠

  • 関数に割り当てる、同時実行の最大数
  • 確保した分は、他の関数が使えない
  • 追加料金はかからない
  • 予約していない関数は、残りの枠を、みんなで共有する

自分なりのイメージでは、お店の「専用席」です。重要な関数に、専用席を確保しておけば、他の関数が混んでいても、席がなくなることがありません。同時に、その関数が使える席の上限にもなります。

プロビジョニング済み同時実行:先に準備しておく

  • 事前に初期化しておいた、実行環境の数
  • リクエストが来た時に、すぐに対応できるので、コールドスタートを減らせる
  • 追加料金がかかる
  • エイリアスやバージョンに対して設定する

コールドスタートは、実行環境の初期化が必要で、最初のリクエストの処理が遅くなることです。自分なりのイメージでは、お客さんが来る前に、先に厨房の準備を済ませておく状態です。公式のドキュメントでは、ウェブアプリケーションやモバイルアプリケーションのような、ユーザーが待っているワークロードに向いていて、データ処理のような非同期の処理には、通常は必要ない、と説明されています。

設定する対象は、エイリアスやバージョンです。前に整理した、バージョンとエイリアスの記事とつながる部分です。

試験での見分け方

  • 「他の関数にスロットリングされないように、枠を確保したい」「追加料金なし」→ 予約済み同時実行
  • 「コールドスタートを減らしたい」「応答を速くしたい」→ プロビジョニング済み同時実行
  • 「コストを抑えたい」→ 予約済み(追加料金なし)

まとめ

  • 同時実行は、同時に処理しているリクエストの数。デフォルトは、リージョン全体で1,000
  • 予約済み同時実行は、関数専用の枠で、追加料金なし
  • プロビジョニング済み同時実行は、事前に準備した実行環境で、コールドスタートを減らせるが、追加料金がかかる
  • プロビジョニング済み同時実行は、エイリアスやバージョンに設定する

「枠を確保するのか、準備を済ませておくのか」という違いで、すっきり整理できました。それでは、また明日!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次