View a markdown version of this page

Die Skalierung von Lambda-Ereignisfunktionen verstehen - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Die Skalierung von Lambda-Ereignisfunktionen verstehen

Parallelität ist die Anzahl der laufenden Anfragen, die Ihre AWS Lambda Event-Funktion gleichzeitig bearbeitet. Für jede gleichzeitige Anfrage stellt Lambda eine separate Instance Ihrer Ausführungsumgebung bereit. Wenn Ihre Event Functions mehr Anfragen erhalten, übernimmt Lambda automatisch die Skalierung der Anzahl der Ausführungsumgebungen, bis Sie das Parallelitätslimit Ihres Kontos erreicht haben. Standardmäßig bietet Lambda Ihrem Konto ein Gesamt-Parallelitätslimit von 1.000 gleichzeitigen Ausführungen für alle Event-Funktionen in einem. AWS-Region Um Ihren spezifischen Kontoanforderungen gerecht zu werden, können Sie eine Erhöhung des Kontingents beantragen und Parallelitätskontrollen auf Funktionsebene konfigurieren, sodass Ihre kritischen Event-Funktionen nicht gedrosselt werden.

In diesem Thema werden Parallelitätskonzepte und die Skalierung von Event Functions in Lambda erklärt. Am Ende dieses Themas werden Sie in der Lage sein, die Gleichzeitigkeit zu berechnen, die beiden Hauptoptionen für die Gleichzeitigkeitskontrolle (reserviert und bereitgestellt) zu visualisieren, geeignete Einstellungen für die Gleichzeitigkeitskontrolle zu schätzen und Metriken zur weiteren Optimierung anzuzeigen.

Verstehen und Visualisieren der Gleichzeitigkeit

Lambda ruft Ihre Event Function in einer sicheren und isolierten Ausführungsumgebung auf. Um eine Anfrage zu bearbeiten, muss Lambda zuerst eine Ausführungsumgebung initialisieren (die Init-Phase), bevor es sie zum Aufrufen Ihrer Event-Funktion (die Aufrufphase) verwendet:

Typischer Lebenszyklus einer Ausführungsumgebung mit den Initialisierungs- und Aufrufphasen.
Anmerkung

Die tatsächliche Dauer der Initialisierung und des Aufrufs kann in Abhängigkeit von vielen Faktoren variieren, z. B. von der ausgewählten Laufzeit und dem Code der Lambda-Ereignisfunktion. Das vorherige Diagramm soll nicht die genauen Proportionen der Initiierungs- und Aufrufphasendauer darstellen.

Im vorherigen Diagramm wird ein Rechteck verwendet, um eine einzelne Ausführungsumgebung darzustellen. Wenn Ihre Event-Funktion ihre allererste Anfrage erhält (dargestellt durch den gelben Kreis mit Bezeichnung1), erstellt Lambda eine neue Ausführungsumgebung und führt den Code während der Init-Phase außerhalb Ihres Haupthandlers aus. Dann führt Lambda den Haupthandlercode Ihrer Event-Funktion während der Aufrufphase aus. Während des gesamten Prozesses ist diese Ausführungsumgebung ausgelastet und kann keine anderen Anfragen verarbeiten.

Wenn Lambda die Verarbeitung der ersten Anfrage abgeschlossen hat, kann diese Ausführungsumgebung weitere Anfragen für dieselbe Event-Funktion verarbeiten. Für nachfolgende Anfragen muss Lambda die Umgebung nicht neu initialisieren.

Eine Ausführungsumgebung, die zwei Anfragen nacheinander verarbeitet.

Im vorherigen Diagramm verwendet Lambda die Ausführungsumgebung erneut, um die zweite Anfrage zu verarbeiten (dargestellt durch den gelben Kreis mit der Bezeichnung 2).

Bisher haben wir uns nur auf eine einzige Instance Ihrer Ausführungsumgebung konzentriert (d. h. eine Gleichzeitigkeit von 1). In der Praxis muss Lambda möglicherweise mehrere Instanzen der Ausführungsumgebung parallel bereitstellen, um alle eingehenden Anfragen zu verarbeiten. Wenn Ihre Event-Funktion eine neue Anfrage erhält, kann eines von zwei Dingen passieren:

  • Wenn eine vorinitialisierte Instance der Ausführungsumgebung verfügbar ist, verwendet Lambda diese, um die Anfrage zu verarbeiten.

  • Andernfalls erstellt Lambda eine neue Instance der Ausführungsumgebung, um die Anfrage zu verarbeiten.

Lassen Sie uns zum Beispiel untersuchen, was passiert, wenn Ihre Event-Funktion 10 Anfragen erhält:

Eine Lambda-Ereignisfunktion, die mehrere Umgebungen für die Bearbeitung von 10 Anfragen bereitstellt.

Im vorherigen Diagramm stellt jede horizontale Ebene eine einzelne Instance der Ausführungsumgebung dar (von A bis F). So behandelt Lambda jede Anfrage:

Anforderung Lambda-Verhalten Reasoning

1

Stellt neue Umgebung A bereit

Dies ist die erste Anfrage. Es sind keine Instances der Ausführungsumgebung verfügbar

2

Stellt neue Umgebung B bereit

Die vorhandene Instance der Ausführungsumgebung A ist ausgelastet

3

Stellt neue Umgebung C bereit

Die vorhandenen Instances der Ausführungsumgebung A und B sind beide ausgelastet

4

Stellt neue Umgebung D bereit

Die vorhandenen Instances der Ausführungsumgebung A, B und C sind alle ausgelastet

5

Stellt neue Umgebung E bereit

Die vorhandenen Instances der Ausführungsumgebung A, B, C und D sind alle ausgelastet

6

Wiederverwendung von Umgebung A

Die Instance der Ausführungsumgebung A hat die Verarbeitung von Anfrage 1 abgeschlossen und ist jetzt verfügbar

7

Wiederverwendung von Umgebung B

Die Instance der Ausführungsumgebung B hat die Verarbeitung von Anfrage 2 abgeschlossen und ist jetzt verfügbar

8

Wiederverwendung von Umgebung C

Die Instance der AusführungsumgebungB hat die Verarbeitung von Anfrage 3 abgeschlossen und ist jetzt verfügbar

9

Stellt neue Umgebung F bereit

Die vorhandenen Instances der Ausführungsumgebung A, B, C, D und E sind alle ausgelastet

10

Wiederverwendung von Umgebung D

Die Instance der Ausführungsumgebung D hat die Verarbeitung von Anfrage 4 abgeschlossen und ist jetzt verfügbar

Wenn Ihre Event-Funktion mehr gleichzeitige Anfragen empfängt, erhöht Lambda als Reaktion darauf die Anzahl der Instanzen der Ausführungsumgebung. Die folgende Animation verfolgt die Anzahl der gleichzeitigen Anfragen im Laufe der Zeit:

Eine Animation, die gleichzeitige Anfragen im Laufe der Zeit veranschaulicht.

Durch das Einfrieren der vorherigen Animation an sechs verschiedenen Zeitpunkten erhalten wir das folgende Diagramm:

Parallelität der Event-Funktion zu sechs verschiedenen Zeitpunkten.

Im vorherigen Diagramm können wir zu jedem Zeitpunkt eine vertikale Linie zeichnen und die Anzahl der Umgebungen zählen, die diese Linie schneiden. Dadurch erhalten wir die Anzahl der gleichzeitigen Anfragen zu diesem Zeitpunkt. Beispielsweise gibt es zum Zeitpunkt t1 drei aktive Umgebungen, die drei gleichzeitige Anfragen bearbeiten. Die maximale Anzahl gleichzeitiger Anfragen in dieser Simulation wird zum Zeitpunkt t4 erreicht, an dem sechs aktive Umgebungen sechs gleichzeitige Anfragen bearbeiten.

Zusammenfassend lässt sich sagen, dass die Parallelität Ihrer Event-Funktion die Anzahl der gleichzeitigen Anfragen ist, die sie gleichzeitig bearbeitet. Als Reaktion auf eine Zunahme der Parallelität Ihrer Event-Funktion stellt Lambda mehr Instanzen der Ausführungsumgebung bereit, um den Anforderungsbedarf zu decken.

Berechnung der Parallelität für eine Event-Funktion

Im Allgemeinen ist die Gleichzeitigkeit eines Systems die Fähigkeit, mehr als eine Aufgabe gleichzeitig zu bearbeiten. In Lambda ist Parallelität die Anzahl der laufenden Anfragen, die Ihre Event-Funktion gleichzeitig bearbeitet. Eine schnelle und praktische Methode zur Messung der Parallelität einer Lambda-Ereignisfunktion ist die Verwendung der folgenden Formel:

Concurrency = (average requests per second) * (average request duration in seconds)

Gleichzeitigkeit unterscheidet sich von Anfragen pro Sekunde. Nehmen wir zum Beispiel an, Ihre Event-Funktion empfängt im Durchschnitt 100 Anfragen pro Sekunde. Wenn die durchschnittliche Dauer einer Anfrage 1 Sekunde beträgt, beträgt die Nebenläufigkeit ebenfalls 100:

Concurrency = (100 requests/second) * (1 second/request) = 100

Wenn die durchschnittliche Anfragedauer jedoch 500 ms beträgt, liegt die Nebenläufigkeit bei 50:

Concurrency = (100 requests/second) * (0.5 second/request) = 50

Was bedeutet eine Gleichzeitigkeit von 50 in der Praxis? Wenn die durchschnittliche Anfragedauer 500 ms beträgt, können Sie davon ausgehen, dass eine Instance Ihrer Funktion zwei Anfragen pro Sekunde verarbeiten kann. Dementsprechend sind 50 Instances Ihrer Funktion erforderlich, um eine Last von 100 Anfragen pro Sekunde zu verarbeiten. Eine Gleichzeitigkeit von 50 bedeutet, dass Lambda 50 Instances der Ausführungsumgebung bereitstellen muss, um diesen Workload ohne Drosselung effizient zu bewältigen. So drückt man dies in Gleichungsform aus:

Concurrency = (100 requests/second) / (2 requests/second) = 50

Wenn Ihre Ereignisfunktion die doppelte Anzahl von Anfragen empfängt (200 Anfragen pro Sekunde), aber nur die Hälfte der Zeit benötigt, um jede Anfrage zu verarbeiten (250 ms), dann ist die Parallelität immer noch 50:

Concurrency = (200 requests/second) * (0.25 second/request) = 50

Angenommen, Sie haben eine Ereignisfunktion, deren Ausführung im Durchschnitt 200 ms benötigt. Während der Spitzenlast beobachten Sie 5 000 Anfragen pro Sekunde. Wie hoch ist die Parallelität Ihrer Event-Funktion bei Spitzenlast?

Die durchschnittliche Dauer der Event-Funktion beträgt 200 ms oder 0,2 Sekunden. Mithilfe der Nebenläufigkeitsformel können Sie die Zahlen einfügen, um eine Nebenläufigkeit von 1 000 zu erhalten:

Concurrency = (5,000 requests/second) * (0.2 seconds/request) = 1,000

Alternativ bedeutet eine durchschnittliche Dauer von 200 ms, dass Ihre Event-Funktion 5 Anfragen pro Sekunde verarbeiten kann. Um den Workload von 5 000 Anfragen pro Sekunde zu bewältigen, benötigen Sie 1 000 Instances der Ausführungsumgebung. Die Gleichzeitigkeit beträgt also 1 000:

Concurrency = (5,000 requests/second) / (5 requests/second) = 1,000

Verständnis der reservierten Gleichzeitigkeit und der bereitgestellten Gleichzeitigkeit

Standardmäßig gilt für Ihr Konto ein Parallelitätslimit von 1.000 gleichzeitigen Ausführungen für alle Event-Funktionen in einer Region. Ihre Event Functions teilen sich diesen Pool von 1.000 gleichzeitigen Vorgängen auf On-Demand-Basis. Bei Ihren Event-Funktionen kommt es zu einer Drosselung (d. h. sie fangen an, Anfragen zu verwerfen), wenn Ihnen die verfügbare Parallelität ausgeht.

Einige Ihrer Event-Funktionen sind möglicherweise wichtiger als andere. Aus diesem Grund möchten Sie möglicherweise Parallelitätseinstellungen konfigurieren, um sicherzustellen, dass wichtige Ereignisfunktionen die Parallelität erhalten, die sie benötigen. Es gibt zwei Arten von Gleichzeitigkeitskontrollen: reservierte Gleichzeitigkeit und bereitgestellte Gleichzeitigkeit.

  • Verwenden Sie reservierte Parallelität, um sowohl die maximale als auch die minimale Anzahl gleichzeitiger Instances festzulegen, um einen Teil der Parallelität Ihres Kontos für eine Event-Funktion zu reservieren. Dies ist nützlich, wenn Sie nicht möchten, dass andere Event-Funktionen die gesamte verfügbare, nicht reservierte Parallelität in Anspruch nehmen. Wenn für eine Ereignisfunktion Parallelität reserviert ist, kann keine andere Ereignisfunktion diese Parallelität verwenden.

  • Verwenden Sie die bereitgestellte Parallelität, um eine Reihe von Umgebungsinstanzen für eine Ereignisfunktion vorab zu initialisieren. Dies ist nützlich, um Kaltstartlatenzen zu reduzieren.

Reservierte Gleichzeitigkeit

Wenn Sie sicherstellen möchten, dass für Ihre Event-Funktion jederzeit ein gewisses Maß an Parallelität verfügbar ist, verwenden Sie reservierte Parallelität.

Reservierte Parallelität legt die maximale und minimale Anzahl gleichzeitiger Instances fest, die Sie Ihrer Event-Funktion zuordnen möchten. Wenn Sie einer Event-Funktion reservierte Parallelität zuweisen, kann keine andere Event-Funktion diese Parallelität verwenden. Mit anderen Worten, die Einstellung einer reservierten Parallelität kann sich auf den Parallelitätspool auswirken, der anderen Ereignisfunktionen zur Verfügung steht. Eventfunktionen, die nicht über reservierte Parallelität verfügen, teilen sich den verbleibenden Pool an nicht reservierter Parallelität.

Das Konfigurieren der reservierten Gleichzeitigkeit wird auf das gesamte Gleichzeitigkeitslimit Ihres Kontos angerechnet. Für die Konfiguration der reservierten Parallelität für eine Event-Funktion fallen keine Gebühren an.

Betrachten Sie das folgende Diagramm, um die reservierte Gleichzeitigkeit besser zu verstehen:

Skalierungsverhalten von Event-Funktionen, wenn Sie reservierte Parallelität für kritische Event-Funktionen konfigurieren.

In diesem Diagramm liegt das Limit für die Parallelität Ihres Kontos für alle Event-Funktionen in dieser Region auf dem Standardlimit von 1.000. Angenommen, Sie haben zwei kritische Ereignisfunktionenfunction-orange, function-blue die routinemäßig mit hohen Aufrufvolumen rechnen. Sie entscheiden sich, 400 Einheiten reservierter Gleichzeitigkeit für function-blue und 400 Einheiten reservierter Gleichzeitigkeit für function-orange einzusetzen. In diesem Beispiel müssen sich alle anderen Event-Funktionen in Ihrem Konto die verbleibenden 200 Einheiten der uneingeschränkten Parallelität teilen.

Das Diagramm enthält fünf wichtige Punkte:

  • Bei t1 beginnen sowohl function-orange als auch function-blue mit dem Empfang von Anfragen. Jede Event-Funktion beginnt, den ihr zugewiesenen Teil der reservierten Parallelitätseinheiten aufzubrauchen.

  • Bei t2 erhalten function-orange und function-blue stetig mehr Anfragen. Gleichzeitig stellen Sie einige andere Lambda-Ereignisfunktionen bereit, die mit dem Empfang von Anfragen beginnen. Diesen anderen Eventfunktionen weisen Sie keine reservierte Parallelität zu. Diese beginnen mit der Verwendung der verbleibenden 200 Einheiten der nicht reservierten Gleichzeitigkeit.

  • Bei t3 erreicht function-orange die maximale Gleichzeitigkeit von 400. Obwohl es an anderer Stelle in Ihrem Konto ungenutzte Gleichzeitigkeit gibt, kann function-orange nicht darauf zugreifen. Die rote Linie weist darauf hin, dass function-orange es zu einer Drosselung kommt und Lambda möglicherweise Anfragen verwirft.

  • Bei t4 beginnt function-orange weniger Anfragen zu erhalten und wird nicht mehr gedrosselt. Bei Ihren anderen Event-Funktionen kommt es jedoch zu einem Anstieg des Datenverkehrs und es kommt zu Drosselungen. Obwohl es an anderer Stelle in Ihrem Konto ungenutzte Parallelität gibt, können diese anderen Event-Funktionen nicht darauf zugreifen. Die rote Linie weist darauf hin, dass bei Ihren anderen Event-Funktionen eine Drosselung auftritt.

  • Ab t5 erhalten andere Event-Funktionen weniger Anfragen und es erfolgt keine Drosselung mehr.

Anhand dieses Beispiels können Sie sehen, dass die Reservierung von Gleichzeitigkeit folgende Auswirkungen hat:

  • Ihre Event-Funktion kann unabhängig von anderen Event-Funktionen in Ihrem Konto skaliert werden. Alle Event-Funktionen Ihres Kontos in derselben Region, für die es keine reservierte Parallelität gibt, teilen sich den Pool der unreservierten Parallelität. Ohne reservierte Parallelität können andere Event-Funktionen möglicherweise Ihre gesamte verfügbare Parallelität verbrauchen. Dadurch wird verhindert, dass kritische Event-Funktionen bei Bedarf hochskaliert werden.

  • Ihre Event-Funktion kann nicht außer Kontrolle geraten. Die reservierte Parallelität begrenzt die maximale und minimale Parallelität Ihrer Event-Funktion. Das bedeutet, dass Ihre Event-Funktion keine Parallelität verwenden kann, die für andere Event-Funktionen reserviert ist, oder Parallelität aus dem Pool ohne Reservierung. Darüber hinaus fungiert die reservierte Parallelität sowohl als Unter- als auch als Obergrenze. Sie reserviert die angegebene Kapazität ausschließlich für Ihre Event-Funktion und verhindert gleichzeitig, dass diese über diese Grenze hinaus skaliert wird. Sie können Parallelität reservieren, um zu verhindern, dass Ihre Event-Funktion die gesamte verfügbare Parallelität in Ihrem Konto nutzt oder nachgelagerte Ressourcen überlastet.

  • Möglicherweise können Sie nicht die gesamte verfügbare Parallelität Ihres Kontos nutzen. Das Reservieren von Parallelität wird auf das Parallelitätslimit Ihres Kontos angerechnet. Das bedeutet aber auch, dass andere Event-Funktionen diesen Teil der reservierten Parallelität nicht nutzen können. Wenn Ihre Event-Funktion nicht die gesamte Parallelität nutzt, die Sie für sie reserviert haben, verschwenden Sie diese Parallelität. Dies ist kein Problem, es sei denn, andere Event-Funktionen in Ihrem Konto könnten von der verschwendeten Parallelität profitieren.

Informationen zur Verwaltung reservierter Parallelitätseinstellungen für Ihre Event-Funktionen finden Sie unter. Konfiguration reservierter Parallelität für eine Event-Funktion

Bereitgestellte Gleichzeitigkeit

Sie verwenden reservierte Parallelität, um die maximale Anzahl von Ausführungsumgebungen zu definieren, die für eine Lambda-Ereignisfunktion reserviert sind. Keine dieser Umgebungen ist jedoch vorinitialisiert. Infolgedessen können Ihre Event-Function-Aufrufe länger dauern, da Lambda zuerst die neue Umgebung initialisieren muss, bevor Sie sie zum Aufrufen Ihrer Event-Funktion verwenden kann. Wenn Lambda eine neue Umgebung initialisieren muss, um einen Aufruf auszuführen, wird dies als Kaltstart bezeichnet. Um Kaltstarts zu vermeiden, können Sie die bereitgestellte Gleichzeitigkeit verwenden.

Bei der bereitgestellten Parallelität handelt es sich um die Anzahl der vorinitialisierten Ausführungsumgebungen, die Sie Ihrer Event-Funktion zuweisen möchten. Wenn Sie die bereitgestellte Parallelität für eine Event-Funktion festlegen, initialisiert Lambda diese Anzahl von Ausführungsumgebungen, sodass diese bereit sind, sofort auf Anfragen von Event-Funktionen zu reagieren.

Anmerkung

Die Verwendung von bereitgestellter Gleichzeitigkeit verursacht zusätzliche Gebühren für Ihr Konto. Wenn Sie mit den Laufzeiten Java 11 oder Java 17 arbeiten, können Sie Lambda auch verwenden, SnapStart um Kaltstartprobleme ohne zusätzliche Kosten zu beheben. SnapStart verwendet zwischengespeicherte Snapshots Ihrer Ausführungsumgebung, um die Startleistung erheblich zu verbessern. Sie können nicht beide SnapStart und die bereitgestellte Parallelität in derselben Version der Event Function verwenden. Weitere Informationen zu SnapStart Funktionen, Einschränkungen und unterstützten Regionen finden Sie unter. Verbesserung der Startleistung mit Lambda SnapStart

Bei der Verwendung von bereitgestellter Gleichzeitigkeit erneuert Lambda weiterhin die Ausführungsumgebung im Hintergrund. Dies kann beispielsweise nach einem Aufruffehler der Fall sein. Lambda stellt jedoch zu jedem Zeitpunkt sicher, dass die Anzahl der vorinitialisierten Umgebungen dem Wert der bereitgestellten Parallelitätseinstellung Ihrer Event-Funktion entspricht. Wichtig: Selbst wenn Sie die bereitgestellte Parallelität verwenden, kann es dennoch zu einer Kaltstartverzögerung kommen, wenn Lambda die Ausführungsumgebung zurücksetzen muss.

Im Gegensatz dazu kann Lambda bei Verwendung von reservierter Parallelität eine Umgebung nach einer gewissen Zeit der Inaktivität vollständig beenden. Das folgende Diagramm veranschaulicht dies, indem der Lebenszyklus einer einzelnen Ausführungsumgebung verglichen wird, wenn Sie Ihre Event Function mit reservierter Parallelität und bereitgestellter Parallelität konfigurieren.

Vergleich des Verhaltens zwischen reservierter Parallelität und bereitgestellter Parallelität.

Das Diagramm enthält vier wichtige Punkte:

Zeit Reservierte Gleichzeitigkeit Bereitgestellte Gleichzeitigkeit

t1

Es passiert nichts.

Lambda initialisiert eine Instance der Ausführungsumgebung vorab.

t2

Anfrage 1 wird empfangen. Lambda muss eine neue Instance der Ausführungsumgebung initialisieren.

Anfrage 1 wird empfangen. Lambda verwendet die vorinitialisierte Umgebungs-Instance.

t3

Nach einer gewissen Inaktivität beendet Lambda die aktive Umgebungs-Instance.

Es passiert nichts.

t4

Anfrage 2 wird empfangen. Lambda muss eine neue Instance der Ausführungsumgebung initialisieren.

Anfrage 2 wird empfangen. Lambda verwendet die vorinitialisierte Umgebungs-Instance.

Betrachten Sie das folgende Diagramm, um die bereitgestellte Gleichzeitigkeit besser zu verstehen:

Skalierungsverhalten der Event-Funktion, wenn Sie die bereitgestellte Parallelität für eine kritische Event-Funktion konfigurieren.

In diesem Diagramm haben Sie eine Kontogleichzeitigkeitslimit von 1 000. Sie entscheiden sich, 400 Einheiten der bereitgestellten Gleichzeitigkeit an function-orange zu vergeben. Alle Event-Funktionen in Ihrem Konto, einschließlichfunction-orange, können die verbleibenden 600 Einheiten unreservierter Parallelität verwenden.

Das Diagramm enthält fünf wichtige Punkte:

  • Bei t1 beginnt function-orange mit dem Empfang von Anfragen. Da Lambda 400 Instances der Ausführungsumgebung vorinitialisiert hat, ist function-orange für den sofortigen Aufruf bereit.

  • Bei t2 erreicht function-orange 400 gleichzeitige Anfragen. Infolgedessen geht function-orange die bereitgestellte Gleichzeitigkeit aus. Da jedoch immer noch keine nicht reservierte Gleichzeitigkeit verfügbar ist, kann Lambda dies verwenden, um zusätzliche Anfragen an function-orange zu verarbeiten (es gibt keine Drosselung). Lambda muss neue Instanzen erstellen, um diese Anfragen zu bearbeiten, und bei Ihrer Event-Funktion kann es zu Kaltstartlatenzen kommen.

  • Bei t3 kehrt function-orange nach einem kurzen Anstieg des Datenverkehrs zu 400 gleichzeitigen Anfragen zurück. Lambda ist wieder in der Lage, alle Anfragen ohne Kaltstartlatenzen zu bearbeiten.

  • Bei t4 Event-Funktionen in Ihrem Konto kommt es zu einem Anstieg des Datenverkehrs. Dieser Anstieg kann von function-orange oder einer anderen Event-Funktion in Ihrem Konto stammen. Lambda verwendet nicht reservierte Gleichzeitigkeit, um diese Anfragen zu bearbeiten.

  • Bei t5 erreichen die Event-Funktionen in Ihrem Konto das maximale Parallelitätslimit von 1.000 und es kommt zu Drosselungen.

Im vorherigen Beispiel wurde nur die bereitgestellte Nebenläufigkeit berücksichtigt. In der Praxis können Sie für eine Event-Funktion sowohl die bereitgestellte als auch die reservierte Parallelität festlegen. Sie könnten dies tun, wenn Sie über eine Ereignisfunktion verfügen, die an Wochentagen eine konstante Anzahl von Aufrufen verarbeitet, aber am Wochenende routinemäßig Verkehrsspitzen verzeichnet. In diesem Fall könnten Sie die bereitgestellte Gleichzeitigkeit verwenden, um eine Basismenge an Umgebungen festzulegen, die Anfragen an Wochentagen verarbeiten, und die reservierte Gleichzeitigkeit verwenden, um die Spitzenlasten am Wochenende zu verarbeiten. Betrachten Sie das folgende Diagramm:

Skalierungsverhalten der Event-Funktion, wenn Sie sowohl reservierte als auch bereitgestellte Parallelität verwenden.

Nehmen wir in diesem Diagramm an, dass Sie 200 Einheiten bereitgestellter Gleichzeitigkeit und 400 Einheiten reservierter Gleichzeitigkeit für function-orange konfigurieren. Da Sie die reservierte Gleichzeitigkeit konfiguriert haben, kann function-orange keine der 600 Einheiten der nicht reservierten Gleichzeitigkeit verwenden.

Dieses Diagramm enthält fünf wichtige Punkte:

  • Bei t1 beginnt function-orange mit dem Empfang von Anfragen. Da Lambda 200 Instances der Ausführungsumgebung vorinitialisiert hat, ist function-orange für den sofortigen Aufruf bereit.

  • Bei function-orange verbraucht t2 die gesamte bereitgestellte Parallelität. function-orangekann weiterhin Anfragen mit reservierter Parallelität bearbeiten, aber bei diesen Anfragen kann es zu Kaltstart-Latenzen kommen.

  • Bei t3 erreicht function-orange 400 gleichzeitige Anfragen. Dadurch verbraucht function-orange die gesamte reservierte Gleichzeitigkeit. Da function-orange keine nicht reservierte Gleichzeitigkeit nutzen kann, werden die Anfragen gedrosselt.

  • Bei t4 beginnt function-orange weniger Anfragen zu erhalten und wird nicht mehr gedrosselt.

  • Bei t5 sinkt function-orange auf 200 gleichzeitige Anfragen, sodass alle Anfragen wieder bereitgestellte Nebenläufigkeit verwenden können (d. h. keine Kaltstartlatenzen).

Sowohl die reservierte Gleichzeitigkeit als auch die bereitgestellte Gleichzeitigkeit werden auf das Gleichzeitigkeitslimit Ihres Kontos und die regionalen Kontingente angerechnet. Mit anderen Worten, die Zuweisung von reservierter und bereitgestellter Parallelität kann sich auf den Parallelitätspool auswirken, der anderen Eventfunktionen zur Verfügung steht. Für die Konfiguration der bereitgestellten Parallelität fallen Gebühren für Sie an. AWS-Konto

Anmerkung

Wenn sich die Anzahl der bereitgestellten Parallelität für die Versionen und Aliase einer Event-Funktion zur reservierten Parallelität der Event-Funktion summiert, werden alle Aufrufe mit der bereitgestellten Parallelität ausgeführt. Diese Konfiguration hat auch zur Folge, dass die unveröffentlichte Version der Event-Funktion () gedrosselt wird, wodurch verhindert wird, dass sie ausgeführt wird. $LATEST Sie können einer Event-Funktion nicht mehr bereitgestellte Parallelität als reservierte Parallelität zuweisen.

Informationen zur Verwaltung der bereitgestellten Parallelitätseinstellungen für Ihre Eventfunktionen finden Sie unter. Konfiguration der bereitgestellten Parallelität für eine Event-Funktion Informationen zum Automatisieren der bereitgestellten Gleichzeitigkeitsskalierung basierend auf einem Zeitplan oder der Anwendungsnutzung finden Sie unter Auto Scaling von Anwendungen zur Automatisierung der Verwaltung von Gleichzeitigkeit bei der Bereitstellung.

So weist Lambda bereitgestellte Gleichzeitigkeit zu

Bereitgestellte Gleichzeitigkeit wird nicht sofort nach der Konfiguration online geschaltet. Lambda beginnt die Zuweisung bereitgestellter Gleichzeitigkeit nach ein oder zwei Minuten Vorbereitung. Für jede Event-Funktion kann Lambda jede Minute bis zu 6.000 Ausführungsumgebungen bereitstellen, unabhängig davon AWS-Region. Dies entspricht exakt der Skalierungsrate für Parallelität bei Event Functions.

Wenn Sie eine Anforderung zur Zuweisung bereitgestellter Gleichzeitigkeit einreichen, können Sie erst wieder auf diese Umgebungen zugreifen, wenn Lambda die Zuweisung vollständig abgeschlossen hat. Wenn Sie beispielsweise 5 000 bereitgestellte Gleichzeitigkeit anfordern, kann keine Ihrer Anfragen bereitgestellte Gleichzeitigkeit verwenden, bis Lambda die Zuweisung der 5 000 Ausführungsumgebungen vollständig abgeschlossen hat.

Vergleich zwischen reservierter und bereitgestellter Gleichzeitigkeit

Die folgende Tabelle fasst reservierte und bereitgestellte Nebenläufigkeit zusammen und vergleicht sie.

Thema Reservierte Gleichzeitigkeit Bereitgestellte Gleichzeitigkeit

Definition

Maximale Anzahl von Instanzen der Ausführungsumgebung für Ihre Event-Funktion.

Legen Sie die Anzahl der vorab bereitgestellten Instanzen der Ausführungsumgebung für Ihre Event-Funktion fest.

Bereitstellungsverhalten

Lambda stellt neue Instances auf On-Demand-Basis bereit.

Lambda stellt Instanzen vorab bereit (d. h. bevor Ihre Event-Funktion Anfragen empfängt).

Kaltstartverhalten

Kaltstartlatenz möglich, da Lambda bei Bedarf neue Instances erstellen muss.

Eine Kaltstartlatenz ist nicht möglich, da Lambda keine Instances On-Demand erstellen muss.

Drosselungsverhalten

Die Event-Funktion wurde gedrosselt, wenn das Limit für reservierte Parallelität erreicht wurde.

Falls reservierte Parallelität nicht festgelegt ist: Die Ereignisfunktion verwendet unreservierte Parallelität, wenn das bereitgestellte Parallelitätslimit erreicht ist.

Falls reservierte Parallelität gesetzt ist: Die Event Function wird gedrosselt, wenn das Limit für reservierte Parallelität erreicht wurde.

Standardverhalten, falls nicht festgelegt

Event Function verwendet uneingeschränkte Parallelität, die in Ihrem Konto verfügbar ist.

Lambda stellt keine Instances vorab bereit. Stattdessen, falls reservierte Parallelität nicht festgelegt ist: Event Function verwendet uneingeschränkte Parallelität, die in Ihrem Konto verfügbar ist.

Falls reservierte Parallelität gesetzt ist: Event Function verwendet reservierte Parallelität.

Preisgestaltung

Keine zusätzlichen Gebühren.

Verursacht zusätzliche Gebühren.

Gleichzeitigkeit und Anforderungen pro Sekunde verstehen

Wie im vorherigen Abschnitt erwähnt, unterscheidet sich die Gleichzeitigkeit von den Anforderungen pro Sekunde. Dieser Unterschied ist besonders wichtig, wenn Sie mit Event-Funktionen arbeiten, die eine durchschnittliche Anforderungsdauer von weniger als 100 ms haben.

Für alle Event-Funktionen in Ihrem Konto erzwingt Lambda ein Limit für Anfragen pro Sekunde, das dem Zehnfachen Ihrer Kontoparallelität entspricht. Da das Standardlimit für die gleichzeitige Nutzung von Konten beispielsweise bei 1.000 liegt, können die Ereignisfunktionen in Ihrem Konto maximal 10.000 Anfragen pro Sekunde verarbeiten.

Stellen Sie sich zum Beispiel eine Ereignisfunktion mit einer durchschnittlichen Anforderungsdauer von 50 ms vor. Bei 20.000 Anfragen pro Sekunde sieht die Parallelität dieser Ereignisfunktion wie folgt aus:

Concurrency = (20,000 requests/second) * (0.05 second/request) = 1,000

Ausgehend von diesem Ergebnis könnte man annehmen, dass die Gleichzeitigkeitsgrenze von 1 000 Konten ausreicht, um diese Last zu bewältigen. Aufgrund der Obergrenze von 10.000 Anfragen pro Sekunde kann Ihre Ereignisfunktion jedoch nur 10.000 Anfragen pro Sekunde von den insgesamt 20.000 Anfragen verarbeiten. Bei dieser Ereignisfunktion kommt es zu einer Drosselung.

Die Lektion besteht darin, dass Sie bei der Konfiguration der Parallelitätseinstellungen für Ihre Ereignisfunktionen sowohl Parallelität als auch Anfragen pro Sekunde berücksichtigen müssen. In diesem Fall müssen Sie eine Erhöhung des Kontogleichzeitigkeitslimits auf 2 000 beantragen, da sich dadurch Ihr Gesamtlimit für Anfragen pro Sekunde auf 20 000 erhöhen würde.

Anmerkung

Basierend auf diesem Limit für Anfragen pro Sekunde ist es falsch zu sagen, dass jede Lambda-Ausführungsumgebung nur maximal zehn Anfragen pro Sekunde verarbeiten kann. Anstatt die Auslastung einer einzelnen Ausführungsumgebung zu beobachten, berücksichtigt Lambda bei der Berechnung der Quoten nur die Gesamtgleichzeitigkeit und die Gesamtanforderungen pro Sekunde.

Angenommen, Sie haben eine Ereignisfunktion, deren Ausführung im Durchschnitt 20 ms dauert. Während der Spitzenlast beobachten Sie 30 000 Anfragen pro Sekunde. Wie hoch ist die Parallelität Ihrer Event-Funktion bei Spitzenlast?

Die durchschnittliche Dauer der Event-Funktion beträgt 20 ms oder 0,02 Sekunden. Mithilfe der Parallelitätsformel können Sie die Zahlen einfügen, um eine Parallelität von 600 zu erhalten:

Concurrency = (30,000 requests/second) * (0.02 seconds/request) = 600

Standardmäßig scheint eine Kontogleichzeitigkeitslimit von 1 000 ausreichend zu sein, um diese Last zu bewältigen. Das Limit für Anfragen pro Sekunde von 10 000 reicht jedoch nicht aus, um die eingehenden 30 000 Anfragen pro Sekunde zu verarbeiten. Um den 30 000 Anfragen in vollem Umfang gerecht zu werden, müssen Sie eine Erhöhung des Kontogleichzeitigkeitslimits auf 3 000 oder mehr beantragen.

Das Limit für Anfragen pro Sekunde gilt für alle Kontingente in Lambda, die Gleichzeitigkeit beinhalten. Mit anderen Worten, sie gilt für synchrone On-Demand-Ereignisfunktionen, für Ereignisfunktionen, die bereitgestellte Parallelität verwenden, und für das Skalierungsverhalten bei Parallelität. Im Folgenden finden Sie beispielsweise einige Szenarien, in denen Sie sowohl Ihre Grenzwerte für Parallelität als auch für Anfragen pro Sekunde sorgfältig abwägen müssen:

  • Bei einer Ereignisfunktion, die On-Demand-Parallelität verwendet, kann es zu einem Anstieg der Parallelität um 500 Mal alle 10 Sekunden oder um 5.000 Anfragen pro Sekunde alle 10 Sekunden kommen, je nachdem, was zuerst eintritt.

  • Angenommen, Sie haben eine Ereignisfunktion mit einer bereitgestellten Parallelitätszuweisung von 10. Diese Ereignisfunktion überträgt sich nach 10 Parallelität oder 100 Anfragen pro Sekunde auf On-Demand-Parallelität, je nachdem, was zuerst eintritt.

Gleichzeitigkeitskontingente

Lambda legt Kontingente für die Gesamtmenge an Parallelität fest, die Sie für alle Eventfunktionen in einer Region verwenden können. Diese Kontingente bestehen auf zwei Ebenen:

Um Ihr aktuelles Kontingent für Parallelität auf Kontoebene zu überprüfen, verwenden Sie (), um den AWS Command Line Interface folgenden Befehl auszuführen:AWS CLI

aws lambda get-account-settings

Die Ausgabe sollte ungefähr wie folgt aussehen:

{ "AccountLimit": { "TotalCodeSize": 80530636800, "CodeSizeUnzipped": 262144000, "CodeSizeZipped": 52428800, "ConcurrentExecutions": 1000, "UnreservedConcurrentExecutions": 900 }, "AccountUsage": { "TotalCodeSize": 410759889, "FunctionCount": 8 } }

ConcurrentExecutionsist Ihr Gesamtkontingent für Parallelität auf Kontoebene. UnreservedConcurrentExecutionsist die Menge an reservierter Parallelität, die Sie Ihren Event-Funktionen noch zuweisen können.

Wenn Ihre Event-Funktion mehr Anfragen erhält, skaliert Lambda automatisch die Anzahl der Ausführungsumgebungen, um diese Anfragen zu bearbeiten, bis Ihr Konto seine Parallelitätsquote erreicht hat. Zum Schutz vor einer Überskalierung als Reaktion auf plötzliche Datenverkehrsspitzen begrenzt Lambda jedoch, wie schnell Ihre Funktionen skaliert werden können. Diese Skalierungsrate für Parallelität ist die maximale Geschwindigkeit, mit der Event Functions in Ihrem Konto als Reaktion auf erhöhte Anfragen skaliert werden können. (Das heißt, sie gibt an, wie schnell Lambda neue Ausführungsumgebungen erstellen kann.) Die Skalierungsrate für Parallelität unterscheidet sich vom Parallelitätslimit auf Kontoebene, das der Gesamtmenge an Parallelität entspricht, die Ihren Eventfunktionen zur Verfügung steht.

In jeder AWS-Region und für jede Event-Funktion beträgt Ihre Parallelitätsskalierungsrate 1.000 Instanzen der Ausführungsumgebung alle 10 Sekunden (oder 10.000 Anfragen pro Sekunde alle 10 Sekunden). Mit anderen Worten: Lambda kann jeder Ihrer Funktionen alle 10 Sekunden höchstens 1 000 zusätzliche Instanzen der Ausführungsumgebung zuweisen oder 10 000 zusätzliche Anfragen pro Sekunde bearbeiten.

Normalerweise müssen Sie sich über diese Einschränkung keine Gedanken machen. Die Skalierungsrate von Lambda ist für die meisten Anwendungsfälle ausreichend.

Wichtig ist, dass die Skalierungsrate für die Gleichzeitigkeit eine Grenze auf Funktionsebene darstellt. Das bedeutet, dass jede Event-Funktion in Ihrem Konto unabhängig von anderen Event-Funktionen skaliert werden kann.

Weitere Informationen zum Skalierungsverhalten finden Sie unter Skalierungsverhalten der Event-Funktion.