App Engine generiert Nutzungsberichte zur Leistung und Ressourcennutzung der Anwendung. Nachfolgend werden mögliche Strategien für eine effizientere Verwaltung der Ressourcen aufgeführt. Weitere Informationen finden Sie auf der Preisseite.
Nutzungsberichte ansehen
Bei der Bewertung der Anwendungsleistung sollten Sie überprüfen, wie viele Instanzen von der Anwendung ausgeführt und wie die Ressourcen von der Anwendung verwendet werden.
Dashboard-Nutzungsberichte aufrufen
In den folgenden Abschnitten werden Strategien für das Verwalten von Ressourcen beschrieben.
Dynamische Instanzskalierung verwalten
Latenz verringern
Die Anwendungslatenz hat Einfluss darauf, wie viele Instanzen für die Verarbeitung des Traffics benötigt werden. Wenn die Latenz verringert wird, benötigen Sie weniger Instanzen, um die Anwendung bereitzustellen. Cloud Trace ist ein nützliches Tool, mit dem Sie Daten zur Latenz einsehen und mögliche Änderungen zur Verringerung der Latenz ermitteln können.
Nachdem Sie die Latenz der Anwendung mit Cloud Trace ermittelt haben, können Sie versuchen, die Latenz mit den folgenden Strategien zu reduzieren:
- Caching von Daten erhöhen, auf die häufig zugegriffen wird: Setzen Sie App Engine Memcache ein. Die Einrichtung der Cache-Steuerungsheader der Anwendung kann große Auswirkungen darauf haben, wie effizient die Daten von Servern und Browsern im Cache gespeichert werden. Selbst wenn Daten nur wenige Sekunden im Cache gespeichert werden, kann sich dies darauf auswirken, wie effizient die Anwendung Traffic verarbeitet.
- App Engine Memcache effizienter nutzen: Verwenden Sie Batchaufrufe zum Abrufen, Festlegen, Löschen usw. anstelle einer Reihe von Einzelaufrufen.
- Aufgaben für nicht anfragebezogene Funktionen verwenden: Wenn Sie mit der Anwendung Vorgänge ausführen, die außerhalb von nutzerseitigen Anfragen erledigt werden können, platzieren Sie diese Vorgänge in einer Aufgabe. Wenn Sie diese Aufgaben an die Aufgabenwarteschlange senden, anstatt vor dem Zurückgeben von Antworten darauf zu warten, dass sie abgeschlossen werden, kann die Latenzzeit für den Nutzer erheblich reduziert werden. Die Aufgabenwarteschlange ermöglicht viel mehr Kontrolle über die Ausführungsraten und unterstützt Sie dabei, die Last auszugleichen.
- Firestore im Datastore-Modus (Datastore) effizienter nutzen: Weitere Informationen finden Sie weiter unten.
- Mehrere URL-Abrufaufrufe gleichzeitig ausführen:
- Führen Sie mehrere URL-Abrufaufrufe in einem Batch zusammen, anstatt sie einzeln in Nutzeranfragen zu verarbeiten, und führen Sie sie in einer Offlineaufgabe gleichzeitig in einem asynchronen URL-Abruf aus.
- Verwenden Sie goroutines.
- HTTP-Sitzungen asynchron schreiben.
Leistungseinstellungen der automatischen Skalierung anpassen
Die Konfigurationsdatei app.yaml
enthält mehrere Einstellungen, mit denen Sie den Kompromiss zwischen Leistung und Ressourcenauslastung für eine bestimmte Version Ihrer Anwendung steuern können. Eine Liste der verfügbaren Einstellungen für das Autoscaling finden Sie unter Skalierungselemente.
Im Video zu den neuen Planereinstellungen von App Engine sehen Sie die Auswirkungen dieser Einstellungen.
Einstellungen der Aufgabenwarteschlange konfigurieren
Die Standardeinstellungen für die Aufgabenwarteschlange sind auf Leistung ausgerichtet. Wenn Sie bei diesen Standardeinstellungen mehrere Aufgaben gleichzeitig in eine Warteschlange einreihen, werden wahrscheinlich neue Frontend-Instanzen gestartet. Im Folgenden finden Sie einige Vorschläge zum Optimieren der Aufgabenwarteschlange, um Instanzstunden einzusparen:
- Legen Sie den Header „X-AppEngine-FailFast“ für Aufgaben fest, die nicht latenzabhängig sind. Dieser Header weist den Planer an, Anfragen sofort als fehlgeschlagen einzustufen, wenn eine vorhandene Instanz nicht verfügbar ist. Die Aufgabenwarteschlange wiederholt den Vorgang so lange, bis eine vorhandene Instanz für die Bearbeitung der Anfrage verfügbar ist. Wenn Anfragen mit aktiviertem X-AppEngine-FailFast vorhandene Instanzen belegen, können Anfragen ohne diesen Header möglicherweise weiterhin dazu führen, dass neue Instanzen gestartet werden.
Nach Möglichkeit statische Inhalte bereitstellen
Die Bereitstellung statischer Inhalte erfolgt über eine spezielle App Engine-Infrastruktur, die keine Instanzstunden verbraucht. Wenn Sie benutzerdefinierte Header festlegen müssen, verwenden Sie die Blobstore API. Die tatsächliche Bereitstellung der Blob-Antwort verbraucht keine Instanzstunden.
Anwendungsspeicher verwalten
App Engine berechnet die Speicherkosten anhand der Größe der Entitäten in Datastore, der Größe der Datastore-Indexe, der Größe der Aufgaben in der Aufgabenwarteschlange und der Menge der in Blobstore gespeicherten Daten. Sie haben folgende Möglichkeiten, um dafür zu sorgen, dass nur so viele Daten wie nötig gespeichert werden:
- Löschen Sie alle Entitäten oder Blobs, die von der Anwendung nicht mehr benötigt werden.
- Entfernen Sie alle nicht benötigten Indexe, wie weiter unten im Abschnitt Cloud Datastore-Nutzung verwalten beschrieben, um die Speicherkosten für Indexe zu reduzieren.
Datastore-Nutzung verwalten
App Engine berücksichtigt die Anzahl der in Datastore ausgeführten Vorgänge. Im Folgenden finden Sie einige Strategien, mit denen Sie die Nutzung der Datastore-Ressourcen und die Latenz für Anfragen an Datastore reduzieren können:
- Die Anzahl der Schreibvorgänge, die zum Erstellen der einzelnen Entitäten in Ihrem lokalen Datastore erforderlich waren, wird in der Datenansicht der Google Cloud Console angezeigt. Anhand dieser Informationen erhalten Sie eine Übersicht über die Kosten, die mit dem Schreiben jeder Entität verbunden sind. Weitere Informationen zum Auswerten dieser Daten finden Sie unter Kosten für Schreibvorgänge.
- Entfernen Sie alle nicht benötigten Indexe, um die Kosten für das Speichern und Schreiben von Entitäten zu reduzieren. Auf der Suchseite der Google Cloud Console können Sie sehen, welche Indexe derzeit für Ihre Anwendung bereitgestellt werden.
- Bei der Gestaltung eines Datenmodells können Sie die Abfragen möglicherweise so schreiben, dass benutzerdefinierte Indexe vermieden werden. Informationen dazu, wie Indexe von App Engine generiert werden, finden Sie unter Abfragen und Indexe.
- Ersetzen Sie indexierte Attribute (Standardeinstellung) nach Möglichkeit durch nicht indexierte Attribute (). Dadurch wird die Anzahl der Datastore-Schreibvorgänge beim Einfügen einer Entität reduziert. Vorsicht: Sollte es später erforderlich sein, ein nicht indexiertes Attribut abzufragen, müssen Sie den Code ändern, um wieder indexierte Attribute zu verwenden. Außerdem müssen Sie einen MapReduce-Vorgang für alle Entitäten ausführen, um sie neu zu platzieren.
- Aufgrund der Verbesserungen des Datastore-Abfrageplaners in den App Engine-Releases 1.5.2 und 1.5.3 benötigen Ihre Abfragen möglicherweise weniger Indexe als zuvor. Sie haben die Möglichkeit, bestimmte benutzerdefinierte Indexe aus Leistungsgründen beizubehalten und andere zu löschen, um die Kosten für das Speichern und Schreiben von Entitäten zu reduzieren.
- Führen Sie eine Neukonfiguration des Datenmodells durch, um Abfragen durch Abrufe nach Schlüssel zu ersetzen. Diese Methode ist kostengünstiger und effizienter.
- Verwenden Sie nach Möglichkeit nur schlüsselbasierte Abfragen anstelle von entitätsbasierten Abfragen.
- Zum Reduzieren der Latenz ersetzen Sie mehrere
get()
-Anweisungen einer Entität durch eineget()
-Batch-Anweisung. - Verwenden Sie für die Paginierung Datastore-Cursors statt Offsets.
- Parallelisieren Sie mehrere Datastore-RPCs über die Async Datastore API.
Hinweis: Kleine Datastore-Vorgänge umfassen Aufrufe zum Zuweisen von Datastore-IDs oder ausschließlich schlüsselbasierte Abfragen. Weitere Informationen zu Kosten finden Sie auf der Seite Preise.