Push-Warteschlangen erstellen

Auf dieser Seite wird beschrieben, wie Sie eine Push-Warteschlange erstellen und anpassen sowie deren Inhalt untersuchen können.

Warteschlangen mit Warteschlangen-Konfigurationsdatei erstellen

Um eine Aufgabe zu bearbeiten, müssen Sie sie zu einer Push-Warteschlange hinzufügen. App Engine stellt eine Standard-Push-Warteschlange mit dem Namen default zur Verfügung, die fertig konfiguriert und für die Verwendung mit Standardeinstellungen bereit ist. Sie können einfach alle Aufgaben zur Standardwarteschlange hinzufügen und müssen dann keine anderen Warteschlangen erstellen und konfigurieren.

Zum Hinzufügen eigener Warteschlangen oder zum Ändern der Standardkonfiguration müssen Sie die Warteschlangen-Konfigurationsdatei für die Anwendung bearbeiten, die Sie in App Engine hochladen. Sie können bis zu 100 Warteschlangen erstellen. Warteschlangen können nicht dynamisch angelegt werden.

Diese Warteschlangen-Konfigurationsdatei definiert zwei Warteschlangen:

queue:
- name: queue-blue
  target: v2.task-module
  rate: 5/s

- name: queue-red
  rate: 1/s

So laden Sie die Datei hoch:

gcloud app deploy queue.yaml

Alle in queue-blue aufgenommene Aufgaben werden an das Zielmodul v2.task-module gesendet. Die Aktualisierungsrate von queue-red wird von 5/s in 1/s geändert. Die Aufgaben werden dann aus der Warteschlange entfernt und mit einer Rate von 1 Aufgabe pro Sekunde an ihre jeweiligen Ziele gesendet.

Wenn Sie eine Warteschlange löschen, müssen Sie etwa sieben Tage warten, bis Sie eine neue Warteschlange mit dem gleichen Namen erstellen können.

Sie können noch viele weitere Parameter in die Konfigurationsdatei einfügen und damit das Verhalten einer Push-Warteschlange anpassen. Weitere Informationen dazu finden Sie in der Referenz zur Warteschlangen-Konfigurationsdatei.

Verarbeitungsrate der Push-Warteschlange festlegen

Sie können die Geschwindigkeit steuern, mit der die Aufgaben in den einzelnen Warteschlangen verarbeitet werden. Dazu definieren Sie weitere Anweisungen wie rate, bucket_size und max_concurrent_requests.

Die Aufgabenwarteschlange verwendet Token-Buckets, um die Rate der Aufgabenausführung zu steuern. Jede benannte Warteschlange hat einen Token-Bucket, der Tokens enthält. Die maximale Anzahl der Tokens entspricht der festgelegten bucket_size oder höchstens fünf Tokens, wenn keine Bucket-Größe festgelegt ist.

Jedes Mal, wenn Ihre Anwendung eine Aufgabe ausführt, wird ein Token aus dem Bucket entfernt. Die Anwendung fährt mit der Verarbeitung von Aufgaben in der Warteschlange fort, bis im Bucket der Warteschlange keine Tokens mehr vorhanden sind. App Engine füllt den Bucket laufend anhand des Werts für rate, den Sie für die Warteschlange angegeben haben, mit neuen Tokens auf.

Wenn Ihre Warteschlange zu verarbeitende Aufgaben und der Bucket der Warteschlange Tokens enthält, verarbeitet App Engine gleichzeitig dieselbe Anzahl von Aufgaben und Tokens. Dies kann zu Verarbeitungsspitzen, einer hohen Nutzung von Systemressourcen und zu Konflikten mit Anfragen anderer Nutzer führen.

Verwenden Sie max_concurrent_requests, wenn Sie die gleichzeitige Ausführung vieler Aufgaben verhindern oder Konflikte zwischen Datenspeichern vermeiden möchten.

Das folgende Beispiel zeigt, wie Sie mit max_concurrent_requests Aufgaben begrenzen und die Bucket-Größe und die Rate im Einklang mit den Anforderungen und verfügbaren Ressourcen Ihrer Anwendung anpassen:

queue:
- name: queue-blue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

Speicherlimits für alle Warteschlangen festlegen

Mithilfe der Warteschlangen-Konfigurationsdatei können Sie die Gesamtmenge des Speichers festlegen, der von Aufgabendaten in allen Warteschlangen belegt werden kann. Fügen Sie auf oberster Ebene das Element total_storage_limit ein, um das Limit für den Gesamtspeicher festzulegen:

# Set the total storage limit for all queues to 120MB
total_storage_limit: 120M
queue:
- name: queue-blue
  rate: 35/s

Der Wert besteht aus einer Zahl gefolgt von einer Einheit: B für Byte, K für Kilobyte, M für Megabyte, G für Gigabyte und T für Terabyte. Zum Beispiel gibt 100K ein Limit von 100 Kilobyte an. Wenn durch das Hinzufügen einer Aufgabe zu einer Warteschlange die Speichergrenze überschritten wird, schlägt der Aufruf für das Hinzufügen der Aufgabe fehl. Das Standardlimit beträgt 500M (500 Megabyte) für kostenlose Anwendungen. Bei kostenpflichtigen Anwendungen gibt es keine Begrenzung, es sei denn, Sie legen explizit eine fest. Mit dieser Beschränkung können Sie die Anwendung vor einem Forkbomb-Programmierfehler schützen, durch den während der Ausführung einer Aufgabe mehrere andere Aufgaben hinzufügt werden.

Wenn Ihre Anwendung beim Hinzufügen von Aufgaben Fehler wegen unzureichender Kontingente erhält, kann die Erhöhung des Gesamtspeicherlimits hilfreich sein. Wenn Sie diese Funktion verwenden, empfehlen wir dringend, die Speicherbegrenzung so festzulegen, dass ausreichend Speicher für die Ausführung von Aufgaben mehrerer Tage verfügbar ist. Auf diese Weise können die Warteschlangen vorübergehend gesichert werden und weiterhin neue Aufgaben aufnehmen, während sie den Rückstand abarbeiten und gleichzeitig vor einem Forkbomb-Programmierfehler geschützt sind.

Maximale Anzahl gleichzeitiger Anfragen konfigurieren

Sie können die Verarbeitungsrate steuern, indem Sie max_concurrent_requests festlegen. Dadurch wird die Anzahl der Aufgaben begrenzt, die gleichzeitig ausgeführt werden können.

Wenn für die Warteschlange Ihrer Anwendung eine Rate von 20/s und eine Bucket-Größe von 40 gilt, werden die Aufgaben in dieser Warteschlange mit einer Rate von 20/s ausgeführt, wobei es zu kurzzeitigen Spitzen von bis zu 40/s kommen kann. Diese Einstellungen funktionieren hervorragend, wenn die Aufgabenlatenz relativ niedrig ist. Wenn die Latenz jedoch erheblich steigt, werden deutlich mehr gleichzeitige Aufgaben verarbeitet. Diese zusätzliche Verarbeitungslast kann zusätzliche Instanzen verbrauchen und die Anwendung verlangsamen.

Nehmen wir beispielsweise an, dass die normale Aufgabenlatenz 0,3 Sekunden beträgt. Bei diesem Latenzwert werden maximal ungefähr 40 Aufgaben gleichzeitig verarbeitet. Wenn die Aufgabenlatenz jedoch auf 5 Sekunden ansteigt, könnten durchaus mehr als 100 Aufgaben gleichzeitig verarbeitet werden. Dieser Anstieg zwingt Ihre Anwendung dazu, weitere Instanzen zu verbrauchen, um die zusätzlichen Aufgaben zu verarbeiten, wodurch die gesamte Anwendung verlangsamt wird und Nutzeranfragen behindert werden können. Sie können diese Möglichkeit vermeiden, indem Sie auf einen niedrigeren max_concurrent_requests-Wert setzen.

Wenn Sie beispielsweise auf den max_concurrent_requests-Wert 10 setzen, erhält unsere Beispielwarteschlange eine Rate von ca. 20 Aufgaben/Sekunde aufrecht, wenn die Latenz 0,3 Sekunden beträgt. Wenn die Latenz auf mehr als 0,5 Sekunden ansteigt, drosselt diese Einstellung die Verarbeitungsrate, um sicherzustellen, dass nicht mehr als 10 Aufgaben gleichzeitig ausgeführt werden.

queue:
# Set the max number of concurrent requests to 50
- name: optimize-queue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

Warteschlangen in der Google Cloud Console überwachen

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Tasks auf.

    Rufen Sie die Seite Cloud Tasks auf.

    Auf der App Engine-Seite Aufgabenwarteschlange finden Sie eine Anleitung zur Seite "Cloud Tasks". Diese Aktualisierung in der Google Cloud Console ändert nichts an der Funktionsweise der Aufgabenwarteschlangen.

  2. Aktivieren Sie die Cloud Task API.

  3. Auf der Seite mit der Cloud Tasks-Seite wird eine Liste aller Warteschlangen in der Anwendung angezeigt. Wenn Sie auf den Namen einer Warteschlange klicken, wird die Seite Warteschlangendetails angezeigt, auf der alle Aufgaben in der ausgewählten Warteschlange angezeigt werden.

Nächste Schritte

Weitere Informationen zu Aufgaben erstellen