スケーリングと同時実行制御

AWS Lambda によるサーバーレスアプリケーション

Claudio Canales

Senior DevOps Engineer

スケーリングを1枚の図で理解する

  • 需要増加 → 並列実行数が増えます。
  • 各実行は実行環境を使用します。
  • 同時実行数 = 現在実行中の数です。

需要急増 → 環境のスケールアウト

AWS Lambda によるサーバーレスアプリケーション

同時実行数とは?

  • 1回の呼び出し = 1つの処理単位です。
  • 同時実行数 = 現在実行中の数です。
  • 10個実行中なら、同時実行数 = 10です。

並列呼び出し

AWS Lambda によるサーバーレスアプリケーション

必要な同時実行数の見積もり

  • 目安:concurrency = rps * duration
  • 処理時間を短縮すると同時実行数が減ります。
  • この式を使って上限値を安全に設定しましょう。

同時実行数の計算式

AWS Lambda によるサーバーレスアプリケーション

例:200 ms で 50 rps の場合

  • 200 ms = 0.2秒です。
  • 50 * 0.2 = 同時実行数10です。
  • 処理が速いほど並列実行数が減ります。

同時実行数の計算例

AWS Lambda によるサーバーレスアプリケーション

制限:アカウントプールと関数スライス

  • 同時実行数はアカウントレベルで制限されます。
  • 重要な関数のためにプールの一部を予約します。
  • 他の関数は残りを共有します。

アカウントの同時実行プール

AWS Lambda によるサーバーレスアプリケーション

予約同時実行数:ハードキャップ

  • 安全弁として機能します。
  • 並列処理数を制限します。
  • 上限を超えると呼び出しがスロットリングされます。
  • 1つの関数がキャパシティを使い果たすのを防ぎます。

予約同時実行数の上限

AWS Lambda によるサーバーレスアプリケーション

スロットリング:実際の見え方

  • Lambda は同時実行数の上限でスロットリングします。
  • 呼び出し元は通常の実行結果を受け取れません。
  • スロットリングはモニタリングで確認できます。

スロットリングのシグナル

AWS Lambda によるサーバーレスアプリケーション

プロビジョニング済み同時実行:ウォームキャパシティ

  • 事前に初期化された実行環境のプールです。
  • エイリアスの背後に配置されることが多いです。
  • リクエストの起動が速くなります。

プロビジョニング済み同時実行のウォームプール

AWS Lambda によるサーバーレスアプリケーション

コールドスタートとプロビジョニング済みの比較

コールドスタート

  • 初回のみ発生する初期化遅延です。
  • 最初のリクエストがセットアップコストを負担します。

プロビジョニング済み

  • 初期化処理を事前に完了します。
  • 最初のリクエストがセットアップコストを負担しません。

コールドスタートとプロビジョニング済みのタイムライン比較

AWS Lambda によるサーバーレスアプリケーション

予約済みとプロビジョニング済みの違い

  • 予約同時実行数は負荷を制御します。
  • プロビジョニング済み同時実行は起動レイテンシを制御します。
  • 本番環境の関数では両方を併用することが多いです。

予約済みとプロビジョニング済みの比較

AWS Lambda によるサーバーレスアプリケーション

ダウンストリームシステムの保護

  • データベースが処理できる接続数には限りがあります。
  • 同時実行数の上限で過負荷を防げます。
  • トラフィックの急増が障害につながる恐れがあります。

同時実行数の上限がデータベースを保護する

AWS Lambda によるサーバーレスアプリケーション

バーストと定常トラフィック

  • バーストにより多数の並列環境が生成されます。
  • 処理が遅いと同時実行数が高い状態が続きます。
  • 上限を設けることでスパイクを平滑化できます。
  • 処理時間の短縮もスケーリング戦略の1つです。

バーストトラフィックと定常状態の比較

AWS Lambda によるサーバーレスアプリケーション

障害とリトライが負荷を増加させる

  • リトライによりトラフィックが増幅されます。
  • 同時実行数の制限で影響範囲を抑えられます。
  • 障害ループが依存先を圧迫する恐れがあります。

リトライが負荷を増幅させる

AWS Lambda によるサーバーレスアプリケーション

シンプルなチューニングワークフロー

  • まず計測から始めましょう。
  • スロットリングや負荷が現れたら同時実行数を制限します。
  • コールドスタートがレイテンシに影響する場合はプロビジョニング済みキャパシティを追加します。

計測 → 制限 → 事前ウォームアップ

AWS Lambda によるサーバーレスアプリケーション

重要なポイント

  • 同時実行数はスケーリングを考える上で役立ちます。
  • 見積もり:rps * duration
  • 予約同時実行数は負荷を制限します。スロットリングに注意しましょう。
  • プロビジョニング済み同時実行はコールドスタートのレイテンシを削減します。

同時実行数の重要なポイント

AWS Lambda によるサーバーレスアプリケーション

練習しましょう!

AWS Lambda によるサーバーレスアプリケーション

Preparing Video For Download...