Mit Cloud Tasks können Sie die Aufgabenausführung verwalten, indem Sie Routing auf Warteschlangenebene
, Limits für die Weiterleitungsrate und
das Wiederholungsverhalten definieren. Sie können diese Einstellungen beim Erstellen einer Warteschlange oder beim Aktualisieren einer vorhandenen Warteschlange konfigurieren. Die Konfigurationsflags, die von entweder
gcloud tasks queues create oder
gcloud tasks queues update verwendet werden, sind
identisch.
Wenn Sie die Authentifizierung auf Warteschlangenebene konfigurieren, wird die Authentifizierung auf Aufgabenebene überschrieben. Weitere Informationen finden Sie unter HTTP-Zielaufgaben mit Authentifizierungstokens verwenden.
Routing auf Warteschlangenebene konfigurieren
Wenn Sie das Routing auf Warteschlangenebene konfigurieren, wird das auf Aufgabenebene festgelegte Routing überschrieben. Das ist nützlich, wenn Sie Cloud Tasks als Puffer vor Ihrem Zieldienst verwenden möchten oder wenn Sie das Routing für alle Aufgaben in einer Warteschlange ändern müssen.
Das Routing auf Warteschlangenebene gilt für:
- Aufgaben in der Warteschlange
- Aufgaben, die der Warteschlange hinzugefügt werden, nachdem das Routing auf Warteschlangenebene festgelegt wurde
Beschränkungen
Das Routing auf Warteschlangenebene ist nicht mit kundenverwalteten Verschlüsselungsschlüsseln (CMEK) des Cloud Key Management Service (Cloud KMS) kompatibel. Wenn CMEK aktiviert ist, können Sie Folgendes nicht tun:
- Aufgaben in einer Warteschlange mit Routing auf Warteschlangenebene erstellen
- Routing auf Warteschlangenebene anwenden
Routing auf Warteschlangenebene für HTTP-Aufgaben konfigurieren
Sie können eine Warteschlange so konfigurieren, dass das Routing auf Aufgabenebene überschrieben wird, entweder beim Erstellen oder beim Aktualisieren der Warteschlange. Wenn Sie das Routing auf Warteschlangenebene konfigurieren möchten, legen Sie den
Parameter
uriOverride
der Warteschlange auf die gewünschte Route fest.
Wenn Sie das Routing auf Warteschlangenebene als Aktualisierung auf eine vorhandene Warteschlange anwenden, pausieren Sie die Warteschlange, bevor Sie die Änderungen anwenden. Warten Sie nach dem Anwenden der Änderungen eine Minute, bevor Sie die Warteschlange fortsetzen.
Pausieren Sie die Warteschlange mit dem folgenden Befehl:
gcloud tasks queues pause QUEUE_ID
Ersetzen Sie
QUEUE_IDdurch die ID Ihrer Warteschlange.Aktualisieren oder entfernen Sie das Routing auf Warteschlangenebene.
Wenn Sie das Routing auf Warteschlangenebene aktualisieren möchten, legen Sie den
uriOverrideParameter auf die aktualisierte Route fest.So entfernen Sie das Routing auf Warteschlangenebene mit der REST API oder der RPC API:
REST API: Senden Sie eine
patchAnfrage für die Warteschlange mit einer leeren Nutzlast und dem ParameterupdateMaskaufhttpTargetgesetzt.RPC API: Senden Sie eine
updateQueueRequestfür die Warteschlange mit einer leeren Nutzlast und dem Parameterupdate_maskaufhttp_targetgesetzt.
Im folgenden Beispiel wird die REST API verwendet, um den Host zu aktualisieren, an den Aufgaben weitergeleitet werden:
curl -X PATCH -d @- -i \ -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID?updateMask=httpTarget.uriOverride" << EOF { "httpTarget": {"uriOverride":{"host":"NEW_HOST"}} } EOFErsetzen Sie Folgendes:
ACCESS_TOKEN: Ihr Zugriffstoken. Sie können es abrufen, indem Sie Folgendes in Ihrem Terminal ausführen:gcloud auth application-default login gcloud auth application-default print-access-token
PROJECT_ID: die ID Ihres Google Cloud Projekts. Sie können sie abrufen, indem Sie Folgendes in Ihrem Terminal ausführen:gcloud config get-value project
LOCATION: der Standort Ihrer Warteschlange.NEW_HOST: der neue Host, an den Ihre Warteschlange weiterleiten soll.
Warten Sie eine Minute.
Es kann bis zu einer Minute dauern, bis die neue Konfiguration wirksam wird. Wenn Sie warten, bevor Sie die Warteschlange fortsetzen, wird verhindert, dass Aufgaben mit der alten Konfiguration weitergeleitet werden.
Setzen Sie die Warteschlange mit dem folgenden Befehl fort:
gcloud tasks queues resume QUEUE_ID
Routing auf Warteschlangenebene für App Engine-Aufgaben konfigurieren
Wenn Sie das Routing auf Warteschlangenebene für App Engine-Aufgaben konfigurieren möchten, legen Sie den
appEngineRoutingOverride
Parameter der Warteschlange auf den gewünschten App Engine-Dienst und die gewünschte Version fest.
Richten Sie das Routing auf Warteschlangenebene ein und überschreiben Sie das Routing auf Aufgabenebene:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE,version:VERSION
Ersetzen Sie Folgendes:
QUEUE_ID: die Warteschlangen-ID (Kurzname).SERVICE: der App Engine-Worker-Dienst, der für die Aufgabenverarbeitung zuständig ist.VERSION: die App-Version.
Wenn Sie beispielsweise einen Worker-Dienst einrichten, um alle Aufgaben in einer Warteschlange zu verarbeiten, können Sie das Routing an diesen Dienst und die Standardversion konfigurieren:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE
Prüfen Sie, ob Ihre Warteschlange erfolgreich konfiguriert wurde, indem Sie den folgenden Befehl ausführen:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Ersetzen Sie
LOCATIONdurch den Standort der Warteschlange.Die Ausgabe sollte in etwa so aussehen:
appEngineRoutingOverride: host: SERVICE.PROJECT_ID.appspot.com service: SERVICE name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: 1000 maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Mit diesem Befehl entfernen Sie das Routing auf Warteschlangenebene:
gcloud tasks queues update QUEUE_ID \ --clear-routing-override
Wenn das Routing auf Warteschlangenebene entfernt wird, wird das Routing auf Aufgabenebene auf Aufgaben in der Warteschlange und auf Aufgaben angewendet, die der Warteschlange in Zukunft hinzugefügt werden.
Definieren Sie Ratenlimits
Das Ratenlimit bestimmt die maximale Rate, mit der Aufgaben von einer Warteschlange weitergeleitet werden können, unabhängig davon, ob es sich um einen ersten Aufgabenversuch oder einen Wiederholungsversuch handelt.
Legen Sie die maximale Rate und die Anzahl gleichzeitiger Aufgaben fest, die von einer Warteschlange weitergeleitet werden können, indem Sie den folgenden Befehl ausführen:
gcloud tasks queues update QUEUE_ID \ --max-dispatches-per-second=DISPATCH_RATE \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Ersetzen Sie Folgendes:
QUEUE_ID: die Warteschlangen-ID (Kurzname).DISPATCH_RATE: die Weiterleitungsrate. Das ist die Rate, mit der Tokens im Bucket aktualisiert werden. Bei Bedingungen mit einem relativ gleichmäßigen Aufgabenfluss entspricht dies der Rate, mit der Aufgaben weitergeleitet werden.MAX_CONCURRENT_DISPATCHES: die maximale Anzahl von Aufgaben in der Warteschlange, die gleichzeitig ausgeführt werden können.
Wenn Sie beispielsweise eine Warteschlange erstellt haben, ohne Parameter festzulegen, können Sie die maximale Anzahl gleichzeitiger Aufgaben aktualisieren, indem Sie den folgenden Befehl ausführen:
gcloud tasks queues update QUEUE_ID \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Prüfen Sie, ob Ihre Warteschlange erfolgreich konfiguriert wurde, indem Sie den folgenden Befehl ausführen:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Ersetzen Sie
LOCATIONdurch den Standort der Warteschlange.Die Ausgabe sollte in etwa so aussehen:
name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: MAX_CONCURRENT_DISPATCHES maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Methoden zum Definieren von Verarbeitungsraten für Warteschlangen
Sie können Verarbeitungsraten für Warteschlangen entweder mit der Cloud Tasks API oder durch Hochladen einer queue.yaml-Datei definieren. Beide Methoden führen zu Warteschlangen, die denselben zugrunde liegenden Mechanismus verwenden.
In beiden Fällen verwendet die Warteschlange den Token-Bucket Algorithmus, um die Rate der Aufgabenausführung zu steuern. Jede benannte Warteschlange hat einen Bucket, der ihre Tokens enthält.
Jedes Mal, wenn Ihre Anwendung eine Aufgabe ausführt, wird ein Token aus dem Bucket entfernt.
Die Warteschlange verarbeitet Aufgaben so lange, bis der Bucket keine Tokens mehr enthält. Das System füllt den Bucket auf der Grundlage der Rate max_dispatches_per_second, die Sie für die Warteschlange festlegen, kontinuierlich mit neuen Tokens auf. Wenn Ihre Warteschlange zu verarbeitende Aufgaben enthält und der Bucket der Warteschlange Tokens enthält, verarbeitet das System gleichzeitig so viele Aufgaben, wie Tokens vorhanden sind, bis zum Wert max_concurrent_dispatches, den Sie festgelegt haben.
Eine ungleichmäßige Last kann dazu führen, dass die Anzahl der Tokens im Bucket erheblich anwächst, was zu Verarbeitungs-Bursts führen kann, wenn eine Reihe von Anfragen eingeht. In diesem Fall kann Ihre Warteschlange eine tatsächliche Weiterleitungsrate aufweisen, die Ihre Rate max_dispatches_per_second übersteigt, Systemressourcen verbraucht und mit Anfragen zur Nutzerverwaltung konkurriert. In Fällen, in denen Sie Warteschlangen zur Verwaltung von Weiterleitungsraten auf der Grundlage von relativ langsamen SLAs für nachgelagerte Dienste verwenden, kann dies zu Fehlern wie HTTP 429 (Zu viele Anfragen) oder HTTP 503 (Dienst nicht verfügbar) führen.
Wenn Sie eine Cloud Tasks API-Methode verwenden, haben Sie zwei Felder, um die Warteschlangen-Weiterleitungsrate zu definieren:
max_dispatches_per_secondmax_concurrent_dispatches
Ein drittes Feld,
max_burst_size, wird vom System basierend auf dem Wert berechnet, den Sie fürmax_dispatches_per_secondfestgelegt haben. Weitere Informationen finden Sie unterRateLimits-Nachrichten.Wenn Sie die
queue.yamlMethode, können Sie alle drei Elemente festlegen:max_concurrent_requests, wasmax_concurrent_dispatchesentsprichtrate, wasmax_dispatches_per_secondentsprichtbucket_size, wasmax_burst_sizeentspricht
In den meisten Fällen führt die Verwendung der Cloud Tasks API-Methode und die Einstellung des Systems auf max_burst_size zu einer sehr effizienten Rate für die Verwaltung von Anfrage-Bursts. In einigen Fällen, insbesondere wenn die benötigte Rate jedoch relativ langsam ist, können Sie entweder die Methode queue.yaml verwenden, um bucket_size manuell auf einen kleinen Wert zu setzen, oder über die Cloud Tasks API auf einen kleinen Wert für max_concurrent_dispatches setzen, was Ihnen mehr Kontrolle bieten kann.
Wiederholungsparameter festlegen
Wenn eine Aufgabe nicht erfolgreich abgeschlossen wird, wiederholt Cloud Tasks die Aufgabe mit exponentiellem Backoff gemäß den von Ihnen festgelegten Parametern. Nachdem eine Aufgabe erfolgreich ausgeführt wurde, wird sie aus der Warteschlange entfernt. In allen Fällen gilt auch das maximale Limit für die Aufgabenaufbewahrung.
Optional können Sie eine Wiederholungskonfiguration auf Aufgabenebene angeben, die die Wiederholungskonfiguration auf Warteschlangenebene für die Aufgabe überschreibt. Weitere Informationen finden Sie unter Wiederholungsparameter für eine Aufgabe festlegen.
Geben Sie die maximale Anzahl von Wiederholungsversuchen für fehlgeschlagene Aufgaben in der Warteschlange an, legen Sie ein Zeitlimit für Wiederholungsversuche fest und steuern Sie das Intervall zwischen den Versuchen, indem Sie den folgenden Befehl ausführen:
gcloud tasks queues update QUEUE_ID \ --max-attempts=MAX_ATTEMPTS \ --max-retry-duration=MAX_RETRY_DURATION \ --min-backoff=MIN_INTERVAL \ --max-backoff=MAX_INTERVAL \ --max-doublings=MAX_DOUBLINGS
Ersetzen Sie Folgendes:
QUEUE_ID: die Warteschlangen-ID (Kurzname).MAX_ATTEMPTS: die maximale Anzahl von Versuchen für eine Aufgabe, einschließlich des ersten. Wenn Sie unbegrenzte Wiederholungsversuche zulassen möchten, legen Sie diesen Wert auf-1fest.MAX_RETRY_DURATIONgilt auch dann, wennMAX_ATTEMPTSerreicht oder auf-1gesetzt wurde.MAX_RETRY_DURATION: die Höchstdauer für die Wiederholung einer fehlgeschlagenen Aufgabe, die ab dem ersten Versuch der Aufgabe gemessen wird. Der Wert muss ein String sein, der mit „s“ endet, z. B.5s. Wenn Sie eine unbegrenzte Dauer angeben möchten, legen Sie diesen Wert auf0sfest.MAX_ATTEMPTSgilt auch dann, wennMAX_RETRY_DURATIONerreicht oder auf0sgesetzt wurde.
MIN_INTERVAL: die Mindestwartezeit zwischen Wiederholungsversuchen. Der Wert muss ein String sein, der mit „s“ endet, z. B.5s.MAX_INTERVAL: die maximale Wartezeit zwischen Wiederholungsversuchen. Der Wert muss ein String sein, der mit „s“ endet, z. B.5s.MAX_DOUBLINGS: die maximale Anzahl von Malen, die das Intervall zwischen Wiederholungsversuchen für fehlgeschlagene Aufgaben verdoppelt wird, bevor die Erhöhung konstant wird. Das Wiederholungsintervall einer Aufgabe beginnt beiMIN_INTERVAL, wird dannMAX_DOUBLINGS-mal verdoppelt, dann linear erhöht und schließlich in Intervallen vonMAX_INTERVALbis zuMAX_ATTEMPTS-mal wiederholt.Wenn
MIN_INTERVALbeispielsweise10s,MAX_INTERVAL300sundMAX_DOUBLINGS3ist, wird das Wiederholungsintervall3Mal verdoppelt, linear um 2^3 * 10s erhöht und dann in Intervallen vonMAX_INTERVALwiederholt, bis die AufgabeMAX_ATTEMPTSMal versucht wurde: 10s, 20s, 40s, 80s, 160s, 240s, 300s, 300s usw.
Weitere Parameterdetails finden Sie in den
RetryConfig Einstellungen für die Queue Ressource.
Prüfen Sie, ob Ihre Warteschlange erfolgreich konfiguriert wurde, indem Sie den folgenden Befehl ausführen:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Ersetzen Sie
LOCATIONdurch den Standort der Warteschlange.Die Ausgabe sollte die von Ihnen festgelegten Wiederholungsparameter enthalten.
Nächste Schritte
- Weitere Informationen zum Erstellen von HTTP-Zielaufgaben
- Weitere Informationen zum Erstellen von App Engine-Aufgaben.
- Weitere Informationen zur Warteschlangenverwaltung finden Sie in der Referenz zur RPC API.
- Weitere Informationen zur Warteschlangenverwaltung finden Sie in der Referenz zur REST API.