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.
Skalierung von mit Lambda verwalteten Instances
Lambda Managed Instances skaliert nicht, wenn Aufrufe eintreffen, und unterstützt keine Kaltstarts. Stattdessen skaliert es asynchron mithilfe von Signalen zum Ressourcenverbrauch. Managed Instances werden derzeit auf der Grundlage der CPU-Ressourcenauslastung und der Auslastung mehrerer Parallelitäten skaliert.
Die wichtigsten Unterschiede:
-
Lambda (Standard): Skaliert, wenn es keine freie Ausführungsumgebung gibt, um einen eingehenden Aufruf zu verarbeiten (Kaltstart)
-
Lambda Managed Instances: Skaliert asynchron auf der Grundlage der CPU-Ressourcenauslastung und der Auslastung der Ausführungsumgebungen mit mehreren Parallelitäten
Wenn sich Ihr Traffic innerhalb von 5 Minuten mehr als verdoppelt, kann es zu Drosselungen kommen, da Lambda Instances und Ausführungsumgebungen entsprechend der Nachfrage hochskaliert.
Der Lebenszyklus der Skalierung
Lambda Managed Instances verwendet eine verteilte Architektur zur Verwaltung der Skalierung:
Komponenten:
-
Verwaltete Instanzen — Führen Sie sie in Ihrem Konto in den von Ihnen bereitgestellten Subnetzen aus
-
Router und Scaler — Gemeinsam genutzte Lambda-Komponenten, die Aufrufe weiterleiten und die Skalierung verwalten
-
Lambda Agent — Wird auf jeder verwalteten Instanz ausgeführt, um den Lebenszyklus der Ausführungsumgebung zu verwalten und den Ressourcenverbrauch zu überwachen
So funktioniert es:
-
Wenn Sie eine Funktionsversion bei einem Kapazitätsanbieter veröffentlichen, startet Lambda Managed Instances in Ihrem Konto. Aus Gründen der AZ-Resilienz werden standardmäßig drei Ausführungsumgebungen gestartet und drei Ausführungsumgebungen gestartet, bevor Ihre Funktionsversion als AKTIV markiert wird.
-
Jede verwaltete Instanz kann Ausführungsumgebungen für mehrere Funktionen ausführen, die demselben Kapazitätsanbieter zugeordnet sind.
-
Wenn der Datenverkehr in Ihre Anwendung fließt, verbrauchen die Ausführungsumgebungen Ressourcen. Der Lambda Agent benachrichtigt den Scaler, der entscheidet, ob neue Ausführungsumgebungen oder Managed Instances skaliert werden sollen.
-
Wenn der Router versucht, einen Aufruf an eine Ausführungsumgebung mit hohem Ressourcenverbrauch zu senden, benachrichtigt ihn der Lambda-Agent auf dieser Instanz, dass er es auf einer anderen Instanz erneut versuchen soll.
-
Wenn der Datenverkehr abnimmt, benachrichtigt der Lambda Agent Scaler, der dann entscheidet, die Ausführungsumgebungen herunterzufahren und in Managed Instances zu skalieren.
Anpassung des Skalierungsverhaltens
Sie können das Skalierungsverhalten von Managed Instances mithilfe von fünf Steuerelementen anpassen:
Steuerungen auf Funktionsebene
1. Funktionsspeicher und vCPUs
Wählen Sie die Speichergröße und die vCPU-Zuweisung für Ihre Funktion. Die kleinste unterstützte Funktionsgröße ist 2 GB und 1 vCPU.
Überlegungen:
-
Wählen Sie eine Speicher- und vCPU-Einstellung, die die mehrfache Ausführung Ihrer Funktion unterstützt
-
Sie können keine Funktion mit weniger als 1 vCPU konfigurieren, da Funktionen, die auf verwalteten Instanzen ausgeführt werden, mehrere gleichzeitige Arbeitslasten unterstützen sollten
-
Sie können nicht weniger als 2 GB wählen, da dies dem Verhältnis von Arbeitsspeicher zu vCPU von 2 zu 1 von c-Instances entspricht, die das niedrigste Verhältnis aufweisen
-
Für Python-Anwendungen müssen Sie möglicherweise ein höheres Verhältnis von Arbeitsspeicher zu vCPUs wählen, z. B. 4 zu 1 oder 8 zu 1, da Python mehrere Parallelitäten verarbeitet
-
Wenn Sie CPU-intensive Operationen ausführen oder wenig I/O ausführen, sollten Sie mehr als eine vCPU wählen
2. Maximale Parallelität
Legen Sie die maximale Parallelität pro Ausführungsumgebung fest.
Standardverhalten: Lambda wählt sinnvolle Standardwerte, die den Ressourcenverbrauch und den Durchsatz ausgleichen und für eine Vielzahl von Anwendungen funktionieren.
Richtlinien für Anpassungen:
-
Erhöhen Sie die Parallelität: Wenn Ihre Funktionsaufrufe sehr wenig CPU beanspruchen, können Sie die maximale Parallelität auf maximal 64 pro vCPU erhöhen
-
Verringern Sie die Parallelität: Wenn Ihre Anwendung viel Arbeitsspeicher und nur sehr wenig CPU verbraucht, können Sie Ihre maximale Parallelität reduzieren
Wichtig: Da Lambda Managed Instances für Anwendungen mit mehreren gleichzeitigen Vorgängen konzipiert sind, kann es in Ausführungsumgebungen mit sehr geringer Parallelität bei der Skalierung zu Drosselungen kommen. Wenn Aufrufe in einer Ausführungsumgebung ankommen, die ihre Parallelitätsgrenze erreicht hat, leitet Lambda diese Aufrufe an eine andere Stelle weiter und skaliert neue Ausführungsumgebungen, um die Last zu bewältigen. Um zu ermitteln, welche Ressourceneinschränkung die Drosselung verursacht, überwachen Sie die Metriken für den Grund der Drosselung (, und), die unter beschrieben werden. ConcurrencyThrottles CPUThrottles MemoryThrottles DiskThrottles Arten von Metriken für Lambda-Funktionen
3. Ausführungsumgebungen pro Funktion
Legen Sie die minimale und maximale Anzahl von Ausführungsumgebungen für Ihre Funktion fest.
Standardverhalten: Das Standardminimum sind 3 Ausführungsumgebungen in Availability Zones, ohne Standardmaximum. Sie können beide Werte überschreiben, nachdem die Funktion erstellt wurde.
Richtlinien für Anpassungen:
-
Legen Sie das Mindestmaß fest: Stellen Sie Kapazität für den Basisverkehr bereit und reduzieren Sie die Drosselung bei plötzlichen Ausfällen. Werte unter 3 reduzieren die Redundanz der Availability Zone.
-
Legen Sie das Maximum fest: Beschränken Sie die Anzahl der Ausführungsumgebungen, um das Scale-Out zu kontrollieren und Probleme mit störenden Nachbarn zu vermeiden, wenn sich mehrere Funktionen einen Kapazitätsanbieter teilen.
-
Funktion deaktivieren: Setzen Sie sowohl das Minimum als auch das Maximum auf 0, um eine Funktion zu deaktivieren, ohne sie zu löschen.
Beispiel:
aws lambda put-function-scaling-config \ --function-name my-lmi-function \ --qualifier '$LATEST.PUBLISHED' \ --function-scaling-config MinExecutionEnvironments=5,MaxExecutionEnvironments=20 \ --region us-east-1
Wichtige Hinweise:
-
Geltungsbereich der Qualifizierer: Diese Konfigurationen gelten auf Funktionsebene für jeden qualifizierten ARN. Wenn diese Option aktiviert ist
$LATEST.PUBLISHED, wird die Konfiguration an zukünftige$LATEST.PUBLISHEDVersionen weitergegeben. Wenn diese Option für eine bestimmte Version festgelegt ist, werden neu veröffentlichte Versionen auf die Standardwerte zurückgesetzt. -
Gepaarte Konfiguration: Sie müssen sowohl den Mindest- als auch den Höchstwert zusammen festlegen. Jede nicht angegebene Einstellung wird auf ihren Standardwert zurückgesetzt. Gültige Werte für beide
MinExecutionEnvironmentsundMaxExecutionEnvironmentsliegen im Bereich von 0 bis 15000. Ein Minimum von 0 ist nur gültig, wenn das Maximum ebenfalls 0 ist. -
Auswirkungen auf die Kosten: Die Funktionsdeaktivierung wird auf der Ebene der Funktionsversion wirksam. Lambda beendet eine zugrunde liegende EC2-Instance, sobald sie keine aktiven Ausführungsumgebungen mehr hat, und die Instance-Gebühren laufen weiter, bis die Kündigung abgeschlossen ist (in der Regel innerhalb weniger Minuten).
Kontrollen auf Ebene des Kapazitätsanbieters
4. Zielressourcenauslastung
Wählen Sie Ihr eigenes Ziel für den CPU-Auslastungsverbrauch.
Standardverhalten: Lambda bietet genügend Spielraum, sodass sich Ihr Traffic innerhalb von 5 Minuten ohne Drosselung verdoppeln kann.
Optimierungsoptionen:
-
Wenn Ihre Arbeitslast sehr konstant ist oder wenn Ihre Anwendung nicht auf Drosselungen reagiert, können Sie das Ziel auf ein hohes Niveau setzen, um eine höhere Auslastung und niedrigere Kosten zu erzielen
-
Wenn Sie genügend Spielraum für Datenverkehrsschübe haben möchten, können Sie die Ressourcenziele auf ein niedriges Niveau setzen, wodurch mehr Kapazität benötigt wird
5. Auswahl des Instance-Typs
Legen Sie zulässige oder ausgeschlossene Instanztypen fest.
Standardverhalten: Lambda wählt die besten Instanztypen für Ihre Arbeitslast aus. Es wird empfohlen, Lambda Managed Instances die Auswahl der Instanztypen zu überlassen, da die Beschränkung der Anzahl möglicher Instanztypen zu einer geringeren Verfügbarkeit führen kann.
Benutzerdefinierte Konfiguration:
-
Spezifische Hardwareanforderungen: Legen Sie für zulässige Instanztypen eine Liste kompatibler Instanzen fest. Wenn Sie beispielsweise eine Anwendung haben, die eine hohe Netzwerkbandbreite benötigt, können Sie mehrere n-Instance-Typen auswählen
-
Kostenoptimierung: Für Test- oder Entwicklungsumgebungen können Sie kleinere Instanztypen wie die Instance-Typen m7a.large wählen
Geplante Skalierung
Verwenden Sie Amazon EventBridge Scheduler, um die minimalen und maximalen Ausführungsumgebungen Ihrer Funktion nach einem wiederkehrenden oder einmaligen Zeitplan anzupassen. Dies ist nützlich für vorhersehbare Verkehrsmuster, z. B. beim Hochfahren vor Spitzenzeiten und beim Herunterfahren außerhalb der Spitzenzeiten.
Scheduler-Konfiguration:
-
Erstellen Sie eine EventBridge Scheduler-Ausführungsrolle oder verwenden Sie eine vorhandene Rolle, die Ihnen die Erlaubnis erteilt, Ihre Zielfunktion
lambda:PutFunctionScalingConfigaufzurufen. -
Erstellen Sie einen Zeitplan mithilfe eines Cron- oder Rate-Ausdrucks und zielen Sie dabei auf die
PutFunctionScalingConfigAPI als universelles Ziel ab. Geben Sie die neuenMaxExecutionEnvironmentsWerteMinExecutionEnvironmentsund in der Eingabe-Nutzlast an.
Beispiel 1: Skalierung zur Bewältigung des geplanten Spitzenverkehrs
Erstellen Sie zwei Zeitpläne, um vor den Hauptverkehrszeiten nach oben zu skalieren und danach nach unten zu skalieren. Jeder Zeitplan zielt mit aktualisierten MaxExecutionEnvironments Werten auf die PutFunctionScalingConfig API MinExecutionEnvironments ab.
Um 8:00 Uhr UTC hochskalieren (min=100, max=1000):
aws scheduler create-schedule \ --name "ScaleUpLambdaManagedInstances" \ --schedule-expression "cron(0 8 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 100, \"MaxExecutionEnvironments\": 1000}}" }'
Um 18:00 Uhr UTC herunterskalieren (min=5, max=20):
aws scheduler create-schedule \ --name "ScaleDownLambdaManagedInstances" \ --schedule-expression "cron(0 18 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 5, \"MaxExecutionEnvironments\": 20}}" }'
Beispiel 2: Außerhalb der Spitzenzeiten deaktivieren und erneut aktivieren
Wenn Sie MinExecutionEnvironments sowohl als auch MaxExecutionEnvironments auf 0 setzen, wird die Funktionsversion deaktiviert, ohne sie zu löschen. Eine deaktivierte Funktion wird nicht automatisch mit dem Verkehr wieder hochskaliert. Sie müssen sie explizit reaktivieren, indem Sie im Rahmen einer anderen geplanten Aktion Werte festlegen, die nicht Null sind.
Um 22:00 Uhr UTC deaktivieren (min=0, max=0):
aws scheduler create-schedule \ --name "DeactivateLambdaManagedInstances" \ --schedule-expression "cron(0 22 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 0, \"MaxExecutionEnvironments\": 0}}" }'
Reaktivieren Sie um 7:00 Uhr UTC (min=10, max=20):
aws scheduler create-schedule \ --name "ReactivateLambdaManagedInstances" \ --schedule-expression "cron(0 7 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 10, \"MaxExecutionEnvironments\": 20}}" }'
Richtlinien zur Anpassung:
-
Erstellen Sie für Workloads mit vorhersehbaren Spitzenwerten mehrere Zeitpläne, die Ihrem Verkehrsmuster entsprechen: einen, um Ihre Funktion vor den Hauptverkehrszeiten zu erhöhen, und einen anderen, um nach den Hauptverkehrszeiten herunterzufahren. Jeder Zeitplan folgt demselben Muster mit aktualisierten
MinExecutionEnvironmentsMaxExecutionEnvironmentsAND-Werten. -
Bei der geplanten Skalierung werden die bereitgestellten Unter- und Obergrenzen der Ausführungsumgebungen angepasst, aber die tatsächliche Skalierung zwischen Mindest- und Höchstwert hängt immer noch von der CPU-Auslastung und der gleichzeitigen Auslastung ab.
-
Wenn sich Ihr Traffic innerhalb von 5 Minuten nach einer geplanten Skalierung mehr als verdoppelt, kann es bei der Bereitstellung von Kapazität dennoch zu Drosselungen kommen.
-
Denken Sie bei der Skalierung auf Null zur Deaktivierung einer Funktion daran, dass für die Reaktivierung ein expliziter Aufruf mit Werten ungleich Null erforderlich ist.
PutFunctionScalingConfig
Nächste Schritte
-
Erfahren Sie mehr über Kapazitätsanbieter für Lambda Managed Instances
-
Lesen Sie die laufzeitspezifischen Anleitungen für den Umgang mit Mehrfachparallelität
-
Konfigurieren Sie die VPC-Konnektivität für Ihre Kapazitätsanbieter
-
Überwachen Sie Skalierungskennzahlen, um das Skalierungsverhalten zu optimieren