2017-06-17 18 views
3

このようなコードがあるとします。AWSラムダの同時実行動作

public class MyHandler { 
    private Foo foo; 
    public void handler(InputStream request, OutputStream response, Context context) { 
     ... 
    } 
} 

はFoo fooのは、プールされたデータベース接続を作成するの面倒を見ます。

これはAWS Lambdaでどのように動作するかを理解しようとしています。私が正しく理解していれば、fooは複数の呼び出しで共有されます。最初のものはコンテナにロードする必要があり、その後fooが既に初期化されているため、後でコンディションが速くなるため、時間がかかります。これは、私のハンドラが一定期間活動しなくなってから追い出されるまではそうです。

したがって、順次呼び出しでは、同じオブジェクトを使用しますか?以前の関数呼び出しで作成された/ tmpにアクセスできますか?

並列呼び出しはどうですか?ドキュメントごとに、各ラムダ関数は独自のコンテナ、独自のリソース、および独自の/ tmpで実行する必要があるため、コンテナ全体を複製しますか?

非アクティブの後にハンドラが追い出される場合は、プールされたすべての接続を閉じるためにコールできるコールバック関数がJavaにありますか?

答えて

1

したがって、順次呼び出しでは、同じオブジェクトを使用しますか? は、以前の関数呼び出しで作成された/ tmpにアクセスできますか?

はい、同じオブジェクトを使用します。はい、以前の関数呼び出しで作成された/tmpにアクセスできます。

並列呼び出しはどうですか?ドキュメントごとに、各ラムダ関数は が独自のコンテナ、独自のリソース、および独自の/ tmpで実行する必要があるため、 コンテナ全体を複製しますか?

並列呼び出しは別々のコンテナで行われます。単一のコンテナは、一度に1つの呼び出しのみを処理します。そう、はい、コンテナ全体が複製され、各コンテナには独自の/tmpがあります。

ハンドラが非アクティブ後に追い出さを取得するつもりされている場合は、Javaで コールバック関数は、私が開いているすべての プールされた接続を閉じるように呼び出すことができるということがありますか?

いいえこれを処理するために使用できるコールバックはありません。あなたの関数は、非アクティブなためにコンテナが最終的に削除されたときに中断状態になります。

+0

並列呼び出しの場合、コンテナの重複が発生したときにデータベース接続を作成する通常のオーバーヘッドがありますか?つまり、AWS Lambdaのプール接続を作成することはありませんか? – Prabhat

+0

すでに実行されているコンテナが十分にない場合は、作成された新しいコンテナに対してデータベース接続を作成するオーバーヘッドが発生します。しばらくの間並列呼び出しを続けると、それらのコンテナが再利用されます。つまり、ハンドラの外部にDB接続を作成する理由があります。しかし、ラムダ関数の中で接続プールを使用している場合は、プールのサイズを1にしたいと思っています。 –

+0

ありがとうございました。それは物事をクリアする。基本的に、そのようなDBに直接接続を作成し、プールされていません。私が正しく理解していれば、パラレル環境での最初の呼び出しによって2回目の呼び出しが連続していても、2回目の呼び出しが '/ tmp'に格納されたデータにアクセスする保証はありません。 '/ tmp'の実際の使用例が不思議だ – Prabhat

関連する問題