QCon San Francisco 2023の初日に、AWSのシニアプリンシパルエンジニアであるMike Danilov氏が、AWS Lambdaとその概要について発表した。この講演は「Architectures You've Always Wondered About」トラックの一部だ。
Danilov氏の講演は、呼び出しルーティング、コンピュートインフラストラクチャ、コールドスタートの話題が中心だった。これらの話題に入る前に、彼はAWS Lambdaについて説明し、その構成、呼び出しモデルの同期と非同期、その基本(可用性、効率、スケール、セキュリティ、パフォーマンス)を例を挙げて説明した。
10,000フィートから見ると、AWS Lambdaは複数のコンポーネントで構成されている。しかし、Danilov氏は講演の中で、特にコールドスタート問題を緩和するための呼び出しとインフラストラクチャに踏み込んでいる。ゴールは、AWS Lambda関数のレイテンシー呼び出し分散を短縮すること(呼び出し、ランタイム、コード、サンドボックスの初期化にかかる時間を短縮すること)だ。
2022年以前、AWS Lambdaの呼び出しルーティングシステムは、スケーリングと可用性に関する課題に直面していた。ワーカーマネージャは入ってくるリクエストを処理する役割を担っているが、増大する需要を管理するのに苦労し、単に負荷を処理できなくなるまでスケーリングしていた。実行状態をメモリに保存するサンドボックスは、重大なリスクをもたらした。ゾーン障害が発生した場合、サンドボックスの状態が失われ、システムの回復力が損なわれる可能性があった。AWSはこれらの問題に対処するためにプレースメントサービスを導入したが、このような障害からの復旧は依然として困難だった。
次にAWSは、リーダーフォロワーモデルを特徴とする耐久性のあるストレージを導入し、障害時にサンドボックスが失われないようにした。この機能の強化により、AWS Lambdaの呼び出しルーティングシステムの全体的な信頼性と耐久性が大幅に向上した。Danilov氏は、Assignment Serviceの導入とRustプログラミング言語の採用が、AWS Lambdaの呼び出しルーティングシステムに安定性とパフォーマンスをもたらしたが、それはコールドスタート問題の一部を解決したに過ぎないと述べ、このパートの講演を締めくくった。
続いてDanilov氏は、AWS Lambdaの基盤となるインフラ(前述のプレースメントサービス、キャパシティマネージャー、ワーカー、データサイエンスなど)について説明した。AWS Lambdaインフラストラクチャの最適化には、データサイエンスチームからの洞察に基づくワーカー選択の戦略的アプローチが含まれている。このプロセスでは、各タスクに適切なワーカーが選択されるように、メトリクスの精査、モデルの構築、予測する。同時に、効率的なリソース配分を実現するためには、ルーティング戦略の再評価が不可欠である。
データの分離を深く掘り下げると、AWS Lambdaが強固なセキュリティと分離を提供するように設計されていることがわかる。各ランタイムは、仮想マシンの分離によって保護が強化され、別々のプロセスとワーカーの中で動作する。
歴史的に、ひとつのEC2 VMインスタンスを利用することはしばしばリソースの浪費をもたらしたが、同じワーカー上に複数の起動をデプロイすることは、リソースの利用においてより効率的であることが証明された。しかし、このアプローチでは、多数のリソースが同時に呼び出されると過負荷になる可能性があり、単一のテナントと過剰なワーカーを持つ環境では課題となる。
AWS LambdaにFirecrackerテクノロジーを採用することで、このような課題に対処できるようになった。Firecrackerは「マイクロVM」を導入し、サーバーレス・コンピューティングへの道を開く。Lambdaへの統合により、安全な実行が可能になると同時に、複数のユーザーに対応するために同じワーカー内で機能を多重化することが容易になる。しかし、この多重化によって、同じワーカーを共有する機能のレイテンシ分散やリソース割り当ての考慮が生じ、Lambdaインフラストラクチャ最適化の複雑さが浮き彫りになった。
最後にDanilov氏は、コールドスタート(コードやランタイムではなく、呼び出しに関する部分)を排除することにつながったアイデアについて述べた。
!
AWS Lambdaはスナップショットを処理するために洗練されたアプローチを採用しており、仮想マシン(VM)の再開から始まる。これらのVMにはメモリマッピング機能があり、ファイルディスクやメモリ、特にページキャッシュを深く掘り下げられる。しかし、サイドチャネル攻撃に関するセキュリティ上の懸念から、Lambdaはコピーオンリードなどのタスクに共有メモリを使用できない。
VMクローンは、Lambdaのスナップショット管理において重要な役割を果たす。各クローンは一意に識別できるように設計されており、この一意性の背後にあるメカニズムは、同じスナップショットから安全に再開する機能に不可欠である。Lambdaのスナップショット配信は、ストリーミングビデオのように動作し、スナップショットはオンデマンドでダウンロードされ、リソースの利用率と効率を最適化する。
Lambdaは、このアプローチをさらに強化するために、オンデマンド・チャンク・ローディングとチャンク共有メカニズムを採用している。これらのコンポーネントは連携し、収束暗号化を使用してデータを重複排除し、最終的にローカル・ディスク・キャッシュの負荷を軽減する。このレジューム機能とスナップショット分散手法の組み合わせにより、スナップショット管理におけるAWS Lambdaの堅牢性と効率性が保証される。
Danilov氏は最後に、呼び出しルーティングは可用性とスケールを扱い、AWS Lambdaの下のコンピュートインフラストラクチャは効率性とセキュリティを扱い、コールドスタートはパフォーマンスに関するすべてであると述べて講演を締めくくった。最後に、この講演に関するリソースはseverlesslandページで公開されている。