In Cloud Run wird jede Überarbeitung automatisch auf die Anzahl der Instanzen skaliert, die zum Verarbeiten aller eingehenden Anfragen erforderlich sind.
Wenn mehr Instanzen Anfragen verarbeiten, werden mehr CPUs und mehr Arbeitsspeicher benötigt, was zu höheren Kosten führt.
Für mehr Kontrolle bietet Cloud Run die Einstellung Maximale Anzahl gleichzeitiger Anfragen pro Instanz. Diese gibt die maximale Anzahl von Anfragen an, die von einer bestimmten Instanz gleichzeitig verarbeitet werden können.
Maximale Anzahl gleichzeitiger Anfragen pro Instanz
Sie haben die Möglichkeit, die maximale Anzahl gleichzeitiger Anfragen pro Instanz individuell festzulegen. Standardmäßig kann jede Cloud Run-Instanz bis zu 80 Anfragen gleichzeitig empfangen. Dieser Wert lässt sich auf maximal 1.000 erhöhen.
Sie sollten für die Gleichzeitigkeit zwar den Standardwert verwenden, können bei Bedarf aber die maximale Gleichzeitigkeit verringern. Wenn Ihr Code beispielsweise keine parallelen Anfragen verarbeiten kann, setzen Sie die Gleichzeitigkeit auf 1
.
Der angegebene Gleichzeitigkeitswert ist ein Maximalwert und Cloud Run sendet möglicherweise nicht so viele Anfragen an eine bestimmte Instanz, wenn die CPU der Instanz bereits stark ausgelastet ist.
Das folgende Diagramm zeigt, wie sich die Einstellung für die maximale Anzahl gleichzeitiger Anfragen pro Instanz auf die Anzahl der Instanzen auswirkt, die zur Bearbeitung eingehender gleichzeitiger Anfragen benötigt werden:
Wann Sie die Gleichzeitigkeit auf maximal eine Anfrage beschränken sollten.
Sie können die Gleichzeitigkeit beschränken, sodass an jede ausgeführte Instanz jeweils nur eine Anfrage gleichzeitig gesendet wird. Sie sollten dies in Fällen in Betracht ziehen, in denen Folgendes gilt:
- Für jede einzelne Anfrage wird der größte Teil der verfügbaren CPU benötigt bzw. des verfügbaren Arbeitsspeichers belegt.
- Ihr Container-Image ist nicht für die gleichzeitige Verarbeitung mehrerer Anfragen konzipiert, z. B. wenn Ihr Container auf den globalen Status angewiesen ist, der nicht von zwei Anfragen gemeinsam genutzt werden kann.
Eine Gleichzeitigkeit von 1
wirkt sich wahrscheinlich negativ auf die Skalierungsleistung aus, da bei einem sprunghaften Anstieg eingehender Anfragen viele Instanzen für deren Verarbeitung gestartet werden müssen.
Fallstudie
Die folgenden Messwerte zeigen einen Anwendungsfall, bei dem 400 Clients drei Anfragen pro Sekunde an einen Cloud Run-Dienst senden, für den die maximale Anzahl gleichzeitiger Anfragen pro Instanz auf 1 festgelegt ist. In der grünen oberen Zeile sind die Anfragen im Zeitablauf aufgeführt, in der unteren blauen Zeile ist die Anzahl der Instanzen angegeben, die mit der Verarbeitung der Anfragen begonnen haben.
Die folgenden Messwerte zeigen 400 Clients, die drei Anfragen pro Sekunde an einen Cloud Run-Dienst senden, für den die maximale Anzahl gleichzeitiger Anfragen pro Instanz auf 80 festgelegt ist. In der oberen grünen Zeile sind die Anfragen im Zeitablauf aufgeführt, in der unteren blauen Zeile ist die Anzahl der Instanzen angegeben, die mit der Verarbeitung der Anfragen begonnen haben. Beachten Sie, dass weit weniger Instanzen benötigt werden, um dasselbe Anfragevolumen zu verarbeiten.
Parallelität bei Quellcode-Bereitstellungen
Wenn die Nebenläufigkeit aktiviert ist, bietet Cloud Run keine Isolation zwischen gleichzeitigen Anfragen, die von derselben Instanz verarbeitet werden. In solchen Fällen müssen Sie dafür sorgen, dass Ihr Code problemlos gleichzeitig ausgeführt werden kann. Sie können dies ändern, indem Sie einen anderen Wert für die Parallelität festlegen. Wir empfehlen, mit einer niedrigen Nebenläufigkeit wie 8 zu beginnen und sie dann zu erhöhen. Wenn Sie mit einer zu hohen Nebenläufigkeit beginnen, kann dies aufgrund von Ressourceneinschränkungen wie Arbeitsspeicher oder CPU zu unerwünschtem Verhalten führen.
Auch die Laufzeitumgebung der Sprache kann sich auf die Parallelität auswirken. Einige dieser sprachspezifischen Auswirkungen sind in der folgenden Liste aufgeführt:
Node.js ist von Natur aus Single-Threaded. Um die Gleichzeitigkeit zu nutzen, verwenden Sie den asynchronen Codestil von JavaScript, der in Node.js idiomatisch ist. Weitere Informationen finden Sie in der offiziellen Node.js-Dokumentation unter Asynchrone Ablaufsteuerung.
Bei Python 3.8 und höher sind für die Unterstützung einer hohen Parallelität pro Instanz genügend Threads erforderlich, um die Parallelität zu verarbeiten. Wir empfehlen, eine Laufzeit-Umgebungsvariable festzulegen, damit der Wert für die Threads dem Wert für die Parallelität entspricht, z. B.:
THREADS=8
.
Nächste Schritte
Informationen zum Verwalten der maximalen Anzahl gleichzeitiger Anfragen pro Instanz Ihrer Cloud Run-Dienste finden Sie unter Maximale gleichzeitige Anfragen pro Instanz festlegen.
Informationen zum Optimieren der Einstellung der maximalen Anzahl gleichzeitiger Anfragen pro Instanz finden Sie unter Tipps für Entwickler: Gleichzeitigkeit optimieren.