Amazon Web Services ブログ

AWS Lambda 関数が大量のリクエストを処理する場合に 12 倍速くスケールできるようになりました

AWS Lambda は、最大 12 倍速くスケールアップできるようになりました。同期的に呼び出される各 Lambda 関数は、すべての関数の合計同時実行数がアカウントの同時実行数の上限に達するまで、10 秒ごとに 1,000 回の同時実行回数でスケールするようになりました。さらに、アカウント内の各関数は、関数の呼び出し方法に関係なく、互いに独立してスケールするようになりました。これらの改善には追加コストはかかりません。また、既存の関数の設定を行う必要もありません。

スケーラブルで高性能なアプリケーションを構築することは、従来のアーキテクチャでは困難な場合があり、ピーク時の需要や予測不可能なトラフィックに対応するために、コンピューティングリソースを過剰にプロビジョニングしたり、複雑なキャッシュソリューションを必要としたりすることがよくあります。多くのデベロッパーが Lambda を選択するのは、アプリケーションが予測できないトラフィックに直面したときにオンデマンドでスケールできるためです。

今回の更新以前は、Lambda 関数は最初の 1 分で 500~3,000 回の同時実行 (リージョンによって異なります) をアカウントレベルでスケールし、その後、アカウントの同時実行数の上限に達するまで毎分 500 回の同時実行を行えました。このスケーリング上限は、同じアカウントとリージョンのすべての関数で共有されていたため、ある機能にトラフィックが流入すると、同じアカウント内の他の機能のスループットに影響を与える可能性がありました。これにより、アカウントの上限を超えてバーストする可能性のあるいくつかの関数を監視するためのエンジニアリング作業が増え、ノイジーネイバーシナリオが発生し、同じアカウント内の他の関数の全体的な同時実行性が低下しました。

今では、こうしたスケーリングの改善により、トラフィックの変動が多いお客様は、以前よりも早く同時実行目標に到達できるようになりました。例えば、ニュース速報を流しているニュースサイトや、フラッシュセールを実施しているオンラインストアでは、訪問者が大量に流入します。これらの改善により、以前の 12 倍の速さでスケールできるようになりました。

さらに、Amazon AthenaAmazon Redshift などのサービスを Lambda ベースのスカラー UDF とともに使用してデータエンリッチメントやデータ変換を行うお客様は、こうした改善によるメリットを実感できるでしょう。これらのサービスは、データをバッチ処理して Lambda にまとめて渡し、同時に複数の並列関数を呼び出すことに依存しています。同時実行スケーリング動作の強化により、Lambda は迅速にスケールでき、サービスレベルアグリーメント (SLA) の要件も満たせます。

これは実際にはどのように機能しますか?
次のグラフは、10 秒ごとにリクエストを受信して処理する関数を示しています。アカウントの同時実行上限は 7,000 件の同時リクエストに設定されており、同じアカウント内のすべての関数で共有されます。各関数のスケールアップレートは、10 秒ごとに 1,000 回の同時実行数に固定されています。このレートは同じアカウント内の他の関数とは独立しているため、必要に応じてこの関数がどのようにリクエストをスケーリングおよびスロットリングするかを予測しやすくなります。

  • 09:00:00 – 関数はしばらく実行されており、既に 1,000 件の同時実行が処理されています。
  • 09:00:10 – 10 秒後、急に 1,000 件の新規リクエストが行われました。この関数は、10 秒ごとに最大 1,000 回の同時実行までスケールアップできるため、問題なく処理できます。
  • 09:00:20 – ここでも同じことが起こり、1000 件の新規リクエストがありました。
  • 09:00:30 – 関数は 1,500 件の新規リクエストを受け取るようになりました。関数の最大スケールアップキャパシティは 10 秒あたり 1,000 件のリクエストなので、そのうちの 500 件のリクエストはスロットリングされます。
  • 09:01:00 – この時点で、関数は既に 4,500 件の同時リクエストを処理しています。しかし、急に 3,000 件の新規リクエストがありました。この関数は 10 秒ごとに 1,000 件のリクエストまでスケールアップできるため、Lambda は 1,000 件の新規リクエストを処理し、2,000 件のスロットリングを行います。
  • 09:01:10 – 10 秒後、さらに 2,000 件のリクエストが急増し、関数はさらに 1,000 件のリクエストを処理できるようになりました。ただし、残りの 1,000 件のリクエストはスロットリングされます。これは、この関数が 10 秒ごとに 1,000 件のリクエストまでスケールできるためです。
  • 09:01:20 – 現在、この関数は 6,500 件の同時リクエストを処理しており、1,000 件のリクエストを受信します。これらのリクエストのうち最初の 500 件は処理されますが、残りの 500 件は、関数がアカウントの同時実行数の上限である 7,000 件のリクエストに達したため、スロットリングされます。AWS マネジメントコンソールでサポートチケットを作成することで、アカウントの同時実行数の上限を引き上げることができることを覚えておくことが重要です。

関数のスケーリングの例

アカウントに複数の関数がある場合は、アカウントの同時実行数の上限に達するまで、関数は独立してスケールします。上限に達した後は、新しい呼び出しはすべてスロットリングされます。

利用状況
このようなスケーリングの改善は、すべての関数でデフォルトで有効になります。11 月 26 日から 12 月中旬にかけて、AWS はこれらのスケーリングの改善を中国リージョンと GovCloud リージョンを除くすべての AWS リージョンに徐々に展開していきます。

Lambda の新しいスケーリング動作について詳しく知りたい場合は、Lambda スケーリング動作のドキュメントページをご覧ください。

– Marcia

原文はこちらです。