Sollten Sie bereitgestellte Parallelität für AWS Lambda-Funktionen verwenden?

Lambda-Funktionen sind ein entscheidender Bestandteil jeder serverlosen Bereitstellung auf Amazon Web Services. Sie sind jedoch keine Zauberei und können aufgrund der physischen Einschränkungen der Hardware einige Nachteile wie Kaltstarts mit sich bringen. Bereitgestellte Parallelität kann helfen, das Problem zu lindern.

Was sind „Kaltstarts“?

“ Kaltstarts” sind ein großes Problem für Lambda, insbesondere wenn man es für eine latenzempfindliche Anwendung in Betracht zieht. Der Begriff bezieht sich auf die Startzeit, die erforderlich ist, um die Ausführungsumgebung einer Lambda-Funktion von Grund auf zum Laufen zu bringen.

Lambda-Funktionen werden „warm“ gehalten; für eine Weile, nachdem ich sie aufgerufen habe. Nicht-VPC-Funktionen sind 5 Minuten lang warm und VPC-Funktionen sind 15 Minuten lang warm. Wenn die Funktion während dieser Zeit erneut aufgerufen wird, antwortet sie sofort. Dies ist ideal für Dienste, die einen konsistenten, regelmäßigen Datenverkehr verzeichnen.

Wenn Ihr Code jedoch längere Zeit nicht ausgeführt wurde oder er skaliert und mehrere gleichzeitige Funktionen ausgeführt werden muss, wird er von Grund auf neu gestartet. Laut Analyse von AWS kommt es bei weniger als 1 % der Anfragen in Produktions-Workloads zu Kaltstarts, was für viele Szenarien akzeptabel ist.

Abhängig von der von Ihnen verwendeten Laufzeit (Java und .NET benötigen beide eine Weile zum JIT-Kompilieren) kann ein Kaltstart den Funktionsaufruf jedoch um mehrere Sekunden verzögern. Dies kann für latenzempfindliche Anwendungen inakzeptabel sein.

Keine Kaltstarts mehr

Der Provisioned Concurrency-Modus von Lambda kann zur Lösung dieses Problems beitragen. Sie können es sich wie reservierte Instanzen für Lambda-Funktionen vorstellen: Sie reservieren im Wesentlichen eine bestimmte Kapazitätsmenge und eine Lambda-Funktion bleibt für den gesamten Zeitraum warm.

Dies hat große Vorteile, einschließlich der nahezu vollständigen Eliminierung der Anlaufkosten. Sie müssen sich eigentlich überhaupt keine Gedanken über die Optimierung des Initialisierungscodes machen, da dieser einmal ausgeführt wird und dann weiter ausgeführt wird. Dies ist ein großer Vorteil für JIT-kompilierte Sprachen wie Java und C#/.NET, die große Binärdateien und Startzeiten zum Laden haben können.

Im Vergleich zum vorherigen Beispiel, bei dem Funktionen kalt gestartet werden, wird Parallelität bereitgestellt startet sie alle im Voraus und hält sie warm. Wenn ein Aufruf erforderlich ist, verwendet Lambda die Warm-Funktionen, um ihn auszuführen.

Allerdings bringt es auch seine eigenen Nachteile mit sich. Aufgrund der Art und Weise, wie Lambda Versionen für Funktionen auswählt, funktioniert die bereitgestellte Parallelität nicht mit dem $LATEST-Tag. Sie müssen einen neuen Alias ​​erstellen, Parallelität für diesen Alias ​​bereitstellen und ihn dann aktualisieren, wenn sich die Version ändert.

Es ist auch wichtig, dies zu verstehen, auch wenn die Funktion über längere Zeiträume ausgeführt wird Gleichzeitig macht die bereitgestellte Parallelität Ihre Anwendung nicht zustandsbehaftet. Lambda-Funktionen können und werden zerstört, und Sie sollten sie nicht wie einen EC2-Server behandeln.

Wie viel kostet bereitgestellte Parallelität?

< p>Die Antwort darauf hängt davon ab, wie oft Ihre Funktion ausgeführt wird und wie oft mehrere Ausführungsumgebungen erstellt werden, um den parallelen Bedarf zu decken.

Die wichtigste Zahl, über die man sich bei der bereitgestellten Parallelität Gedanken machen muss, ist die Anzahl der Funktionsausführungen gleichzeitig laufen. Wenn Sie beispielsweise eine Funktion haben, die zehnmal pro Sekunde aufgerufen wird und jeder Aufruf 500 ms dauert, wird diese Funktion durchschnittlich 5 gleichzeitige Ausführungen pro Sekunde haben.

Insgesamt kostet die bereitgestellte Parallelität nicht viel mehr als reguläre Lambda-Funktionen. Sie können den Preisrechner von AWS verwenden, um herauszufinden, wie viel es Sie persönlich kosten wird. Beispielsweise kostet die Ausführung eines Lambda, das zehnmal pro Sekunde aufgerufen wird, mit einer Aufrufzeit von 500 ms und 256 MB Speicher 60 $ pro Monat.

Dieselbe Funktion, jedoch mit 10 bereitgestellten Ausführungen, kostet mit 64,50 $ pro Monat etwas mehr. Insgesamt handelt es sich je nach Nutzung wahrscheinlich um einen kleinen Kostenanstieg von 5–10 %.

Die bereitgestellte Parallelität ist jedoch pro GB-Sekunde Nutzung tatsächlich günstiger. Das bedeutet, dass es günstiger sein kann, Parallelität zu reservieren, als die regulären Lambda-Preise zu verwenden, wenn Sie dauerhaft eine Auslastung von nahezu 100 % erreichen. Dies liegt vor allem daran, dass es insgesamt günstiger ist, die Zeit zu reduzieren, die Lambdas für den Initialisierungscode aufwenden.

WEITER LESEN

  • › Einweg- oder wiederaufladbare Batterien: Was ist besser?
  • › So formatieren Sie ein USB-Laufwerk auf FAT32 unter Windows 11 oder Windows 10
  • › Die besten Podcast-Apps für iPhone und iPad
  • › Into the Android-Verse: Die Geschichte des Android-Roboters
  • › IPv4 vs. IPv6: Was sind die Unterschiede?
  • › Threads ist die neue Social-Media-App von den Machern von Facebook & Instagram

Posted

in

by

Tags: