Skalierung einer Lambda-Funktion - AWS Lambda

Skalierung einer Lambda-Funktion

Beim ersten Aufrufen Ihrer Funktion erstellt AWS Lambda eine Instance der Funktion und führt deren Handler-Methode aus, um das Ereignis zu verarbeiten. Wenn die Funktion eine Antwort zurückgibt, bleibt sie aktiv und wartet auf die Verarbeitung zusätzlicher Ereignisse. Wenn Sie die Funktion während der Verarbeitung des ersten Ereignisses erneut aufrufen, initialisiert Lambda eine andere Instance und die Funktion verarbeitet die beiden Ereignisse gleichzeitig. Lambda leitet weitere eingehende Ereignisse an verfügbare Instances weiter und erstellt bei Bedarf neue Instances. Wenn die Anzahl der Anforderungen abnimmt, stoppt Lambda ungenutzte Instances, um Skalierungskapazität für andere Funktionen freizusetzen.

Das Standardkontingent für regionale Nebenläufigkeit beginnt bei 1 000 Instances. Weitere Informationen und die Möglichkeit, eine Erhöhung dieses Kontingents anzufordern, finden Sie unter Lambda-Kontingente. Um die Kapazität pro Funktion zuzuweisen, können Sie Funktionen mit reservierter Gleichzeitigkeit konfigurieren.

Die Gleichzeitigkeit Ihrer Funktionen bezieht sich auf die Anzahl von Instances, die zu einem bestimmten Zeitpunkt Anforderungen bearbeiten. Bei einer anfänglichen Steigerung des Datenverkehrs kann die kumulative Gleichzeitigkeit in einer Region Ihrer Funktion je nach Region einen Ausgangswert zwischen 500 und 3000 erreichen. Beachten Sie, dass die Burst-Parallelitätsquote nicht funktionsspezifisch ist, sondern für alle Funktionen in der Region gilt.

Aufteilungskontingente für Parallelität
  • 3000 – USA West (Oregon), USA Ost (Nord-Virginia), Europa (Irland)

  • 1000 – Asien-Pazifik (Tokio), Europa (Frankfurt), USA Ost (Ohio)

  • 500 – Andere Regionen.

Nach der anfänglichen Steigerung kann die Gleichzeitigkeit Ihrer Funktion um weitere 500 Instances pro Minute skaliert werden. Dieser Vorgang wird so lange fortgesetzt, bis genügend Instances zur Bearbeitung aller Anforderungen vorhanden sind oder bis ein Gleichzeitigkeitslimit erreicht ist. Wenn Anforderungen schneller eingehen, als Ihre Funktion sie skalieren kann, oder wenn Ihre Funktion maximale Gleichzeitigkeit erreicht hat, schlagen weitere Anforderungen mit einem Drosselungsfehler (Statuscode 429) fehl.

Das folgende Beispiel zeigt eine Funktion, die eine Spitze im Datenverkehr verarbeitet. Wenn Aufrufe exponentiell zunehmen, wird die Funktion skaliert. Es initialisiert eine neue Instance für jede Anforderung, die nicht an eine verfügbare Instance weitergeleitet werden kann. Wenn der Grenzwert für die Burst-Parallelität erreicht ist, beginnt die Funktion mit linearer Skalierung. Falls dies nicht ausreicht, um alle Anforderungen zu erfüllen, werden zusätzliche Anforderungen abgelehnt und müssen wiederholt werden.


      Nach Erreichen der Burst-Grenze wird die Parallelität linear skaliert. Darüber hinausgehende Anfragen werden gedrosselt.
Legende
  • Funktions-Instances

  • Offene Anforderungen

  • -Drosselung möglich

Die Funktion wird weiter skaliert, bis die Parallelitätsgrenze des Kontos für die Region der Funktion erreicht ist. Die Funktion holt zum Bedarf auf, die Anforderungen verringern sich, und nicht verwendete Instances der Funktion werden nach einiger Zeit im Leerlauf beendet. Nicht verwendete Instances werden beim Warten auf Anforderungen eingefroren und es fallen keine Gebühren für sie an.

Wenn Ihre Funktion skaliert wird, ist die erste von jeder Instance bereitgestellte Anforderung von der Zeit betroffen, die zum Laden und Initialisieren des Codes benötigt wird. Wenn der Initialisierungscode lange dauert, können die Auswirkungen auf die Durchschnitts- und Perzentillatenz erheblich sein. Um die Skalierung Ihrer Funktion ohne Schwankungen der Latenz zu ermöglichen, verwenden Sie Provisioned Concurrency. Es folgt ein Beispiel einer Funktion mit bereitgestellter Parallelität, die eine Datenverkehrsspitze verarbeitet.


      Skalierung mit bereitgestellter Parallelität.
Legende
  • Funktions-Instances

  • Offene Anforderungen

  • Bereitgestellte Concurrency

  • Standard-Gleichzeitigkeit

Wenn Sie eine Anzahl für die bereitgestellte Nebenläufigkeit konfigurieren, initialisiert Lambda die entsprechende Anzahl von Ausführungsumgebungen. Ihre Funktion ist bereit, einen Burst eingehender Anforderungen mit sehr geringer Latenz zu verarbeiten. Beachten Sie, dass beim Konfigurieren der bereitgestellten Parallelität Gebühren für Ihr AWS-Konto anfallen.

Wenn die gesamte bereitgestellte Parallelität verwendet wird, erfolgt eine normale Skalierung der Funktion, um zusätzliche Anforderungen zu verarbeiten.

Mit Application Auto Scaling wird einen Schritt weitergegangen, indem für bereitgestellte Gleichzeitigkeit Auto Scaling bereitgestellt wird. Mit Application Auto Scaling können Sie eine Skalierungsrichtlinie für die Ziel-Nachverfolgung erstellen, mit der die Stufen der bereitgestellten Gleichzeitigkeit basierend auf der von Lambda ausgegebenen Auslastungsmetrik automatisch angepasst werden. Verwenden Sie die Application-Auto-Scaling-API, um einen Alias als skalierbares Ziel zu registrieren und eine Skalierungsrichtlinie zu erstellen.

Im folgenden Beispiel skaliert eine Funktion basierend auf der Auslastung zwischen einem minimalen und einem maximalen Umfang bereitgestellter Gleichzeitigkeit. Wenn die Anzahl der offenen Anforderungen zunimmt, erhöht Application Auto Scaling die bereitgestellte Gleichzeitigkeit in großen Schritten, bis sie das konfigurierte Maximum erreicht. Die Funktion wird weiterhin auf Standard-Gleichzeitigkeit skaliert, bis die Auslastung abfällt. Wenn die Auslastung konstant niedrig ist, verringert Application Auto Scaling die bereitgestellte Gleichzeitigkeit in kleineren periodischen Schritten.


      Automatische Skalierung bereitgestellter Gleichzeitigkeit mit der Zielverfolgung von Application Auto Scaling
Legende
  • Funktions-Instances

  • Offene Anforderungen

  • Bereitgestellte Concurrency

  • Standard-Gleichzeitigkeit

Wenn Sie Ihre Funktion durch eine Ereignisquellen-Zuweisung oder durch einen anderen AWS-Service asynchron aufrufen, variiert das Skalierungsverhalten. Beispiel: Ereignisquellen-Zuweisungen, die aus einem Stream lesen, sind durch die Anzahl der Shards im Stream begrenzt. Die von einer Ereignisquelle nicht genutzte Skalierungskapazität ist für die Verwendung durch andere Clients und Ereignisquellen verfügbar. Weitere Informationen finden Sie unter den folgenden Themen.

Sie können das Maß an Gleichzeitigkeit in Ihrem Konto mit den folgenden Metriken überwachen:

Gleichzeitigkeitsmetriken
  • ConcurrentExecutions

  • UnreservedConcurrentExecutions

  • ProvisionedConcurrentExecutions

  • ProvisionedConcurrencyInvocations

  • ProvisionedConcurrencySpilloverInvocations

  • ProvisionedConcurrencyUtilization

Weitere Informationen finden Sie unter Arbeiten mit Lambda-Funktionsmetriken.