Übersicht über Aufgabenwarteschlangen

Auf dieser Seite wird beschrieben, was Aufgabenwarteschlangen sind und wann und wie sie verwendet werden können. Aufgabenwarteschlangen ermöglichen Anwendungen, Aufträge asynchron, d. h. nicht direkt nach Nutzeranfragen, auszuführen. Diese Aufträge werden hier Aufgaben genannt. Wenn eine Anwendung im Hintergrund arbeitet, fügt sie Aufgaben in Aufgabenwarteschlangen ein. Die Aufgaben werden dann später von Worker-Diensten ausgeführt.

Der Dienst für Aufgabenwarteschlangen ist für asynchrone Aufgaben ausgelegt. Er bietet keine zuverlässigen Garantien hinsichtlich des Zeitpunkts der Aufgabenabarbeitung und eignet sich daher nicht für interaktive Anwendungen, bei denen ein Nutzer auf das Ergebnis wartet.

Push- und Pull-Warteschlangen

Aufgabenwarteschlangen gibt es in zwei Varianten: Push und Pull. Der Dienst für Aufgabenwarteschlangen gibt die Aufgabenanfragen an die Worker-Dienste je nach Warteschlange unterschiedlich aus.

Push-Warteschlangen führen Aufgaben aus, indem sie HTTP-Anfragen an App Engine-Worker-Dienste senden. Sie leiten diese Anfragen zuverlässig und kontinuierlich weiter und garantieren eine sichere Aufgabenausführung. Sie können die Geschwindigkeit, mit der Aufgaben aus der Warteschlange gesendet werden, individuell festlegen. Auf diese Weise bestimmen Sie das Skalierungsverhalten der Worker und damit Ihre Kosten.

Da Aufgaben als Anfragen für App Engine-Dienste ausgeführt werden, unterliegen sie strengen Zeitlimits. Aufgaben, die von automatischen Skalierungsdiensten verarbeitet werden, müssen in zehn Minuten abgeschlossen sein. Aufgaben, die von einfachen und manuellen Skalierungsdiensten verarbeitet werden, können bis zu 24 Stunden beanspruchen.

Pull-Warteschlangen senden keine Aufgaben. Sie sind darauf angewiesen, dass andere Worker-Dienste aus eigener Initiative Aufgaben aus der Warteschlange freigeben. Pull-Warteschlangen bieten mehr Leistung und Flexibilität im Hinblick auf die Verarbeitung von Aufgaben. Sie erfordern jedoch auch mehr Aufwand beim Prozessmanagement. Wenn eine Aufgabe freigegeben wird, legt der freigebende Worker ein Zeitlimit fest. Bis zum Ablauf des Zeitlimits muss der Worker die Aufgabe abgeschlossen und gelöscht haben. Ist dies nicht der Fall, gibt der Dienst für Aufgabenwarteschlangen die Aufgabe für einen anderen Worker frei.

Alle Aufgaben in Aufgabenwarteschlangen werden asynchron ausgeführt. Die Aufgabe wird von der Anwendung, von der sie erstellt wurde, an die Warteschlange übergeben. Die ursprüngliche Anwendung wird nicht entsprechend benachrichtigt, ob die Aufgabe abgeschlossen wurde bzw. erfolgreich war.

Der Dienst für Aufgabenwarteschlangen enthält einen Wiederholungsmechanismus. Wenn eine Aufgabe fehlschlägt, kann sie beliebig oft wiederholt werden.

Anwendungsfälle

Push-Warteschlangen

Ein typischer Anwendungsfall für eine Push-Warteschlange ist ein „langsamer“ Vorgang. Sehen wir uns das Messaging-System in einem sozialen Netzwerk an. Wenn ein Nutzer eine Nachricht sendet, muss das Netzwerk die Follower des Absenders informieren. Dies kann sehr lange dauern. Über eine Push-Warteschlange stellt die Anwendung für jede eingehende Nachricht eine Aufgabe in die Warteschlange, damit sie von dort an einen Worker-Dienst zur Verarbeitung weitergeleitet werden kann. Wenn der Worker die Aufgabenanfrage empfängt, kann er die Liste der Follower des Senders abrufen und die Datenbank für jeden einzelnen Follower aktualisieren. Der Worker arbeitet effizienter, wenn für jede Datenbankaktualisierung eine eigene Push-Aufgabe in die Warteschlange gestellt wird.

Ein weiterer Anwendungsfall für Push-Warteschlangen sind geplante Aufgaben. Sehen wir uns eine Anwendung an, mit der eine Werbekampagne umgesetzt wird. Sie haben eine Gruppe von Aufgaben zum Senden von E-Mails erstellt. Sie können die Aufgaben in eine Push-Warteschlange einfügen und die Anweisung geben, die Aufgaben erst zu einem festen späteren Zeitpunkt zu senden. Wenn der Fälligkeitszeitpunkt erreicht ist, beginnt der Dienst für Aufgabenwarteschlangen mit der Ausgabe der Anfragen zur Ausführung der Aufgaben.

Pull-Warteschlangen

Pull-Warteschlangen eignen sich besonders, wenn Sie Aufgaben zur effizienten Ausführung stapelweise verarbeiten müssen. Lösungen können dabei die Möglichkeit nutzen, ein Tag an eine Pull-Aufgabe anzuhängen. Die Worker können dann die Gruppe von Aufgaben freigeben, die das gleiche Tag haben. Ein typisches Beispiel wäre eine Anwendung, die Bestenlisten für zahlreiche verschiedene Spiele unterhält, wobei ständig viele Spieler und Gruppen aktiv sind. Immer, wenn es einen neuen Highscore gibt, kann die Anwendung eine Pull-Aufgabe mit der Punktzahl und dem Spieler in die Warteschlange einfügen und die Spiel-ID als Tag für die Aufgabe verwenden. Ein Worker beginnt mit seinem regelmäßigen Einsatz, gibt eine Gruppe von Aufgaben mit der gleichen Spiel-ID frei und aktualisiert die Bestenliste. Sie können Aufgaben mit einem bestimmten Tag explizit freigeben oder den Dienst entscheiden lassen, welche Gruppe von Aufgaben mit ähnlichen Tags gesendet werden soll.

Batchverarbeitung mit Tags kann sehr wirkungsvoll sein. Da Tags während der Ausführung Ihrer Anwendung dynamisch generiert werden können, kann ein Worker die neuen Spiel-IDs ohne besonderen Aufwand verarbeiten.

So gehts weiter