Informationen zum Instanz-Autoscaling in Cloud Run-Diensten

Auf dieser Seite wird das Standardverhalten beim Autoscaling von Cloud Run beschrieben. Eine alternative Skalierungsoption, bei der Sie eine bestimmte Anzahl von Instanzen konfigurieren können, finden Sie unter Manuelle Skalierung.

Standardmäßig wird jede Cloud Run-Revision automatisch auf die Anzahl der Instanzen skaliert, die zum Verarbeiten eingehender Anfragen, Ereignisse oder der CPU-Auslastung erforderlich sind. Sie können dieses Skalierungsverhalten auch optimieren, indem Sie benutzerdefinierte CPU- und Auslastungsziele konfigurieren.

Wenn eine Überarbeitung keinen Traffic empfängt, wird sie standardmäßig auf null Instanzen herunterskaliert. Sie können diese Standardeinstellung ändern, um eine Instanz mithilfe der Einstellung Mindestinstanzen als inaktiv oder „einsatzbereit“ festzulegen. Wenn Ihr Dienst CPU-Ressourcen verwendet, auch wenn er keine Anfragen verarbeitet, sollten Sie die Mindestanzahl von Instanzen auf 1 festlegen.

Das Cloud Run-Autoscaling wertet die folgenden Messwerte regelmäßig aus, um die Anzahl der Instanzen zu ermitteln, die zum Verarbeiten des Traffics erforderlich sind:

  • CPU- und Nebenläufigkeitsauslastung: Cloud Run passt die Anzahl der Instanzen an, um die durchschnittliche CPU- und Nebenläufigkeitsauslastung innerhalb der Zielschwellenwerte zu halten.

  • Instanzlimits: Cloud Run begrenzt die Anzahl der Instanzen zwischen den von Ihnen konfigurierten maximalen und minimalen Limits.

Verhalten des horizontalen Autoscalings von Diensten

Cloud Run bietet zwei Autoscaling-Mechanismen: metrikbasiertes Scaling und On-Demand-Scaling. Damit wird die Anzahl der Instanzen ermittelt, die zum Verarbeiten von Traffic erforderlich sind.

Messwertbasierte Skalierung

Bei der messwertbasierten Skalierung wird die Anzahl der Instanzen automatisch an die durchschnittliche CPU-Auslastung und die durchschnittliche Nebenläufigkeit von Anfragen angepasst, um eine stabile Bereitstellungskapazität für Ihren Cloud Run-Dienst zu gewährleisten.

Das Autoscaling bestimmt eine empfohlene Anzahl von Instanzen basierend auf der maximalen Anzahl von Instanzen, die es für jeden der folgenden Skalierungstreiber unabhängig berechnet:

  • CPU-Auslastung: Die Anzahl der Instanzen wird berechnet, indem die CPU-Nutzung pro Sekunde über einen Zeitraum von einer Minute gemittelt und durch die Anzahl der CPUs pro Instanz dividiert wird. Dieses Ergebnis wird durch das CPU-Ziel geteilt.

  • Nebenläufigkeit von Anfragen: Die Anzahl der Instanzen wird berechnet, indem die Nebenläufigkeit von Anfragen pro Sekunde über einen Zeitraum von 1 Minute und 10 Minuten gemittelt und durch die maximale Nebenläufigkeit geteilt wird. Dieses Ergebnis wird weiter durch das Ziel für die Nebenläufigkeit von Anfragen unterteilt.

Für jede Dienstversion können Sie die Anzahl der CPUs pro Instanz und die maximale Nebenläufigkeit konfigurieren.

Cloud Run unterstützt keine Skalierung basierend auf der Arbeitsspeichernutzung.

Standardmäßig wird bei der messwertbasierten Skalierung ein Schwellenwert von 60 % für die CPU-Auslastung und die Ziele für die gleichzeitige Verarbeitung von Anfragen festgelegt. Sie können Skalierungssteuerungen (Vorabversion) aktivieren, um benutzerdefinierte CPU- oder Parallelitätsziele anzugeben.

Wenn Cloud Run basierend auf der CPU-Auslastung skaliert wird, wird die durchschnittliche CPU-Auslastung aller CPUs berücksichtigt, die einer Instanz zugewiesen sind. Wenn Ihre Anwendung Single-Threaded ist, aber auf einer Instanz mit mehreren CPUs bereitgestellt wird, kann dies zu einer niedrigen durchschnittlichen Auslastung führen, was sich möglicherweise auf die CPU-basierte Skalierung auswirkt. Weitere Informationen zum Optimieren der CPU-Konfiguration für die Architektur Ihrer Anwendung finden Sie unter CPU-Limits konfigurieren und Maximale Anzahl gleichzeitiger Anfragen pro Instanz festlegen.

Hochskalieren

Cloud Run erhöht die Anzahl der Instanzen basierend auf dem Skalierungstreiber, der mehr Instanzen erfordert. Um zu verhindern, dass Instanzen bei geringfügigen Änderungen des Traffics schnell gestartet und beendet werden, wartet der Autoscaler, bis die Auslastung etwa 90% der Kapazität erreicht, bevor er die Anzahl der Instanzen erhöht.

Sie können die Skalierungssteuerung (Vorabversion) aktivieren, um zu einem Autoscaling-Modell mit höherer Präzision zu wechseln. In diesem Modell reagiert das messwertbasierte Autoscaling von Cloud Run auch bei Diensten mit einer geringen Anzahl von Instanzen genau auf die von Ihnen konfigurierten Ziele. Wenn sich Ihr Dienst um mehr als den Toleranzschwellenwert von 10 % von Ihren benutzerdefinierten Zielkonfigurationen unterscheidet, empfiehlt Cloud Run die erforderliche Anzahl von Instanzen, um den Skalierungstreiber, der die Skalierung auslöst, unter das Ziel zu bringen.

Herunterskalieren

Durch das Autoscaling von Cloud Run wird die Anzahl der ausgeführten Instanzen reduziert, wenn sie nicht mehr benötigt werden, um eingehenden Traffic zu verarbeiten. Bei der messwertbasierten Skalierung wird die Anzahl der empfohlenen Instanzen basierend auf der Auslastung kontinuierlich angepasst.

Wenn die durchschnittliche CPU-Auslastung oder die durchschnittliche Anzahl aktiver Anfragen sinkt, reduziert der Skalierungsalgorithmus die empfohlene Anzahl von Instanzen. Der Cloud Run-Load-Balancer für Anfragen berücksichtigt diese Empfehlungen, indem er eingehende Anfragen vorzugsweise zuerst an die empfohlenen Instanzen weiterleitet. Dadurch sind empfohlene Instanzen stärker ausgelastet und andere Instanzen können in den Leerlauf gehen. Cloud Run reduziert die Anzahl dieser nicht empfohlenen Instanzen, indem sie weniger priorisiert werden. Sie empfangen nur dann Traffic, wenn alle empfohlenen Instanzen ausgelastet sind. Um die Stabilität zu gewährleisten, werden die priorisierten Instanzen in Cloud Run in der folgenden Reihenfolge heruntergefahren:

  1. Cloud Run fährt eine Gruppe von Instanzen herunter, wenn ihre Auslastung über ein Zeitfenster von einer Minute weniger als 10 % beträgt.
  2. Eine zweite Gruppe von Instanzen wird bis zu einem Leerlauftimeout von 15 Minuten ausgeführt. So ist bei einem plötzlichen Traffic-Anstieg immer Kapazität verfügbar.

On-Demand-Skalierung

Cloud Run verwendet die On-Demand-Skalierung, wenn keine verfügbare Instanz zum Bearbeiten der eingehenden Anfrage gefunden werden kann. Die On-Demand-Skalierung reagiert in Echtzeit auf Änderungen des eingehenden Traffics für eine Cloud Run-Revision oder auf Änderungen der Latenz der Revision. Durch diese Skalierung soll sichergestellt werden, dass jede eingehende Anfrage in kurzer Zeit an eine Instanz weitergeleitet wird. Sie ist der einzige Faktor für die Skalierung von null.

Da die On-Demand-Skalierung in Echtzeit auf plötzliche Änderungen des Traffics reagiert, verwaltet Cloud Run den Kompromiss zwischen der Kaltstartlatenz (der Zeit, die zum Starten einer neuen Instanz benötigt wird) und der Latenz der ausstehenden Warteschlange (der Zeit, die eine Anfrage auf einen freien Slot in einer vorhandenen Instanz wartet). Bei jeder Anfrage ermittelt das System, ob das Einreihen in die Warteschlange für eine bevorstehende Instanz oder eine vorhandene Instanz schneller ist (in dieser Reihenfolge), bevor versucht wird, eine neue On-Demand-Instanz zu starten. Eine Anfrage verbleibt maximal 10 Sekunden oder 3,5-mal so lange wie die vorhergesagte Kaltstartzeit (je nachdem, welcher Wert höher ist) in der Warteschlange für ausstehende Anfragen, bevor das System eine neue On-Demand-Instanz auslöst.

Adaptive Optimierung der Nebenläufigkeit (Adaptive Concurrency Tuning, ACT)

Cloud Run verwendet die adaptive Optimierung der Nebenläufigkeit (Adaptive Concurrency Tuning, ACT), um zu verhindern, dass die CPU-Drosselung zu einer hohen Anfragelatenz führt. Bei diesem Ansatz wird die CPU-Auslastung für jede Instanz bei einer bestimmten Anzahl von Anfragen gemessen und der Wert für die maximale Anzahl gleichzeitiger Anfragen der Instanz dynamisch angepasst, um die CPU-Auslastung unter 90 % zu halten. ACT passt die Nebenläufigkeit basierend auf den folgenden Szenarien an:

  • Jedes Mal, wenn die CPU-Auslastung in der letzten Sekunde 90 % überschreitet, verringert ACT die maximale Anzahl gleichzeitiger Anfragen der Instanz um 1.

  • Wenn die Instanz ihr Limit für maximale gleichzeitige Anfragen erreicht und die CPU-Auslastung eine Sekunde lang unter 70% bleibt, erhöht ACT das Limit für maximale gleichzeitige Anfragen für die Instanz um 1.

  • Wenn Ihre Skalierungsmesswerte zeigen, dass die Parallelität nie das konfigurierte Maximum erreicht, liegt das möglicherweise daran, dass ACT das tatsächliche Maximum dynamisch gesenkt hat, um die Instanzleistung zu schützen.

Cloud Run berechnet ACT-Werte für jede Bereitstellung. Diese Messwerte bleiben nicht über Bereitstellungen hinweg erhalten. Wenn ACT die Nebenläufigkeit unter das bevorzugte Niveau senkt, erhöhen Sie die CPU, die pro maximaler gleichzeitiger Anfrage zugewiesen wird. Auch Hintergrundaufgaben, die periodische CPU-Spitzen verursachen, können diesen Skalierungsansatz beeinträchtigen. ACT-Messwerte sind nicht sichtbar.

Instanzbasierte Abrechnung und Autoscaling

Wenn Sie die instanzbasierte Abrechnung für Ihren Cloud Run-Dienst konfigurieren, sollten Sie die Skalierung nach und ab null berücksichtigen.

Skalierung ab null: 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 die Mindestanzahl von Instanzen auf > 0 festlegen oder eine Aufforderung zum Aufwachen in Ihrem Design einschließen, um die Verarbeitung nach der Skalierung auf null neu zu starten.

Skalierung auf null: 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 für Dienste

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.

Allen Diensten wird standardmäßig ein Limit für die maximale Anzahl von Instanzen zugewiesen, auch wenn Sie kein eigenes Limit angeben. Legen Sie dieses Limit fest und behalten Sie es im Blick, um das Skalierungsverhalten und die mit Ihrem Dienst verbundenen Kosten zu bestimmen. Weitere Informationen finden Sie unter Maximale Anzahl von Instanzen.

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:

Anfragen bleiben bis zum 3,5-Fachen der durchschnittlichen Startzeit von Containerinstanzen dieses Dienstes oder bis zu 10 Sekunden ausstehend, je nachdem, welcher Wert größer ist.

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 bedeutet, dass die Anzahl der Instanzen für diese Überarbeitung das Maximum nicht überschreiten sollte.

Unter normalen Umständen kann Cloud Run sehr schnell horizontal auf das maximale Instanzlimit skaliert werden, um alle eingehenden Anfragen oder Ereignisse zu verarbeiten. Das Festlegen eines hohen Limits bedeutet jedoch nicht, dass Ihre Überarbeitung jederzeit auf die angegebene Anzahl von Instanzen horizontal skaliert werden kann. Unter außergewöhnlichen Umständen kann Cloud Run die Skalierung drosseln, um einen fehlerfreien Dienst für alle Kunden zu gewährleisten.

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 100 % des Traffics verarbeitet, startet Cloud Run genügend Instanzen der neuen Überarbeitung, bevor der Traffic an sie weitergeleitet wird. Dadurch werden die Auswirkungen von Bereitstellungen neuer Überarbeitungen auf die Anfragelatenzen reduziert, insbesondere bei der Bereitstellung großer Mengen an Traffic. 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

Um Kaltstarts zu minimieren, kann Cloud Run Instanzen nach Abschluss der Verarbeitung von Anfragen für einen bestimmten Zeitraum inaktiv lassen (bis zu 15 Minuten oder 10 Minuten für GPUs).

Eine inaktive Instanz kann Ressourcen wie offene Datenbankverbindungen beibehalten. Die Standardabrechnungseinstellung ist die anfragebasierte Abrechnung, es sei denn, Sie konfigurieren den Dienst explizit so, dass die instanzbasierte Abrechnung verwendet 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

Anfragen bleiben bis zum 3,5-Fachen der durchschnittlichen Startzeit von Containerinstanzen dieses Dienstes oder bis zu 10 Sekunden ausstehend, je nachdem, welcher Wert größer ist.

Auswirkungen von Autoscaling auf Backing Services

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 vom Container wie HTTP-Anfragen empfangen und lösen daher dasselbe Autoscaling-Verhalten aus.

Autoscaling und mehrere Container (Sidecars)

Bei Cloud Run wird die CPU-Auslastung von Instanzen für das Autoscaling berücksichtigt. Die CPU-Auslastung einer Instanz ist der Prozentsatz der zugewiesenen CPU, die verwendet wird.

Beachten Sie, dass Sie CPU zuweisen, wenn Sie CPU-Limits auf Containerebene festlegen. Wenn Sie mehrere Container pro Instanz verwenden, ist die tatsächliche CPU-Zuweisung für diese Instanz die Summe der CPU-Limits, die Sie für jeden Container festlegen.

Nächste Schritte