Sie können mithilfe von Aufwärmanfragen die Anfrage- und Antwortlatenz beim Laden des Codes Ihrer Anwendung in eine neue Instanz verringern.
App Engine muss den Anwendungscode häufig in eine neue Instanz laden. Dazu kann es in folgenden Situationen kommen:
- Sie stellen eine Version der Anwendung noch einmal bereit.
- Es werden neue Instanzen erstellt, da die Anfragelast die Kapazität der aktuell ausgeführten Instanzen überschreitet.
- Die zugrunde liegende Infrastruktur oder Hardware wird gewartet oder repariert.
Wenn Sie den Anwendungscode in eine neue Instanz laden, kann dies zu Ladeanfragen führen. Durch diese Ladeanfragen erhöht sich eventuell die Anfragelatenz für Ihre Nutzer. Mithilfe von Aufwärmanfragen lässt sich dies vermeiden. Aufwärmanfragen laden den Anwendungscode in eine neue Instanz, bevor Live-Anfragen diese Instanz erreichen.
Wenn Aufwärmanfragen für Ihre Anwendung aktiviert sind, ermittelt App Engine, wann Ihre Anwendung eine neue Instanz benötigt, und initiiert dann eine Aufwärmanfrage zur Initialisierung einer neuen Instanz. Diese Ermittlung ist jedoch nicht immer erfolgreich. Daher kann es auch dann zu Ladeanfragen kommen, wenn Aufwärmanfragen in Ihrer Anwendung aktiviert sind. Wenn Ihre Anwendung beispielsweise keinen Traffic bedient, ist die erste Anfrage an die Anwendung immer eine Ladeanfrage, keine Aufwärmanfrage.
Aufwärmanfragen werden wie jede andere Anfrage an Ihre App Engine-Anwendung auf die Instanzstunden angerechnet. In den meisten Fällen werden Sie bei aktivierten Aufwärmanfragen keinen Anstieg der Instanzstunden feststellen, da Ihre Anwendung einfach in einer Aufwärmanfrage statt in einer Ladeanfrage initialisiert wird. Zu einem Anstieg der Instanzstunden kann es kommen, wenn Sie mehr Vorgänge ausführen, z. B. ein Pre-Caching im Rahmen einer Aufwärmanfrage. Wenn Sie für min_idle_instances
einen Wert größer als 0
festlegen, treten möglicherweise Aufwärmanfragen auf, wenn diese Instanzen zum ersten Mal gestartet werden. Sie bleiben danach aber verfügbar.
Aufwärmanfragen aktivieren
Aufwärmanfragen werden vom App Engine-Planer genutzt, der die automatische Skalierung der Instanzen anhand der vom Nutzer festgelegten Konfiguration steuert. Sind Aufwärmanfragen aktiviert, stellt App Engine GET
-Anfragen an /_ah/warmup
. Sie können für diese Anfragen Handler implementieren und so anwendungsspezifische Aufgaben ausführen, z. B. Anwendungsdaten vorab im Cache speichern.
Der Planer startet Instanzen, wenn er feststellt, dass mehr Instanzen benötigt werden. In den Logs können auch dann Aufwärmanfragen enthalten sein, wenn sie deaktiviert sind, da der Planer damit Instanzen startet.
Es werden nicht in jedem Fall Aufwärmanfragen aufgerufen. Unter Umständen werden stattdessen Ladeanfragen gesendet, z. B. dann, wenn es sich um die erste gestartete Instanz handelt oder wenn ein abrupter Anstieg des Traffics zu verzeichnen ist. Bei aktivierten Aufwärmanfragen wird aber nach Möglichkeit versucht, Anfragen an Instanzen zu senden, für die bereits Aufwärmanfragen ausgeführt wurden.
Zur Aktivierung von Aufwärmanfragen fügen Sie das Element warmup
unter der Anweisung inbound_services
in die Datei app.yaml
ein. Beispiel:
inbound_services:
- warmup
Handler registrieren
Sie können das Skript, das Aufwärmanfragen verarbeitet, in der Datei app.yaml
Ihres Projekts registrieren. Beispiel:
inbound_services:
- warmup
handlers:
- url: /_ah/warmup
script: main.py
login: admin
In diesem Beispiel wird ein Handler registriert, um den Anfragepfad /_ah/warmup
mit der Datei main.py
auf Aufwärmanfragen zu prüfen.
Handler erstellen
Erstellen Sie einen Handler, der die an /_ah/warmup
gesendeten Anfragen verarbeitet.
Der Handler sollte jede Aufwärmlogik ausführen, die von der Anwendung benötigt wird. Das folgende Beispiel baut auf dem vorherigen Beispiel auf:
import webapp2
class MyWarmUpCode(webapp2.RequestHandler):
"""
This class handles the warmup request. You should add any code that you
need to execute in the `get` method, such as populating caches, and ensure
that you return a successful HTTP response.
"""
def get(self):
# Your warmup logic goes here.
# Return a successful response to indicate the logic completed.
self.response.headers['Content-Type'] = 'text/plain'
self.response.write('Warmup successful')
# ...
application = webapp2.WSGIApplication(
[
('/_ah/warmup', MyWarmUpCode),
# Other handlers
# ...
]
)
Nächste Schritte
Sie haben die Möglichkeit, Werte in einem In-Memory-Datenspeicher wie Memcache zu speichern, damit Ihre Anwendung schnell und ohne Abfragen auf Daten zugreifen kann.
Wenn Sie beispielsweise eine Liste der aktuellen Trendartikel für Ihre Website erstellen, können Sie diese in der Aufwärmanfrage anlegen und in Memcache speichern. App Engine muss dann bei Eingang einer Nutzeranfrage keine Datenspeicherabfragen ausführen und die Anwendung kann die Anfrage des Nutzers schneller verarbeiten.