2016-06-20 10 views
14

Wird eine Lambda-Funktion geplant, um alle 20 Minuten mit CloudWatch aufgerufen zu werden, der beste Weg, Lambda-Kaltstartzeiten loszuwerden? (nicht vollständig loswerden) ...Lambda Kaltstart mögliche Lösung?

Wird dies teuer oder ist etwas, das ich vermisse, weil ich es jetzt eingerichtet habe und ich denke, es funktioniert.

Vor meiner Kaltstart-Zeit wäre wie 10 Sekunden und jeder nachfolgende Anruf würde in etwa 80 ms abgeschlossen werden. Jetzt ist jeder Anruf, egal wie häufig, um 80 ms. Ist das eine gute Methode, bis deine Benutzerdatenbank wächst, dann kannst du das ausschalten?

Meine zweite Option ist nur Bohnenstange zu verwenden und einen Server 24/7 laufen zu lassen, aber das klingt teuer, so dass ich es nicht bevorzuge.

Antwort

13

Soweit ich weiß, ist dies der einzige Weg, um die Funktion im Moment heiß zu halten. Es kann nur teuer werden, wenn Sie viele dieser Funktionen haben.

Sie müssten selbst berechnen, wie viel Sie dafür bezahlen, dass Ihre Funktionen am Leben bleiben, wenn man bedenkt, wie viele von ihnen Sie haben, wie lange sie jedes Mal benötigen und wie viel Speicher Sie benötigen.

Aber einmal alle 20 Minuten ist so etwas wie 2000 Mal pro Monat, wenn Sie z. 128MB und sie unter 100ms beenden, dann könnten Sie ziemlich viele solcher Funktionen im 20-Minuten-Intervall am Leben erhalten und immer noch unter dem freien Tier sein - es wären 20 Sekunden pro Monat pro Funktion. Sie müssen es nicht einmal ausschalten, nachdem Sie eine größere Last erhalten haben, weil es an dieser Stelle irrelevant ist. Außerdem können Sie nie sicher sein, dass Sie die ganze Zeit über eine gleichmäßige Ladung erhalten, so dass Sie Ihren Herzschlag auch dann noch aktiv halten können.

Obwohl ich denke, dass es so billig ist, eine Funktion am Leben zu erhalten (besonders wenn Sie ein spezielles Argument haben, das sie sofort zurückbringt) und dass der Unterschied so groß ist (10 Sekunden vs. 80 ms), dann schön so gut wie jeder wird es tun - es gibt so gut wie keine Entschuldigung dafür. In diesem Fall erwarte ich, dass Amazon diese Praxis entweder bekämpfen wird (indem es es hart oder teurer macht als es derzeit ist - was kein kluger Schachzug wäre) oder es in der Zukunft unnötig machen würde. Wenn der Unterschied zwischen heißem und kaltem Start 100ms war, würde sich niemand darum kümmern. Wenn es 10 Sekunden dauert, müssen alle daran arbeiten.

Es müsste immer einen Unterschied zwischen der Ausführung eines Codes, der vor einer Sekunde ausgeführt wurde, und einem Code, der vor einem Monat ausgeführt wurde, geben, da alle im RAM gespeichert wären und viele Ressourcen verschwenden würden. aber ich sehe keinen Grund, warum dieser Unterschied nicht weniger auffällig gemacht werden oder sogar nur ein paar Schritte statt nur heißen und kalten Start haben könnte.

+0

Danke für den Tipp. Gibt es etwas Äußeres außerhalb des Funktionscodes, das einen Start verzögern kann? Ich habe 2 nodejs lambdas, obwohl sogar von kalten Anrufen, ein (158Kb) unter ~ 1sec beginnt, während ein anderes unter VPC-Elasticache (54Kb) ungefähr 10secs dauert. Aber vielleicht hat das nur mit der Redis-Bibliothek zu tun, die geladen wird, die CPU-intensiv sein kann, und nicht das Setup selbst? – zanona

5

Sie können die Kaltstartzeit verbessern, indem Sie Ihrer Lambda-Funktion mehr Speicher zuweisen. Mit den Standard 512 MB sehe ich Kaltstartzeiten von 8-10 Sekunden für in Java geschriebene Funktionen. Dies verbessert sich auf 2-3 Sekunden mit 1536 MB Speicher.

Amazon says es ist die CPU-Zuweisung, die wirklich wichtig ist, aber es gibt keine Möglichkeit, es direkt zu ändern. Die CPU-Zuweisung erhöht sich proportional zum Speicher.

Und wenn Sie Null-Kalte Startzeiten haben wollen, ist das Warmhalten der Funktion der richtige Weg, wie beschrieben.

+2

Einstellen von Speicher auf 1536mb funktioniert für mich.Reduzierte Kaltstartzeit von 12 Sekunden auf 3 Sekunden. – Guus

+0

Große Lambdas werden schneller gestartet, auch früher wird Müll gesammelt. Mit anderen Worten, ihre Leerlaufzeit ist kürzer. – sepehr

Verwandte Themen