Python 2 wird von der Community nicht mehr unterstützt. Wir empfehlen die Migration von Python 2-Anwendungen zu Python 3.

Instanzverwaltung

Instanzen sind die Grundbausteine von App Engine. Sie stellen alle Ressourcen bereit, die für ein erfolgreiches Hosting Ihrer Anwendung erforderlich sind. Die Ausführung der Anwendung kann zu jeder Zeit auf einer oder mehreren Instanzen erfolgen. Im letzteren Fall werden Anfragen auf alle Instanzen verteilt. Jede Instanz beinhaltet eine Sicherheitsebene, die dafür sorgt, dass die Instanzen sich nicht versehentlich gegenseitig beeinträchtigen.

App Engine kann Instanzen bei Trafficschwankungen automatisch erstellen und herunterfahren. Alternativ können Sie eine Anzahl an Instanzen angeben, die unabhängig von der Trafficmenge ausgeführt werden sollen. Um festzulegen, wie und wann neue Instanzen erstellt werden, geben Sie für Ihre Anwendung den entsprechenden Skalierungstyp an.

Skalierungstypen

App Engine unterstützt die im Folgenden aufgeführten Skalierungstypen. Diese steuern, wie und wann Instanzen erstellt werden:

  • Automatisch
  • Einfach
  • Manuell

Den Skalierungstyp müssen Sie in der Datei app.yaml Ihrer Anwendung festlegen.

Autoscaling
Beim Autoscaling werden Instanzen auf der Grundlage von Anfragerate, Antwortlatenz und anderen Anwendungsmesswerten erstellt. Sie können für jeden dieser Messwerte Schwellenwerte sowie die Mindestanzahl an Instanzen angeben, die immer ausgeführt werden sollen.
Einfache Skalierung
Bei der einfachen Skalierung werden Instanzen erstellt, wenn die Anwendung Anfragen empfängt. Die jeweilige Instanz wird wieder heruntergefahren, wenn die Anwendung inaktiv wird. Die einfache Skalierung ist ideal für periodische oder durch Nutzeraktivität gesteuerte Aufgaben.
Manuelle Skalierung
Bei der manuellen Skalierung wird die Anzahl der Instanzen festgelegt, die unabhängig von der Arbeitslast kontinuierlich ausgeführt werden. Dadurch sind Aufgaben wie z. B. komplexe Initialisierungen und Anwendungen möglich, die im Zeitverlauf vom Speicherstatus abhängig sind.
Die folgende Tabelle vergleicht die Leistungsmerkmale der drei Skalierungstypen:

Option Automatische Skalierung Einfache Skalierung Manuelle Skalierung
Zeitlimit für Anfragen 10 Minuten für HTTP-Anfragen und Aufgaben in Aufgabenwarteschlangen (1 Minute in den Java 8-, PHP 5- und Python 2-Laufzeiten). Wenn die Anwendung innerhalb dieses Zeitlimits keine Antwort zurückgibt, unterbricht App Engine den Anfrage-Handler und gibt einen Fehler aus, der von Ihrem Code verarbeitet werden muss. 24 Stunden für HTTP-Anfragen und Aufgaben in Aufgabenwarteschlangen. Wenn die Anwendung innerhalb dieses Zeitlimits keine Antwort zurückgibt, unterbricht App Engine den Anfrage-Handler und gibt einen Fehler aus, der von Ihrem Code verarbeitet werden muss.

Eine einfach skalierte Instanz kann über viele Stunden hinweg /_ah/start zur Ausführung eines Programms oder Skripts verwenden, ohne einen HTTP-Antwortcode zurückzugeben.

Wie bei der einfachen Skalierung.
Hintergrundthreads Nicht zulässig Zulässig Zulässig
Residenz Instanzen werden basierend auf Nutzungsmustern heruntergefahren. Instanzen werden basierend auf dem Parameter idle_timeout heruntergefahren. Ist eine Instanz länger als idle_timeout inaktiv, etwa weil keine Anfrage eingegangen ist, wird die Instanz heruntergefahren. Instanzen bleiben im Speicher und der Status bleibt für alle Anfragen erhalten. Werden Instanzen neu gestartet, wird eine /_ah/stop-Anfrage in den Logs dokumentiert. Gibt es einen registrierten Shutdown-Hook, verbleiben vor dem Herunterfahren 30 Sekunden für die Ausführung.
Starten und Herunterfahren Instanzen werden zur Verarbeitung von Anfragen nach Bedarf erstellt. Bei Inaktivität werden sie automatisch heruntergefahren. Instanzen werden nach Bedarf zur Verarbeitung von Anfragen erstellt. Bei Inaktivität werden sie basierend auf dem Konfigurationsparameter idle_timeout automatisch heruntergefahren. Wenn Sie eine Instanz manuell beenden, können auf dieser noch 30 Sekunden lang Anfragen verarbeitet werden, bevor die Instanz automatisch beendet wird. Den Instanzen wird von App Engine automatisch eine Startanfrage in Form einer leeren GET-Anfrage an /_ah/start gesendet. Wie bei der einfachen Skalierung kann eine Instanz, die manuell beendet wird, noch 30 Sekunden lang Anfragen verarbeiten, bevor sie zwangsweise beendet wird.
Instanzadressierung Instanzen sind anonym. Die Instanz "i" der Version "v" des Dienstes "s" kann unter der folgenden URL adressiert werden: https://i-dot-v-dot-s-dot-app_id.REGION_ID.r.appspot.com. Wurde für eine benutzerdefinierte Domain eine Platzhalterzuordnung für Subdomains eingerichtet, kann ein Dienst oder eine seiner Instanzen auch über eine URL im Format https://s.domain.com oder https://i.s.domain.com adressiert werden. Sie können den Status jeder Instanz zuverlässig im Cache speichern und in nachfolgenden Anfragen abrufen. Wie bei der einfachen Skalierung.
Skalieren Die Anzahl der Instanzen wird von App Engine je nach Verarbeitungsvolumen automatisch skaliert. Bei der Skalierung werden die Einstellungen für automatic_scaling berücksichtigt, die pro Version in der Konfigurationsdatei bereitgestellt werden. Für einen Dienst mit einfacher Skalierung wird die maximale Anzahl der Instanzen im Parameter max_instances der Einstellung basic_scaling festgelegt. Die Anzahl der aktiven Instanzen skaliert mit dem Verarbeitungsvolumen. Die Anzahl der Instanzen für eine Version wird in der entsprechenden Konfigurationsdatei des Dienstes festgelegt. Die Anzahl der Instanzen entspricht in der Regel der Größe eines im Speicher verbliebenen Datasets oder dem gewünschten Durchsatz für Offline-Arbeiten. Mit der set_num_instances-Funktion der Modules API können Sie die Anzahl der Instanzen einer manuell skalierten Version sehr schnell anpassen, ohne laufende Instanzen zu stoppen.

Dynamische Instanzen skalieren

App Engine-Anwendungen mit einfacher Skalierung oder Autoscaling können je nach Umfang der eingehenden Anfragen von einer beliebigen Anzahl dynamischer Instanzen ausgeführt werden. Steigt die Anzahl der Anfragen für Ihre Anwendung, kann auch die Zahl der dynamischen Instanzen erhöht werden.

Anwendungen mit einfacher Skalierung

Wenn Sie die einfache Skalierung verwenden, versucht App Engine, Ihre Kosten niedrig zu halten, auch wenn dies zu einer höheren Latenz führen kann, wenn das Volumen eingehender Anfragen zunimmt.

Wenn keine der vorhandenen Instanzen zum Bearbeiten einer eingehenden Anfrage verfügbar ist, startet App Engine eine neue Instanz. Auch nach dem Starten einer neuen Instanz müssen möglicherweise einige Anfragen in die Warteschlange gestellt werden, bis die neue Instanz den Startvorgang abgeschlossen hat. Wenn die geringstmögliche Latenz erforderlich ist, sollten Sie Autoscaling in Betracht ziehen, bei dem neue Instanzen vorzeitig erstellt werden, um die Latenz zu minimieren.

Anwendungen mit Autoscaling

Wenn Sie Autoscaling verwenden, verfügt jede Instanz in Ihrer Anwendung über eine eigene Warteschlange für eingehende Anfragen. Bevor die Warteschlangen zu lang werden und die Latenz Ihrer Anwendung spürbar beeinflussen, erstellt App Engine automatisch eine oder mehrere neue Instanzen, um die zunehmende Auslastung zu bewältigen.

Sie können die Einstellungen für das Autoscaling konfigurieren, um einen Kompromiss zwischen der gewünschten Leistung und den anfallenden Kosten zu erzielen. In der folgenden Tabelle werden diese Einstellungen beschrieben.

Einstellungen für Autoscaling Beschreibung
CPU-Zielauslastung Legt den Schwellenwert für die CPU-Auslastung fest. Wenn die CPU-Nutzung diesen Schwellenwert überschreitet, werden mehr Instanzen zur Verarbeitung des Traffics gestartet.
Zieldurchsatz – Auslastung Legt den Durchsatz-Schwellenwert für die Anzahl von gleichzeitigen Anfragen fest, ab dem mehr Instanzen zur Verarbeitung des Traffics gestartet werden.
Maximale Anzahl gleichzeitiger Abfragen Legt die maximale Anzahl gleichzeitiger Anfragen fest, die eine Instanz annehmen kann, bevor der Planer eine neue Instanz erzeugt.

Im Video zu den neuen Planereinstellungen von App Engine sehen Sie die Auswirkungen dieser Einstellungen.

Herunterskalieren

Wenn die Anzahl der Anfragen abnimmt, reduziert App Engine die Anzahl der Instanzen. Diese Skalierung nach unten trägt dazu bei, dass alle laufenden Instanzen Ihrer Anwendung so effizient und kostengünstig wie möglich genutzt werden.

Wenn eine Anwendung überhaupt nicht verwendet wird, deaktiviert App Engine die zugehörigen dynamischen Instanzen, lädt sie jedoch sofort wieder, sobald sie benötigt werden. Durch das wiederholte Laden der Instanzen können auch Anfragen geladen und die Latenz für Nutzer erhöht werden.

Sie können eine Mindestanzahl von inaktiven Instanzen festlegen. Wenn Sie basierend auf dem Anfrageaufkommen eine geeignete Anzahl von inaktiven Instanzen für Ihre Anwendung festlegen, kann jede Anfrage mit geringer Latenz ausgeführt werden, die nur bei einer ungewöhnlich hohen Anzahl von Anfragen zunimmt.

Skalierung und Anfragen in Batches

Wenn Sie Anfragen in Batches an Ihre Dienste senden, z. B. zur Verarbeitung an eine Aufgabenwarteschlange, wird schnell eine große Anzahl von Instanzen erstellt. Zur Steuerung dieses Vorgangs sollten Sie die Rate der pro Sekunde gesendeten Anfragen möglichst begrenzen. Wenn Sie beispielsweise "Tasks" verwenden, können Sie die Rate steuern, mit der Aufgaben per Push übertragen werden.

Lebenszyklus von Instanzen

Instanzstatus

Die Instanz eines automatisch skalierten Dienstes wird immer ausgeführt. Die Instanz eines manuellen oder einfachen skalierten Dienstes dagegen kann auch gestoppt werden. Alle Instanzen eines Dienstes und einer Version haben denselben Status. Sie können den Status der Instanzen durch Verwaltung der Versionen ändern. Sie haben folgende Möglichkeiten:

Starten

Jede Dienstinstanz wird als Reaktion auf eine Startanfrage erstellt, bei der es sich um eine leere HTTP-GET-Anfrage an /_ah/start handelt. App Engine sendet diese Anfrage, um eine Instanz zu erstellen. Nutzer können keine Anfrage an /_ah/start senden. Instanzen mit manueller und einfacher Skalierung müssen erst auf die Startanfrage antworten, bevor sie eine weitere Anfrage verarbeiten können. Die Startanfrage kann für zwei Zwecke verwendet werden:

  • Zum Starten eines für unbestimmte Zeit ausgeführten Programms, ohne weitere Anfragen zu akzeptieren
  • Zum Initialisieren einer Instanz, bevor weiterer Traffic eingeht

Manuelle, einfache und automatische Skalierungsinstanzen werden unterschiedlich gestartet. Wenn Sie eine Instanz mit manueller Skalierung starten, sendet App Engine sofort eine /_ah/start-Anfrage an jede Instanz. Wenn Sie die Instanz eines Dienstes mit einfacher Skalierung starten, lässt App Engine Traffic zur Instanz zu. Die Anfrage /_ah/start wird aber erst dann an die Instanz gesendet, wenn diese ihre erste Nutzeranfrage empfängt. Mehrere Instanzen mit einfacher Skalierung werden nur bei Bedarf gestartet, um zusätzlichen Traffic zu verarbeiten. Instanzen mit Autoscaling erhalten keine /_ah/start-Anfrage.

Wenn eine Instanz auf die /_ah/start-Anfrage mit dem HTTP-Statuscode 200–299 oder 404 antwortet, wird davon ausgegangen, dass sie erfolgreich gestartet wurde und zusätzliche Anfragen verarbeiten kann. Andernfalls beendet App Engine die Instanz. Manuelle Skalierungsinstanzen werden sofort neu gestartet, während einfache Skalierungsinstanzen erst dann neu gestartet werden, wenn sie zum Verarbeiten von Traffic benötigt werden.

Herunterfahren

Das Herunterfahren kann durch die folgenden geplanten und ungeplanten Ereignisse ausgelöst werden:

  • Sie beenden eine Instanz manuell.
  • Sie stellen eine aktualisierte Version des Dienstes bereit.
  • Die Instanz überschreitet den maximalen Arbeitsspeicher für die konfigurierte instance_class.
  • Ihre Anwendung hat das Kontingent von Instanzstunden verbraucht.
  • Ihre Instanz wird auf eine andere Maschine verschoben, entweder weil die aktuelle Maschine, auf der die Instanz ausgeführt wird, neu gestartet wird oder weil App Engine die Instanz zur Verbesserung der Lastverteilung verschoben hat.

Ladeanfragen

Wenn App Engine eine neue Instanz für die Anwendung erstellt, muss die Instanz zuerst alle für die Verarbeitung der Anfrage erforderlichen Bibliotheken und Ressourcen laden. Dies geschieht während der ersten Anfrage an die Instanz, die als Ladeanfrage bezeichnet wird. Da die Anwendung während einer Ladeanfrage initialisiert wird, dauert die Anfrage länger.

Hier ein paar Tipps, um die Dauer von Ladeanfragen zu verkürzen:

  • Laden Sie nur den für den Start benötigten Code.
  • Greifen Sie so wenig wie möglich auf das Laufwerk zu.
  • Oft kann Code schneller aus einer ZIP- oder JAR-Datei als aus vielen einzelnen Dateien geladen werden.

Aufwärmanfragen

Aufwärmanfragen sind ein spezieller Typ von Ladeanfragen. Sie laden Anwendungscode in eine Instanz, bevor Liveanfragen durchgeführt werden. Instanzen mit manueller oder einfacher Skalierung erhalten keine /_ah/warmup-Anfrage.

Weitere Informationen zum Verwenden von Aufwärmanfragen finden Sie unter Aufwärmanfragen konfigurieren.

Instanzlaufzeit

App Engine versucht, Instanzen mit manueller und einfacher Skalierung auf unbegrenzte Zeit auszuführen. Derzeit kann die Betriebszeit von Instanzen mit manueller und einfacher Skalierung jedoch nicht garantiert werden. Hardware- und Softwarefehler, die zur vorzeitigen Beendigung oder zu wiederholten Neustarts führen, können ohne Vorwarnung auftreten und oft nur mit erheblichem Zeitaufwand behoben werden. Daher sollten Sie Ihre Anwendung so konfigurieren, dass diese Fehler toleriert werden.

Hier sind einige Vorgehensweisen, um Ausfallzeiten durch Instanzneustarts zu vermeiden:

  • Beschleunigen Sie den Neustart vorhandener Instanzen bzw. den Start neuer Instanzen.
  • Erstellen Sie bei lang laufenden Berechnungen regelmäßig Prüfpunkte, damit Sie den Vorgang beim jeweiligen Status fortsetzen können.
  • Ihre Anwendung sollte "zustandslos" sein. Es darf also nichts auf der Instanz gespeichert werden.
  • Führen Sie Aufgaben mithilfe von Warteschlangen asynchron aus.
  • Wenn Sie Ihre Instanzen für manuelle Skalierung konfigurieren:
    • Verwenden Sie ein Load-Balancing-Modul für mehrere Instanzen.
    • Konfigurieren Sie mehr Instanzen, als für die Verarbeitung des normalen Traffics erforderlich sind.
    • Schreiben Sie eine Fallback-Logik, die im Cache gespeicherte Ergebnisse verwendet, wenn keine manuelle Skalierungsinstanz verfügbar ist.