Maximale Anzahl von Instanzen konfigurieren (1. Generation)
Sie können das Skalierungsverhalten Ihrer Funktion steuern, indem Sie eine maximale Anzahl von Cloud Run-Funktionsinstanzen festlegen. Die Einstellung der maximalen Anzahl von Instanzen kontrolliert die Kosten und verhindert, dass nachgelagerte Ressourcen von Traffic überlastet werden.
In Cloud Run-Funktionen wird die Skalierung durch das Erstellen neuer Instanzen Ihrer Funktion erreicht. Jede dieser Instanzen kann jeweils nur eine Anfrage gleichzeitig verarbeiten. Daher werden bei große Spitzen im Anfragevolumen unter Umständen viele Instanzen erstellt.
Die automatische Skalierung ist meistens von Vorteil. In einigen Fällen kann es aber sinnvoll sein, die Gesamtzahl der Instanzen zu begrenzen, die gleichzeitig vorhanden sein können. Beispielsweise könnte Ihre Funktion mit einer Datenbank interagieren, die nur eine bestimmte Anzahl geöffneter Verbindungen verarbeiten kann.
Limits für die Höchstzahl der Instanzen festlegen und löschen
Sie können für eine Funktion während der Bereitstellung eine maximale Anzahl von Instanzen festlegen. Jede Funktion hat ihre eigene Einstellung für die maximale Anzahl von Instanzen. Funktionen werden unabhängig voneinander skaliert.
Maximale Instanzlimits festlegen
Sie können ein maximales Instanzlimit entweder über die Google Cloud CLI oder die Google Cloud Console festlegen. Wenn Sie kein Limit angeben, wird in Cloud Run-Funktionen standardmäßig 3.000 festgelegt.
So legen Sie ein Limit für die maximale Anzahl an Instanzen fest:
Console
Klicken Sie auf Funktion erstellen.
Füllen Sie die erforderlichen Felder für die Funktion aus.
Maximieren Sie am Ende der Seite den Abschnitt Laufzeit, Build... und klicken Sie auf den Tab Laufzeit.
Geben Sie im Abschnitt Automatische Skalierung des Felds Maximale Anzahl von Instanzen einen Wert ein oder verwenden Sie die Standardeinstellung.
gcloud
Führen Sie den Befehl deploy
mit dem Flag --max-instances
aus, um ein maximales Instanzlimit festzulegen:
gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT
Dabei gilt:
FUNCTION_NAME: Der Name der Funktion.
MAX_INSTANCE_LIMIT: Die Zahl, die als Limit für die maximale Anzahl an Instanzen festgelegt werden soll, z. B. 3.000.
Maximale Instanzlimits löschen
Sie können ein maximales Instanzlimit für eine Funktion entweder mit dem gcloud
-Befehlszeilentool oder der Google Cloud Console löschen.
Console
So löschen Sie ein maximales Instanzlimit für eine Funktion:
Klicken Sie auf eine vorhandene Funktion, um die zugehörige Detailseite zu öffnen. Das aktuelle Limit für die maximalen Instanzen der Funktion finden Sie auf dem Tab Details.
Klicken Sie auf Bearbeiten.
Maximieren Sie am Ende der Seite den Abschnitt Laufzeit, Build... und klicken Sie auf den Tab Laufzeit.
Geben Sie im Abschnitt Automatische Skalierung im Feld Maximale Instanzzahl den Wert
0
ein.
gcloud
Führen Sie den Befehl deploy
mit dem Flag --clear-max-instances
aus, um ein maximales Instanzlimit für eine Funktion zu löschen:
gcloud functions deploy FUNCTION_NAME --no-gen2 --clear-max-instances
Limits und Best Practices
Dieser Abschnitt enthält Richtlinien für die Verwendung der Funktion für die Höchstzahl der Instanzen.
Maximalen Instanzwert wählen
Der optimale Wert für die Einstellung für maximale Instanzen hängt von den Eigenschaften Ihrer Funktion ab, einschließlich der Dauer der Ausführung eines Aufrufs, der erwarteten durchschnittlichen und maximalen Aufrufhäufigkeit und der Toleranz Ihrer Anwendung gegen Aufruffehler. Es empfiehlt sich, mit einem maximalen Instanzwert von 3 zu beginnen, dann auf Aufruffehler zu überwachen und den Wert der maximalen Anzahl an Instanzen nach Bedarf anzupassen.
Schutz vor übermäßigem Scale-up
Wenn kein Limit für die maximale Anzahl von Instanzen angegeben ist, wird bei Cloud Run-Funktionen die Skalierung zur Deckung des Bedarfs der Begrenzung des Durchsatzes vorgezogen. Dies bedeutet, dass die Anzahl der gleichzeitigen Instanzen, die Ihre Funktion nutzen kann, praktisch unbegrenzt ist, es sei denn, Sie haben ein solches Limit konfiguriert.
Es empfiehlt sich, allen Funktionen, die Anfragen an durchsatzbeschränkte oder anderweitig nicht skalierbare nachgelagerte Dienste senden, ein --max-instances
-Limit zuzuweisen.
Ein maximales Instanzlimit verbessert die allgemeine Systemstabilität und schützt vor ungewöhnlich hohen Anfragezahlen.
Anfrageverarbeitung, wenn alle Instanzen ausgelastet sind
Unter normalen Umständen wird Ihre Funktion hochskaliert, wenn neue Instanzen zum Verarbeiten des eingehenden Traffics erstellt werden. Wenn Sie jedoch ein Limit für die Höchstzahl der Instanzen festgelegt haben, kann es vorkommen, dass nicht genügend Instanzen vorhanden sind, um den eingehenden Traffic zu verarbeiten.
In diesem Szenario versucht Cloud Run Functions bis zu 30 Sekunden, eine neue eingehende Anfrage zu verarbeiten:
- Wenn eine Instanz die Verarbeitung ihrer Anfrage während dieses Zeitraums abschließt, kann sie mit der Verarbeitung der neuen eingehenden Anfrage beginnen.
- Wenn keine Instanz verfügbar wird, schlägt die Anfrage fehl.
Anfragen, die an überlastete HTTP-Funktionen gesendet werden, schlagen mit dem Antwortcode
429 Too Many Requests
fehl, wenn ein Wert für die Höchstzahl an Instanzen konfiguriert ist, oder mit500 Internal Server Error
, wenn kein Höchstwert für Instanzen konfiguriert ist
Ereignisse für ereignisgesteuerte Funktionen werden automatisch gespeichert, bis Kapazität verfügbar ist.
Limits für die maximale Anzahl von Instanzen, die die Skalierbarkeit von Cloud Run-Funktionen überschreiten
Wenn Sie ein Limit für die maximale Anzahl von Instanzen festlegen, geben Sie eine Obergrenze an. Das Festlegen eines hohen Limits bedeutet nicht, dass Ihre Funktion bis auf die angegebene Anzahl von Instanzen skaliert wird. Es bedeutet lediglich, dass die Anzahl der zu einer beliebigen Zeit koexistierenden Instanzen den Grenzwert nicht überschreiten darf.
Außerdem kann sich das Festlegen eines maximalen Instanzlimits auf die Skalierungsstrategien auswirken, die Cloud Run-Funktionen zum Verarbeiten Ihres Trafficaufkommens verwendet. Im Allgemeinen priorisiert Cloud Run-Funktionen Ihr angegebenes Limit, statt vertikal zu skalieren und Ihr Limit möglicherweise zu überschreiten.
Trafficspitzen verarbeiten
In einigen Fällen, z. B. bei schnellem Trafficanstieg, können Cloud Run-Funktionen für einen kurzen Zeitraum mehr Instanzen als das angegebene maximale Instanzenlimit erstellen. Wenn Ihre Funktion dieses temporäre Verhalten nicht akzeptiert, sollten Sie vielleicht eine Sicherheitsspanne hinzufügen und einen geringeren Wert für die Höchstzahl der Instanzen festlegen, als Ihre Funktion tolerieren kann.
Deployments
Wenn Sie eine neue Version Ihrer Funktion bereitstellen, migriert Cloud Run den Traffic von der früheren Version zur neuen. Da für jede Version der Funktion ein unabhängiges Limit für die Höchstzahl der Instanzen festgelegt ist, können Sie das jeweilige Limit nach der Bereitstellung vorübergehend überschreiten.
Eine Funktion kann beispielsweise ein maximales Instanzenlimit von 5 haben. Unter normalen Umständen skaliert die Funktion bei der Verarbeitung von Anfragen bis auf 5 Instanzen. Wenn eine neue Version der Funktion bereitgestellt wird, hat die neue Version ein eigenes maximales Instanzenlimit von 5.
Anfragen, die bereits von der vorherigen Version der Funktion verarbeitet werden, werden nicht unterbrochen, wenn eine neue Version der Funktion bereitgestellt wird. Stattdessen werden diese Anfragen weiterverarbeitet. Neue eingehende Anfragen werden von der neu bereitgestellten Version der Funktion verarbeitet.
Daher kann die Funktion im vorherigen Beispiel während des Zeitraums nach der Bereitstellung der neuen Version insgesamt bis zu 10 Instanzen haben (5 für jede Version Ihrer Funktion). Die Zeit, die für das Beenden der Instanzen der vorherigen Funktion benötigt wird, hängt von der Zeit ab, die diese Instanzen für die Verarbeitung aktiver Anfragen benötigen. Dies ist ein zusätzlicher Faktor, der bei der Auswahl eines geeigneten maximalen Instanzenlimits berücksichtigt werden muss.
Maximale Instanzlimits löschen
Wenn Sie die maximale Anzahl an Instanzen für eine Funktion auf 0 setzen, wird das vorhandene maximale Instanzlimit der Funktion gelöscht, die Funktion wird jedoch nicht pausiert.