Beim Cloud Run-Autoscaling wird die Anzahl der Containerinstanzen für jede Dienstversion an eingehende Anfragen, Ereignisse und die CPU-Auslastung angepasst. Durch das Skalieren von Instanzen nach Bedarf kann Ihr Dienst Traffic-Spitzen bewältigen und im inaktiven Zustand auf null skaliert werden, um die Kosten zu senken.
Sie können die Autoscaling-Grenzwerte optimieren, indem Sie benutzerdefinierte CPU- und Gleichzeitigkeitsziele konfigurieren und minimale und maximale Instanzlimits festlegen. Wenn Ihr Dienst die CPU außerhalb der Anfrageverarbeitung verwendet, legen Sie die Mindestanzahl von Instanzen auf mindestens 1 fest. Informationen zum Ausführen einer festen Anzahl von Instanzen finden Sie unter Manuelle Skalierung.
Verhalten des horizontalen Autoscalings von Diensten
Cloud Run bietet zwei Autoscaling-Mechanismen, um die Anzahl der Instanzen zu bestimmen, die für die Verarbeitung von Traffic erforderlich sind: messwertbasiertes Scaling und On-Demand-Scaling.
Messwertbasierte Skalierung
Beim messwertbasierten Skalieren wird die Anzahl der Instanzen automatisch anhand der durchschnittlichen CPU-Auslastung und der durchschnittlichen Nebenläufigkeit von Anfragen angepasst, um eine stabile Bereitstellungskapazität für Ihren Cloud Run-Dienst zu gewährleisten.
Das Autoscaling ermittelt eine empfohlene Anzahl von Instanzen anhand der maximalen Anzahl von Instanzen, die es für jeden der folgenden Skalierungstreiber unabhängig berechnet:
- CPU-Auslastung: Berechnet die Anzahl der Instanzen, indem die CPU-Nutzung pro Sekunde über einen Zeitraum von einer Minute gemittelt und durch die Anzahl der CPUs pro Instanz geteilt wird. Dieses Ergebnis wird weiter durch das CPU-Ziel geteilt. Diese Berechnung wird durch die folgende Gleichung definiert:
\[ \text{Instances} = \left\lceil \dfrac{\left( \frac{\text{Average CPU usage per second over the past minute}}{\text{Number of CPUs per instance}} \right)}{\text{CPU target}} \right\rceil \]
- Nebenläufigkeit von Anfragen: Berechnet die Anzahl der Instanzen, 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 geteilt. Diese Berechnung wird durch die folgende Gleichung definiert:
\[ \text{Instances} = \left\lceil \dfrac{\left( \frac{\max(\text{average concurrent requests over 1 minute, 10 minutes})}{\text{Maximum concurrency}} \right)}{\text{Concurrency target}} \right\rceil \]
- ACT (Adaptive Concurrency Tuning): Berechnet die empfohlene Anzahl von Instanzen für die durchschnittliche Nebenläufigkeit von Anfragen pro Minute. Bei dieser Methode wird der ACT-Wert jeder Instanz als Anfrage-Gleichzeitigkeitskapazität der Instanz verwendet, anstatt der konfigurierten maximalen Anzahl gleichzeitiger Anfragen. ACT reduziert die Nebenläufigkeit dynamisch um 1 in 1-Sekunden-Intervallen, wenn die CPU-Auslastung 90 % überschreitet. Weitere Informationen finden Sie unter Adaptive Concurrency Tuning (ACT).
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 Arbeitsspeicherauslastung.
Standardmäßig wird bei der messwertbasierten Skalierung ein Schwellenwert von 60 % für die CPU-Auslastung und die Ziele für die Nebenläufigkeit von Anfragen festgelegt. Mit Skalierungseinstellungen können Sie benutzerdefinierte CPU- oder Gleichzeitigkeitsziele festlegen.
Wenn Cloud Run basierend auf der CPU-Auslastung skaliert, wird die durchschnittliche CPU-Auslastung aller einer Instanz zugewiesenen CPUs berücksichtigt. Wenn Ihre Anwendung Single-Threaded ist, aber auf einer Instanz mit mehreren CPUs bereitgestellt wird, kann dies zu einem niedrigen durchschnittlichen Auslastungswert führen, was sich möglicherweise auf die CPU-basierten Skalierungsentscheidungen auswirkt. Weitere Informationen zur Optimierung 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. Bei einer geringen Anzahl von Instanzen reagiert die messwertbasierte Skalierung eng auf Ihre Auslastungsziele.
Bei der messwertbasierten Skalierung wird die aktuelle Instanzanzahl beibehalten, solange die Auslastung innerhalb einer Toleranz von 10 % Ihres Ziels liegt, bezogen auf das Ziel. Beispiel: Bei einem Standardziel von 60 % ändert sich die Anzahl der Instanzen nicht, solange die Auslastung zwischen 54 % und 66 % liegt.
Wenn die Auslastung außerhalb dieses Bereichs liegt, wird die Anzahl der Instanzen bei der messwertbasierten Skalierung anhand der gemessenen Nutzung und Ihres Ziels neu berechnet, nicht anhand der Anzahl der ausgeführten Instanzen. Das Ergebnis wird auf die nächste ganze Instanz aufgerundet. Aufgrund dieser Rundung kann Ihr Dienst hochskaliert werden, während die Auslastung noch unter Ihrem Zielwert liegt. Beispiel: Ein Dienst, der 4,1 Instanzen benötigt, um das Ziel zu erreichen, führt 5 Instanzen aus.
Herunterskalieren
Durch das Autoscaling von Cloud Run wird die Anzahl der ausgeführten Instanzen reduziert, wenn sie nicht mehr für die Verarbeitung des eingehenden Traffics benötigt werden. Bei der messwertbasierten Skalierung wird die Anzahl der empfohlenen Instanzen kontinuierlich an die Auslastung angepasst. Cloud Run reduziert die empfohlene Instanzanzahl nur, wenn die Auslastung mehr als 10 % unter das Ziel fällt. Anschließend wird die neue Anzahl mit derselben aufgerundeten Berechnung ermittelt.
Wenn die durchschnittliche CPU-Auslastung oder die durchschnittliche Anzahl aktiver Anfragen sinkt, reduziert der Skalierungsalgorithmus die empfohlene Anzahl von Instanzen. Der Load Balancer für Cloud Run-Anfragen berücksichtigt diese Empfehlungen, indem er eingehende Anfragen bevorzugt an die empfohlenen Instanzen weiterleitet. Dadurch werden empfohlene Instanzen stärker ausgelastet und andere Instanzen können in den inaktiven Zustand versetzt werden. Cloud Run reduziert die Anzahl dieser nicht empfohlenen Instanzen, indem sie depriorisiert werden, sodass sie nur Traffic erhalten, wenn alle empfohlenen Instanzen ausgelastet sind. Um die Stabilität zu gewährleisten, fährt Cloud Run die depriorisierten Instanzen in der folgenden Reihenfolge herunter:
- Cloud Run fährt eine Gruppe von Instanzen herunter, wenn ihre Auslastung über ein Zeitfenster von einer Minute weniger als 10 % beträgt.
- Eine zweite Gruppe von Instanzen bleibt aktiv, bis ein 15-minütiges Inaktivitäts-Zeitlimit erreicht ist. So ist bei einem plötzlichen Traffic-Anstieg Kapazität verfügbar.
Wenn Ihr Dienst auch dann andere Aufgaben ausführt, wenn er keine Anfragen verarbeitet, z. B. Hintergrundthreads ausführt oder asynchrone Aufgaben verarbeitet, sollten Sie die Mindestanzahl von Instanzen auf mindestens 1 festlegen, damit die CPU für die Hintergrundverarbeitung zugewiesen bleibt.
On-Demand-Skalierung
Cloud Run verwendet die On-Demand-Skalierung, wenn keine verfügbare Instanz zum Verarbeiten der eingehenden Anfrage gefunden wird. Die On-Demand-Skalierung reagiert in Echtzeit auf Änderungen des eingehenden Traffics für eine Cloud Run-Überarbeitung oder auf Änderungen der Latenz der Überarbeitung. Durch diese Skalierung wird versucht, jede eingehende Anfrage innerhalb kurzer Zeit an eine Instanz weiterzuleiten. Die On-Demand-Skalierung ist der einzige Treiber für die Skalierung ab null. Beim Skalieren von N Instanzen wird der Traffic jedoch entweder durch messwertbasierte oder On-Demand-Skalierung verarbeitet, je nachdem, was zuerst ausgelöst wird.
Da die On-Demand-Skalierung in Echtzeit auf plötzliche Traffic-Änderungen reagiert, verwaltet Cloud Run den Kompromiss zwischen der Kaltstartlatenz (die Zeit, die zum Starten einer neuen Instanz benötigt wird) und der Latenz der ausstehenden Warteschlange (die Zeit, die eine Anfrage auf einen freien Slot in einer vorhandenen Instanz wartet). Für jede Anfrage ermittelt das System, ob das Einreihen in die Warteschlange für eine anstehende Instanz oder eine vorhandene Instanz schneller ist (in dieser Reihenfolge), bevor versucht wird, eine neue On-Demand-Instanz zu starten. Eine Anfrage bleibt maximal 10 Sekunden oder das 3,5-Fache der vorhergesagten Kaltstartzeit (je nachdem, welcher Wert höher ist) in der Warteschlange, bevor das System eine neue On-Demand-Instanz auslöst.
Adaptive Concurrency Tuning (ACT)
Cloud Run verwendet die adaptive Gleichzeitigkeitsabstimmung (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 maximalen gleichzeitigen Anfragen der Instanz dynamisch angepasst, um die CPU-Auslastung unter 90 % zu halten. ACT optimiert die Nebenläufigkeit basierend auf den folgenden Szenarien:
Jedes Mal, wenn die CPU-Auslastung in der letzten Sekunde 90 % überschreitet, senkt ACT die maximale Anzahl gleichzeitiger Anfragen der Instanz um 1.
Wenn die Instanz das Limit für die maximale Anzahl gleichzeitiger Anfragen erreicht und die CPU-Auslastung 1 Sekunde lang unter 70 % bleibt, erhöht ACT die maximale Anzahl gleichzeitiger Anfragen für die Instanz um 1.
Wenn Ihre Skalierungsmesswerte zeigen, dass die Nebenläufigkeit 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 die 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. Hintergrundaufgaben, die regelmäßige CPU-Spitzen verursachen, können diesen Skalierungsansatz ebenfalls beeinträchtigen.
Sie können in der Google Cloud Console im Feld scaling_driver sehen, wann ACT aktiv für das Autoscaling verwendet wird. Weitere Informationen zum Aufrufen dieses Messwerts finden Sie unter Benutzerdefinierte Skalierungseinstellungen für Dienste konfigurieren.
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 überwachen Sie es, um das Skalierungsverhalten und die mit Ihrem Dienst verbundenen Kosten zu ermitteln. Weitere Informationen finden Sie unter Limits für maximale 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 10 Sekunden lang 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 neuen Versionsbereitstellungen auf die Anfragelatenzen reduziert, insbesondere bei hohem 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 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 für die instanzbasierte Abrechnung.
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 10 Sekunden lang ausstehend, je nachdem, welcher Wert größer ist.
Auswirkungen des Autoscalings auf unterstützende Dienste
Wenn die Anzahl der Instanzen automatisch zunimmt, können beim Cloud Run-Dienst hinsichtlich der unterstützenden Dienste Beschränkungen auftreten. Für Cloud SQL gilt beispielsweise ein API-Kontingentlimit. Achten Sie darauf, dass diese unterstützenden Dienste 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 unterstützenden Dienste 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 festgelegt haben.
Nächste Schritte
- Informationen zum Konfigurieren benutzerdefinierter Auslastungsziele oder zum Deaktivieren von Skalierungstreibern finden Sie unter Benutzerdefinierte Skalierungseinstellungen konfigurieren.
- Weitere Informationen zu anderen Skalierungsoptionen finden Sie unter Manuelle Skalierung.
- Informationen zum Verwalten der maximalen Anzahl von Instanzen Ihrer Cloud Run-Dienste finden Sie unter Maximale Anzahl von Instanzen festlegen.
- Informationen zum Verwalten der maximalen Anzahl gleichzeitiger Anfragen, die von jeder Instanz verarbeitet werden, finden Sie unter Gleichzeitigkeit festlegen.
- Informationen zum Optimieren der Gleichzeitigkeitseinstellung finden Sie unter Tipps für Entwickler: Gleichzeitigkeit optimieren.
- Wenn Sie festlegen möchten, dass eine inaktive Instanz dauerhaft ausgeführt wird, um damit Latenz oder Kaltstarts bei ersten Anfragen zu minimieren, lesen Sie den Abschnitt Inaktive Instanzen mithilfe von
min-instanceaktivieren.