2017-03-24 6 views
2

私の理解しているとおり、AWS LambdaはアップロードされたコードをユーザーがアクセスできないEC2インスタンスで実行します。アップロードされたコードを実行するために必要なランタイム環境を作成し、権限を管理し、負荷を分散します。これはAWS Lambdaが背後にあると私が考えるものです。 Wikipediaを引用AWSラムダは、ラムダコードを実行するために必要なメモリとCPU要件をどのように知っていますか?

まれに使用されるサーバレスコードを連続専用サーバー上で実行されるコードは、仮想マシン、または容器を超える応答待ち時間に苦しむことができます。これは、オートスケーリングとは異なり、クラウドプロバイダは通常、使用していないときにサーバーレスコードを完全に「スピンダウン」するためです。

これは理にかなっていますが、AWSラムダは、自動スケーリングを使用するようclaimを行います。

AWSラムダは、自動的に各トリガに応じてコードを実行することで、アプリケーションをスケーリングします。コードは並列で実行され、個々のトリガーを個別に処理し、ワークロードのサイズを正確にスケーリングします。

私の質問がある -

  • AWSラムダは、私のコードを実行するためのメモリとCPUを割り当てない方法は?
  • 私のラムダリクエストはすべて、1つのEC2インスタンスによってサービスされるのですか?
  • はいの場合、リクエスト数が増えるとどのように拡大縮小されますか?
  • いいえラムダ要求を受け取るたびにコードを実行するためのランタイム環境を作成する必要がある場合、レイテンシをどのように減らすか?
+3

ラムダアプリケーションはコンテナにデプロイされます。コンテナRAMサイズを選択し、コンテナが実行されている時間に請求されます。自動スケーリングはコンテナレベルで行われます。コンテナインスタンスが増加した負荷を処理するために開始されるか、構成可能なスパン以上にアイドル状態の場合に終了されます。 –

答えて

5

ラムダは必要なメモリとCPUの量を知りません - あなたはそれを教えて、機能をセットアップするときにそれに応じて課金されます(そしてセットアップ後にあなたが望むならそれを変更できます)。

ラムダ機能は単一のEC2インスタンス上では動作しませんが、ラムダ機能は(カバーの下のEC2インスタンス上で実行される)ドッカーコンテナで実行されることが一般的に理解されています。これらのラムダのすべて。

実行中のラムダのサイズではなく、実行中のインスタンスの数を増やすことで 'スケール'することができます。ラムダ関数を数百回も呼び出すと、ラムダのメモリまたはCPUが増えません負荷を処理するために追加のインスタンスを回転させます。

ラムダが新しいインスタンスをスピンアップする必要があるときに遅延があります - 特に、それをしばらく実行していない - コールドスタートと呼ばれることが多い - リクエストが入り続けると、ラムダは滞在しがちです次の要求を処理する準備ができているので、後続の呼び出しは最初の1-2よりはるかに高速に実行されます。通話が停止すると、AWS がインスタンスをスピンダウンしますが、いつ、どのような事態が発生するのかについてのドキュメントはありません。私の経験は、安定した要求の流れがある限り、レイテンシは驚くほど低く、コールドスタートをすると、それを再び起こすために「ペタトリー」が発生するということでした。

「コールドスタート」遅延を減らす必要がある場合は、メモリとCPUの規模を一気に大きくすることが最も簡単な方法です。そのため、機能がさらにメモリを必要としなくても、メモリは初期レイテンシを減少させます。

+1

詳細な回答ありがとうございます。あなたの答えでコールドスタートのビットを読んだ後に私が尋ねたかったことの一つは、 AWS Lambdaを使用して、常に利用可能なサーバー上で同じことを行う完全な本格的なWebアプリケーションをデプロイすると、コストの面でより優れたものになります。 AWSラムダとは対照的に常に利用可能なサーバでは待ち時間が短くなるため、このようなサーバレスアーキテクチャの欠点はありませんか? –

+2

はい、それはトレードオフです - まれに使用される関数のためにラムダに行くのは間違いなく安いです(ほとんどの場合、例外があるかもしれません)。しかし、ラムダの機能が滅多になかったため、EC2インスタンスに戻すことになりました。実行する必要があるときにすぐに実行する必要があったからです。 –

関連する問題