2016-06-20 13 views
14

ラムダコールドスタート時間を取り除く最良の方法は、CloudWatchで20分ごとに呼び出されるようにラムダ関数をスケジューリングしていますか? (完全に取り除くない)...ラムダコールドスタート可能な解決策?

これは高価取得したり、私はそれが今設定していると私はそれが働いていると思うので、私は行方不明です何かがあります。私のコールドスタート時前

は、10秒のようになると、すべての後続の呼び出しは、80ミリ秒のようで完了します。どのくらいの頻度であっても、すべての呼び出しは約80 msです。あなたのユーザーベースが成長するまでこれは良い方法ですか、それをオフにすることはできますか?

私の2番目のオプションは、ちょうど豆の木を使用して24/7を実行しているサーバーを持つが、私はそれを好まないので、それは高価に聞こえるされます。

答えて

13

私が知っている限り、これは機能を今ホットにする唯一の方法です。あなたがそれらの機能をたくさん持っている場合にのみ、高価になることがあります。

あなたはどのくらいあなたはどのくらいの時間は彼らにするたびに実行するために時間がかかりますし、あなたはどのくらいのメモリが必要なのか、どのようにそれらの多くを持っているか考慮生きているあなたの機能を維持するために支払うかを自分で計算する必要があると思います。

しかし、20分ごとに1回は2000回/月のようなものなので、たとえば128MBにして100ms以下で終了させると、20分間隔でこのような機能がかなり生き生きしていて、それでもまだフリー層の下にあることがあります。機能ごとに月20秒です。この時点では無関係であるため、大きな負荷をかけた後でも電源を切る必要はありません。あなたは一様な負荷を常に得ることは決してできません。そのため、あなたは心臓を鼓動させるコードをアクティブに保つかもしれません。

私の推測は、関数を生かしておくのがとても安いからです(特にあなたが特別な引数を持っていればすぐに戻ります)。その差は非常に大きい(10秒vs. 80 ms)多くの人がそれをやるだろう - そうでないと言い訳はほとんどない。その場合、私はアマゾンがその練習と戦う(現状よりも難しく、あるいはより高価にすることで、スマートな動きではない)か、将来不要にすることを期待しています。ホットスタートとコールドスタートの差が100msの場合、誰も気にしません。それは誰もがそれを回避する必要があるよりも10秒の場合。

1秒前に実行されたコードと1ヶ月前に実行されたコードを実行するのは、常にRAM上にあるため、実行する準備ができていないため、その違いがあまり目立たないようにすることはできないし、ちょうどホットスタートやコールドスタートではなく、さらにステップを増やすこともできない。

+0

チップをありがとう。開始を遅らせる機能コードの外部に何か特別なものはありますか?私は2つのnodejs lambdaを持っていますが、冷たいコールでさえ1つ(158Kb)が1秒以下で始まり、もう1つはVPC-Elasticache(54Kb)で約10秒かかります。しかし、それは、それがロードするredisライブラリとだけ関係しているかもしれません。これは、セットアップ自体ではなく、CPUが強くなる可能性がありますか? – zanona

5

ラムダ機能にさらに多くのメモリを割り当てることで、コールドスタート時間を改善できます。デフォルトの512MBでは、Javaで書かれた関数のコールドスタート時間が8〜10秒になります。これにより、1536MBのメモリで2〜3秒に短縮されます。

Amazon says本当に重要なCPU割り当てですが、直接変更する方法はありません。 CPU割り当てはメモリに比例して増加します。

そして、ゼロのコールドスタート時間に近づけたい場合は、rspが示唆したように、関数を暖かく保つことが必要です。

+2

メモリを1536mbに設定することは私の仕事です。コールドスタート時間を12秒から3秒に短縮しました。 – Guus

+0

大きなラムダが早く始まり、早くもガーベジが集められます。つまり、アイドルタイムアウトは短くなります。 – sepehr

関連する問題