Anwendungsressourcen verwalten

App Engine generiert Nutzungsberichte zur Leistung und Ressourcenauslastung 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

Seite "Instanzen" 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. Stackdriver 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 Stackdriver Trace ermittelt haben, versuchen Sie, 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 Cachesteuerungs-Header 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 bereitstellt. Python-Anwendungen sollten außerdem das Caching in der Laufzeit nutzen.
  • Memcache effizienter nutzen: Verwenden Sie Batch-Aufrufe zum Abrufen, Festlegen, Löschen usw. einer Reihe von Einzelaufrufen. Erwägen Sie ggf. die Verwendung der Memcache Async API.
  • Aufgaben für nicht request-bezogene Funktionen verwenden: Wenn Sie mit der Anwendung Vorgänge ausführen, die außerhalb von nutzerseitigen Requests erledigt werden können, platzieren Sie diese Vorgänge in einer Aufgabe. Wenn Sie diese Aufgaben an die [Aufgabenwarteschlange] (/appengine/docs/standard/python/taskqueue) senden, anstatt vor dem Zurückgeben einer Antwort 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.
  • Cloud 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 Nutzer-Requests zu verarbeiten, und führen Sie sie in einer Offlineaufgabe gleichzeitig in einem asynchronen URL-Abruf aus.
    • Verwenden Sie die asynchrone URL Fetch API.
  • HTTP-Sitzungen asynchron schreiben.

Automatische Skalierung von Leistungseinstellungen anpassen

Die Modulkonfigurationsdatei umfasst zwei Einstellungen, mit denen Sie den Ausgleich zwischen Leistung und Ressourcenlast anpassen können:

  • Höchstzahl inaktiver Instanzen: Mit der Einstellung Höchstzahl inaktiver Instanzen kann App Engine ungenutzte Instanzen herunterfahren, die das angegebene Limit überschreiten, sodass sie keine zusätzlichen Kontingente oder Kosten verursachen. Weniger inaktive Instanzen bedeuten jedoch auch, dass der App Engine-Planer möglicherweise neue Instanzen hochfahren muss, wenn der Traffic stark ansteigt. Dadurch erhöht sich gegebenenfalls die für den Nutzer sichtbare Latenz der Anwendung.
  • Mindestlatenzzeit für ausstehende Abfragen: Die Einstellung Mindestlatenzzeit für ausstehende Abfragen weist den App Engine-Planer an, eine neue Instanz nur dann zu starten, wenn ein Request länger als die angegebene Zeit ausstehend war. Wenn alle Instanzen belegt sind, müssen an Nutzer gerichtete Requests möglicherweise in der Warteschlange für ausstehende Abfragen verbleiben, bis dieser Schwellenwert erreicht ist. Je höher der festgelegte Wert, desto weniger Instanzen müssen gestartet werden. Dies kann bei starker Auslastung jedoch zu einer hohen sichtbaren Latenz für die Nutzer führen.

Gleichzeitige Requests in Python aktivieren

Die Instanzen Ihrer Anwendung können mehrere Requests gleichzeitig in Python verarbeiten. Wenn Sie diese Einstellung auswählen, verringert sich die Anzahl der Instanzen, die für die Bereitstellung von Traffic für Ihre Anwendung erforderlich sind. Die Anwendung muss jedoch threadsicher sein, damit dies einwandfrei funktioniert. Erfahren Sie mehr über die Verwendung gleichzeitiger Requests durch die Aktivierung von Threadsafe in der Datei app.yaml.

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 Front-End-Instanzen hochgefahren. Im Folgenden finden Sie einige Vorschläge zum Optimieren der Aufgabenwarteschlange, um Instanzstunden einzusparen:

  • Legen Sie den X-AppEngine-FailFast-Header für Aufgaben fest, die nicht latenzabhängig sind. Dieser Header weist den Planer an, Requests 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 des Requests verfügbar ist. Wenn Requests mit aktiviertem X-AppEngine-FailFast vorhandene Instanzen belegen, können Requests ohne diesen Header möglicherweise weiterhin dazu führen, dass neue Instanzen gestartet werden.
  • Konfigurieren Sie die Einstellungen der Aufgabenwarteschlange.
    • Wenn Sie den Parameter "rate" auf einen niedrigeren Wert setzen, führt die Aufgabenwarteschlange die Aufgaben langsamer aus.
    • Wenn Sie den Parameter "max_concurrent_requests" auf einen niedrigeren Wert setzen, werden weniger Aufgaben gleichzeitig ausgeführt.
  • Durch die Nutzung von Back-Ends können Sie die Anzahl der Instanzen steuern, die für die Aufgabenausführung genutzt werden. Sie können Push-Warteschlangen mit dynamischen Back-Ends oder Pull-Warteschlangen mit residenten Back-Ends nutzen.

Nach Möglichkeit statische Inhalte bereitstellen

Die Bereitstellung statischer Inhalte in Python 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 im Cloud Datastore, der Größe der Cloud 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 Datenspeichernutzung verwalten beschrieben, um die Speicherkosten für Indexe zu reduzieren.

Cloud Datastore-Nutzung verwalten

App Engine berücksichtigt die Anzahl der im Cloud Datastore ausgeführten Vorgänge. Im Folgenden finden Sie einige Strategien, mit denen Sie den Verbrauch der Cloud Datastore-Ressourcen und die Latenz für Requests an Cloud Datastore reduzieren können:

  • Die Anzahl der Schreibvorgänge, die zum Erstellen der einzelnen Entitäten im lokalen Cloud Datastore erforderlich waren, wird in der Datenansicht der GCP 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. Verwenden Sie die Funktion "Indexe abrufen", um zu sehen, welche Indexe in Ihrer Anwendung festgelegt sind. Auf der Suchseite in der GCP 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 Properties (Standardeinstellung) nach Möglichkeit durch nicht indexierte Properties (Python). Dadurch wird die Anzahl der Schreibvorgänge im Cloud Datastore beim Einfügen einer Entität reduziert. Vorsicht: Sollte es erforderlich sein, die nicht indexierte Property später abzufragen, müssen Sie den Code ändern, um die nicht indexierten Properties wiederzuverwenden. Außerdem müssen Sie einen MapReduce-Vorgang für alle Entitäten ausführen, um sie neu zu platzieren.
  • Aufgrund der Verbesserungen des Cloud 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 nach Schlüssel zu erheben. 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 eine get()-Batch-Anweisung.
  • Verwenden Sie für die Paginierung Cloud Datastore-Cursors statt Offsets.
  • Parallelisieren Sie mehrere Cloud Datastore-RPCs über die Async Datastore API.

Hinweis: Kleine Cloud Datastore-Vorgänge umfassen Aufrufe zum Zuweisen von Datenspeicher-IDs oder reine Schlüsselabfragen. Weitere Informationen zu Kosten finden Sie auf der Seite Preise.

Bandbreite verwalten

Für die ausgehende Bandbreite können Sie die Nutzung reduzieren, indem Sie nach Möglichkeit in den Antworten den entsprechenden Cache-Control-Header angeben und angemessene Ablaufzeiten für statische Dateien festlegen. Wenn Sie auf diese Weise öffentliche Cache-Control-Header verwenden, können Proxyserver und Clientbrowser Antworten für den angegebenen Zeitraum im Cache speichern.

Die Steuerung der eingehenden Bandbreite gestaltet sich schwieriger, da es sich hierbei um die Menge von Daten handelt, die Ihre Nutzer an die Anwendung senden. An dieser Stelle möchten wir auf den DoS-Schutzdienst hinweisen, mit dem Sie Traffic von IP-Adressen blockieren können, wenn Sie einen Missbrauch dieser Adressen vermuten.

Sonstige Ressourcen verwalten

Zum Überprüfen der Email API-Nutzung setzen Sie am besten Appstats ein. Mit Appstats können Sie dafür sorgen, nur tatsächlich erforderliche Aufrufe durchzuführen. Es wird außerdem empfohlen, die Fehlerraten zu überprüfen und darauf zu achten, dass keine ungültigen Aufrufe getätigt werden. In einigen Fällen lassen sich ungültige Aufrufe möglicherweise frühzeitig erkennen.

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

App Engine-Standardumgebung für Python 2