Informationen zum Instanz-Autoscaling in Cloud Run-Diensten

In Cloud Run wird jede Überarbeitung automatisch auf die Anzahl der Instanzen skaliert, die zum Verarbeiten aller eingehenden Anfragen, Ereignisse oder der CPU-Auslastung erforderlich sind.

Wenn eine Überarbeitung keinen Traffic empfängt, wird sie standardmäßig auf null Instanzen herunterskaliert. Bei Bedarf können Sie diese Standardeinstellung ändern, um eine Instanz mithilfe der Einstellung Mindestinstanzen als inaktiv oder „einsatzbereit” festzulegen. Wenn Sie die CPU außerhalb von Anfragen verwenden, sollten Sie mindestens die Anzahl der Instanzen auf 1 festlegen.

Zusätzlich zur Rate eingehender Anfragen, Ereignisse oder CPU-Auslastung wird die Anzahl der geplanten Instanzen beeinflusst durch:

Das Cloud Run-Autoscaling wertet sie alle 5 Sekunden aus.

CPU immer zugewiesen und Autoscaling

Wenn Sie Ihren Cloud Run-Dienst so konfigurieren, dass die CPU immer zugewiesen ist, sollten Sie die Skalierung nach und ab null berücksichtigen.

CPU wird immer ab null zugewiesen Die Skalierung ab null kann nur durch eine Anfrage ausgelöst werden. Ein Dienst, der keine Anfragen verarbeitet, kann also nicht ab null skaliert werden. Für diese Arbeitslasten können Sie entweder Mindestinstanzen > 0 festlegen oder eine "Aktivierungsanfrage" in Ihr Design aufnehmen, um die Verarbeitung nach der Skalierung auf null neu zu starten.

CPU wird immer nach null skaliert Da keine Instanz jemals 0 % der CPU erreicht, würde eine Betrachtung der gesamten CPU-Auslastung zu einer Skalierung auf null führen. Dies bedeutet, dass die Entscheidung zur Skalierung von eins auf null nur getroffen werden kann, wenn geprüft wird, ob die Instanz eine Anfrage verarbeitet.

Maximale Anzahl von Instanzen

In einigen Fällen möchten Sie vielleicht die Gesamtzahl der Instanzen, die gestartet werden können, aus Gründen der Kostenkontrolle oder besserer Kompatibilität mit anderen von Ihrem Dienst verwendeten Ressourcen begrenzen. Beispielsweise kann Ihr Cloud Run-Dienst mit einer Datenbank interagieren, die nur eine bestimmte Anzahl gleichzeitig offener Verbindungen verarbeiten kann.

Mit der Einstellung „Maximale Anzahl von Instanzen” können Sie die Gesamtzahl der Instanzen begrenzen, die parallel gestartet werden können, wie unter Maximale Anzahl von Instanzen festlegen beschrieben.

Maximale Anzahl von Instanzen überschreiten

Unter normalen Umständen wird die Überarbeitung durch das Erstellen neuer Instanzen horizontal skaliert, um die eingehende Trafficlast zu verarbeiten. Wenn Sie jedoch ein maximales Instanzlimit festlegen, sind in einigen Szenarien nicht genügend Instanzen vorhanden, um diese Trafficlast zu bewältigen. In diesem Fall werden eingehende Anfragen so in die Warteschlange (ausstehend) gestellt:

  • Wenn neue Instanzen gestartet werden, z. B. während einer horizontalen Skalierung, bleiben Anfragen mindestens für die durchschnittliche Startzeit von Containerinstanzen dieses Dienstes ausstehend. Dazu gehört, wenn die Anfrage eine horizontale Skalierung initiiert, z. B. bei einer Skalierung von null.
  • Wenn die Startzeit weniger als 10 Sekunden beträgt, bleiben Anfragen bis zu 10 Sekunden ausstehend.
  • Wenn keine Instanzen beim Start vorhanden sind und die Anfrage keine horizontale Skalierung initiiert, bleiben Anfragen bis zu 10 Sekunden lang ausstehend.

Wenn eine Instanz während dieses Zeitfensters die Verarbeitung von Anfragen abschließt, steht sie für die Verarbeitung der ausstehenden Anfragen in der Warteschlange zur Verfügung. Wenn während des Zeitfensters keine Instanzen verfügbar werden, schlägt die Anfrage mit dem Fehlercode 429 fehl.

Skalierungsgarantien

Die Höchstzahl der Instanzen ist eine Obergrenze pro Überarbeitung. Das Festlegen eines hohen Limits bedeutet nicht, dass Ihre Überarbeitung auf die angegebene Anzahl von Instanzen horizontal skaliert wird. Es bedeutet lediglich, dass die Anzahl der Instanzen für diese Überarbeitung das Maximum nicht überschreiten sollte.

Maximale Anzahl von Instanzen aufgrund von Trafficspitzen überschreiten

In einigen Fällen, z. B. bei plötzlichem hohem Traffic oder bei Systemwartungen, kann Cloud Run für einen kurzen Zeitraum mehr Instanzen erstellen, als in der Einstellung für die maximale Anzahl von Instanzen angegeben sind. Neue Instanzen können über die maximale Anzahl von Instanzen hinaus gestartet werden, um vorhandene Instanzen zu ersetzen und einen Kulanzzeitraum für die Abarbeitung von Inflight-Anfragen festzulegen.

Das maximale Instanzlimit kann bei normalen Betrieb einige Male pro Woche überschritten werden. Der Kulanzzeitraum beträgt in der Regel bis zu 15 Minuten oder bis zu dem in der Einstellung Zeitlimit für Anfragen angegebenen Wert. Diese zusätzlichen Instanzen werden innerhalb von 15 Minuten nach Beginn ihrer Inaktivität gelöscht.

Sind viele Ersetzungen erforderlich, werden die Aktualisierungen in der Regel über viele Minuten oder Stunden verteilt, aber jeder Ersatz hat eine nur für den Kulanzzeitraum existierende Überschussinstanz. Die Zahl der Instanzen, die den maximalen Instanzwert überschreiten, liegt in der Regel nicht mehr als das Doppelte des konfigurierten maximalen Instanzlimits, sie kann bei plötzlichen großen Trafficspitzen jedoch viel höher sein.

Bei Lasttests treten mehr Instanzen über der maximalen Anzahl von Instanzen auf, da das System ändern kann, wo Trafficspitzen verarbeitet werden, um Kapazitäten für vorhandene Arbeitslasten mit dauerhaften Lastmustern freizuhalten.

Wenn Ihr Dienst dieses vorübergehende Verhalten nicht akzeptiert, sollten Sie vielleicht eine Sicherheitsspanne hinzufügen und einen niedrigeren Wert für die maximale Anzahl von Instanzen festlegen.

Trafficaufteilungen

Da das maximale Instanzlimit ein Grenzwert pro Überarbeitung ist, kann die Gesamtzahl der Instanzen für den Dienst die maximale Anzahl von Instanzen pro Überarbeitungen überschreiten, wenn der Dienst den Traffic auf mehrere Überarbeitungen verteilt. Dies ist in den Instanzanzahl-Messwerten zu sehen.

Bereitstellungen

Wenn Sie eine neue Überarbeitung bereitstellen, die den gesamten Traffic verarbeitet, startet Cloud Run genügend Instanzen der neuen Überarbeitung, bevor der Traffic an sie weitergeleitet wird. Dadurch werden die Auswirkungen neuer Überarbeitungsbereitstellungen auf die Anfragelatenzen reduziert, insbesondere bei der Bereitstellung von hohem Traffic-Volumen. Da die maximale Anzahl von Instanzen ein Limit pro Überarbeitung ist, kann die Gesamtzahl der Instanzen für den Dienst die maximale Anzahl an Instanzen pro Überarbeitung überschreiten. Dies ist in den Instanzanzahl-Messwerten zu sehen.

Inaktive Instanzen und Minimierung von Kaltstarts

Instanzen werden von Cloud Run nicht sofort heruntergefahren, wenn alle Anfragen verarbeitet wurden. Damit die Auswirkungen von Kaltstarts minimiert werden, kann Cloud Run einige Instanzen bis zu 15 Minuten inaktiv lassen. Diese Instanzen können bei plötzlichen Trafficspitzen Anfragen verarbeiten.

Wenn eine Instanz beispielsweise die Verarbeitung von Anfragen abgeschlossen hat, bleibt sie möglicherweise für einen bestimmten Zeitraum inaktiv, falls eine weitere Anfrage verarbeitet werden muss. Eine inaktive Instanz kann Ressourcen wie offene Datenbankverbindungen beibehalten. Beachten Sie, dass die CPU nur während der Anfrageverarbeitung zugewiesen wird, es sei denn, Sie konfigurieren den Dienst explizit so, dass die CPU dauerhaft zugewiesen wird.

Mit der Einstellung min-instance können Sie inaktive Instanzen dauerhaft verfügbar halten. Beachten Sie, dass die Verwendung dieses Features Kosten verursacht, auch wenn der Dienst keine Anfragen aktiv verarbeitet.

Autoscaling und ausstehende Anfragen

  • Wenn neue Instanzen gestartet werden, z. B. während einer horizontalen Skalierung, bleiben Anfragen mindestens für die durchschnittliche Startzeit von Containerinstanzen dieses Dienstes ausstehend. Dazu gehört, wenn die Anfrage eine horizontale Skalierung initiiert, z. B. bei einer Skalierung von null.
  • Wenn die Startzeit weniger als 10 Sekunden beträgt, bleiben Anfragen bis zu 10 Sekunden ausstehend.
  • Wenn keine Instanzen beim Start vorhanden sind und die Anfrage keine horizontale Skalierung initiiert, bleiben Anfragen bis zu 10 Sekunden lang ausstehend.

Auswirkungen des Autoscalings auf Sicherungsdienste

Wenn die Anzahl der Instanzen automatisch zunimmt, können beim Cloud Run-Dienst hinsichtlich der Sicherungsdienste Beschränkungen auftreten. Für Cloud SQL gilt beispielsweise ein API-Kontingentlimit. Achten Sie darauf, dass diese Sicherungsdienste ein ausreichendes Kontingent haben und Verbindungen von allen Instanzen Ihres Cloud Run-Dienstes verarbeiten können. Sie sollten eine maximale Anzahl von Instanzen festlegen, um eine Überlastung der Sicherungsdienste zu vermeiden.

Autoscaling und Pub/Sub

Google empfiehlt die Verwendung von Push-Abos, um Nachrichten aus einem Pub/Sub-Thema in Cloud Run zu verarbeiten. Push-Nachrichten werden wie HTTP-Anfragen vom Container empfangen, wodurch dasselbe Autoscaling-Verhalten ausgelöst wird.

Nächste Schritte