Webdienste in App Engine strukturieren

Regions-ID

REGION_ID ist ein abgekürzter Code, den Google anhand der Region zuweist, die Sie beim Erstellen Ihrer Anwendung ausgewählt haben. Der Code bezieht sich nicht auf ein Land oder eine Provinz, auch wenn einige Regions-IDs häufig verwendeten Länder- und Provinzcodes ähneln können. Bei Anwendungen, die nach Februar 2020 erstellt wurden, ist REGION_ID.r in den App Engine-URLs enthalten. Bei Anwendungen, die vor diesem Datum erstellt wurden, ist die Regions-ID in der URL optional.

Hier finden Sie weitere Informationen zu Regions-IDs.

In diesem Dokument wird erläutert, wie Sie die Dienste und zugehörigen Ressourcen Ihrer Anwendung für App Engine strukturieren.

Verzeichnisstruktur

Jede Version Ihres App Engine-Dienstes ist in einer app.yaml-Konfigurationsdatei definiert. Zum Bereitstellen einfacher Anwendungen muss mindestens die Datei app.yaml definiert werden. Die Datei app.yaml dient als Deployment-Deskriptor und definiert den Skalierungstyp sowie die Laufzeit, den Handler und andere Ressourceneinstellungen für eine bestimmte Version eines Dienstes. Wenn Sie mehrere Versionen eines Dienstes bereitstellen, können Sie mehrere YAML-Dateien mit der jeweiligen Konfiguration Ihrer Versionen im selben Verzeichnis erstellen.

Für jeden Dienst können Sie separate Verzeichnisse im Stammverzeichnis Ihrer Anwendung erstellen, wenn Sie lokal arbeiten. Wird die Anwendung über ein Versionskontrollsystem (Version Control System, VCS) wie GitHub gehostet, lässt sich diese auch so strukturieren, dass separate Verzeichnisse in einem Repository oder separate Repositories für jeden Dienst verwendet werden. Jedes Verzeichnis oder Repository sollte genau einen Dienst darstellen und neben dem zugehörigen Quellcode die Datei app.yaml dieses Dienstes enthalten.

Sie haben die Möglichkeit, für jede app.yaml-Datei Ihres Dienstes einen eindeutigen Namen anzugeben. So können Sie eine Konfigurationsdatei nach Ihrem Dienst benennen oder für die verschiedenen Versionen dieses Dienstes eindeutige Namen wie service1.yaml oder app.standard.yaml verwenden.

Die anderen optionalen Konfigurationsdateien sollten sich im Stammverzeichnis oder Repository des default-Dienstes der Anwendung befinden. In diesen optionalen Konfigurationsdateien wie dispatch.yaml, index.yaml und cron.yaml werden Einstellungen festgelegt, die für die ganze Anwendung gelten und nicht nur für einen bestimmten Dienst.

Beispiele

Das folgende Beispiel zeigt, wie eine lokal entwickelte Anwendung mit drei Diensten aussehen könnte. Die optionale Datei dispatch.yaml wurde in das Stammverzeichnis dieser Anwendung eingefügt. Außerdem befinden sich im Stammverzeichnis drei Verzeichnisse, jeweils eins für jeden Dienst der Anwendung. Das Unterverzeichnis für service1 enthält die Quell- und Konfigurationsdateien für diesen Dienst. Auch service2 und service3 befinden sich in separaten Verzeichnissen, die die Dateien für den jeweiligen Dienst enthalten, wobei service3 allerdings zwei Versionen der YAML-Konfigurationsdatei umfasst:

Hierarchiegrafik von YAML-Diensten

Eine Anwendung mit einem einzigen Dienst enthält nur den default-Dienst. Alle Dateien können im selben Verzeichnis des Stammverzeichnisses der Anwendung gespeichert sein. Im folgenden Beispiel wird die mögliche Struktur einer Anwendung mit einem einzigen Dienst veranschaulicht. Sie enthält die optionale Konfigurationsdatei dispatch.yaml sowie die zwei Konfigurationsdateien service1.yaml und service2.yaml, die verschiedene Versionen dieses Dienstes darstellen:

Hierarchiegrafik von kleinen YAML-Diensten

Designaspekte zur Instanzverfügbarkeit

Hardware- oder Softwarefehler, die zu einer vorzeitigen Beendigung oder zu häufigen Neustarts von Instanzen führen, können ohne Vorwarnung auftreten und viel Zeit für die Behebung in Anspruch nehmen. Ihre Anwendung muss mit solchen Störungen zurechtkommen.

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.

Weitere Informationen zu Instanzen finden Sie unter Instanzverwaltung.

default-Dienst

Jede App Engine-Anwendung enthält einen default-Dienst. Sie müssen die ursprüngliche Version Ihrer Anwendung zuerst für den default-Dienst bereitstellen, bevor Sie zusätzliche Dienste für Ihre Anwendung erstellen und bereitstellen können.

Dieser Standarddienst kann optional in der Datei app.yaml mit der Einstellung service: default angegeben werden.

Anfragen, die mithilfe Ihres Google Cloud-Projekts an die Anwendung gesendet werden, gehen an den default-Dienst. Beispiel: https://PROJECT_ID.REGION_ID.r.appspot.com. Weitere Informationen zum Ansteuern anderer Dienste finden Sie unter Kommunikation zwischen Diensten.

Optionale Konfigurationsdateien

Die folgenden Konfigurationsdateien steuern optionale Features, die für alle Dienste in einer einzelnen Anwendung gelten. In den folgenden Themen finden Sie Einzelheiten zu jedem dieser optionalen Features:

  • dispatch.yaml überschreibt Standardregeln für Routing, indem eingehende Anfragen anhand des Pfads oder Hostnamens in der URL an einen bestimmten Dienst gesendet werden
  • index.yaml gibt an, welche Indexe Ihre Anwendung bei Verwendung von Datastore-Abfragen benötigt.
  • cron.yaml konfiguriert regelmäßig geplante Aufgaben, die zu festgelegten Zeiten oder in regelmäßigen Intervallen ausgeführt werden.

Überlegungen zu Daten- und Dateispeichern

Über App Engine können Sie ganz einfach auf andere Google Cloud-Dienste wie Datastore, Cloud SQL und Cloud Storage zugreifen.

Sie können auch eine externe oder Drittanbieter-Datenbank verwenden, wenn diese Datenbank von Ihrer Sprache unterstützt wird und über Ihre App Engine-Instanz zugänglich ist.

Weitere Informationen zum Speichern von Dateien in Google Cloud oder an einem externen Ort finden Sie unter Informationen zu Daten- und Dateispeichern.

Für die Bereitstellung von statischen Inhalten stehen Ihnen außerdem verschiedene Optionen zur Wahl. So lässt sich der statische Inhalt der Anwendung direkt über diese Anwendung in App Engine bereitstellen oder auf einem Google Cloud-Dienst wie Cloud Storage hosten. Außerdem können Sie dafür ein Content Delivery Network (CDN) eines Drittanbieters verwenden. Weitere Informationen zum Bereitstellen statischer Inhalte finden Sie unter Statische Dateien bereitstellen.

Nächste Schritte

Wenn Sie mit mehreren Diensten arbeiten und diese gemeinsam bereitstellen möchten, finden Sie weitere Informationen unter Mehrere Dienste bereitstellen.