Cloud Tasks-Warteschlangen konfigurieren

Auf dieser Seite wird beschrieben, wie Sie Cloud Tasks-Warteschlangen mit dem Befehl gcloud der Google Cloud CLI konfigurieren.

Überblick

Sie können die Cloud Tasks-Warteschlange während ihrer Erstellung oder später konfigurieren. Die Konfiguration gilt für alle Aufgaben in dieser Warteschlange.

Beim Konfigurieren von Warteschlangen sind drei grundlegende Aspekte zu berücksichtigen:

Routing auf Warteschlangenebene

Das Konfigurieren des Routings auf Warteschlangenebene überschreibt das Routing, das auf Aufgabenebene festgelegt wurde. Dies ist nützlich, wenn Sie Cloud Tasks als Puffer vor Ihrem Zieldienst verwenden oder das Routing für alle Aufgaben in einer Warteschlange ändern müssen.

Das Routing auf Warteschlangenebene gilt für:

  • Aufgaben, die sich derzeit in der Warteschlange befinden
  • Aufgaben, die der Warteschlange hinzugefügt werden, nachdem das Routing auf Warteschlangenebene festgelegt wurde

Beschränkungen

Das Routing auf Warteschlangenebene ist nicht mit vom Kunden verwalteten Verschlüsselungsschlüsseln (CMEK) des Cloud Key Management Service (Cloud KMS) kompatibel. Wenn CMEK aktiviert ist, ist Folgendes nicht möglich:

  • Aufgaben in einer Warteschlange mit Routing auf Warteschlangenebene erstellen
  • Routing auf Warteschlangenebene anwenden

Routing auf Warteschlangenebene für HTTP-Aufgaben konfigurieren

Routing auf Warteschlangenebene anwenden

Sie können eine Warteschlange so konfigurieren, dass das Routing auf Aufgabenebene beim Erstellen oder Aktualisieren der Warteschlange überschrieben wird. Zum Konfigurieren des Routings auf Warteschlangenebene legen Sie den Parameter uriOverride der Warteschlange auf Ihre bevorzugte Route fest. Wenn Sie das Routing auf Warteschlangenebene als Aktualisierung auf eine vorhandene Warteschlange anwenden, halten Sie die Warteschlange an, bevor die Änderungen übernommen werden. Warten Sie nach dem Übernehmen der Änderungen eine Minute, um die Warteschlange fortzusetzen. Es kann bis zu einer Minute dauern, bis die neue Konfiguration wirksam wird. Wenn Sie mit dem Fortsetzen der Warteschlange warten, wird dadurch verhindert, dass Aufgaben mit der alten Konfiguration weitergeleitet werden.

Routing auf Warteschlangenebene aktualisieren oder entfernen

  1. Wiedergabeliste anhalten.

    Console

    So pausieren Sie die Warteschlange über die Google Cloud Console:

    1. Öffnen Sie in der Console die Seite mit den Cloud Tasks-Warteschlangen.

      Weiter zur Seite mit den Cloud Tasks-Warteschlangen

    2. Wählen Sie den Namen der Warteschlange aus, die Sie anhalten möchten, und klicken Sie auf Warteschlange anhalten.

    3. Bestätigen Sie die Aktion.

    gcloud

    gcloud tasks queues pause QUEUE_ID
    

    Ersetzen Sie QUEUE_ID durch die ID der Warteschlange.

  2. Routing auf Warteschlangenebene aktualisieren oder entfernen.

    • Wenn Sie das Routing auf Warteschlangenebene aktualisieren möchten, legen Sie den Parameter uriOverride auf die aktualisierte Route fest.

    • So entfernen Sie das Routing auf Warteschlangenebene mithilfe der REST API oder der RPC API:

      • REST API:Senden Sie eine patch-Anfrage für die Warteschlange mit leerer Nutzlast und dem Parameter updateMask auf httpTarget.

      • RPC API: Senden Sie einen updateQueueRequest für die Warteschlange mit einer leeren Nutzlast und dem Parameter update_mask auf http_target.

    Im folgenden Beispiel wird die REST API verwendet, um die Hostaufgaben zu aktualisieren, an die 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"}}
    }
    EOF
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: ID Ihres Google Cloud-Projekts. Sie können dies abrufen, indem Sie folgenden Befehl in Ihrem Terminal ausführen:
      gcloud config get-value project
    • LOCATION: der Speicherort der Wiedergabeliste.
    • QUEUE_ID: Die ID der Warteschlange.
    • ACCESS_TOKEN: Ihr Zugriffstoken. Sie können dies abrufen, indem Sie folgenden Befehl in Ihrem Terminal ausführen:

      1. gcloud auth application-default login
      2. gcloud auth application-default print-access-token
    • NEW_HOST: Der neue Host, an den die Warteschlange weitergeleitet werden soll.

  3. Warte eine Minute.

    Es kann bis zu einer Minute dauern, bis die neue Konfiguration wirksam wird. Wenn Sie auf das Fortsetzen der Warteschlange warten, wird dadurch verhindert, dass Aufgaben mit der alten Konfiguration weitergeleitet werden.

  4. Die Warteschlange wird fortgesetzt.

    Console

    So setzen Sie die Warteschlange über die Google Cloud Console fort:

    1. Öffnen Sie in der Console die Seite mit den Cloud Tasks-Warteschlangen.

      Weiter zur Seite mit den Cloud Tasks-Warteschlangen

    2. Wählen Sie den Namen der Warteschlange aus, die Sie anhalten möchten, und klicken Sie auf Warteschlange fortsetzen.

    3. Bestätigen Sie die Aktion.

    gcloud

    gcloud tasks queues resume QUEUE_ID
    

    Ersetzen Sie QUEUE_ID durch die ID der Warteschlange.

Routing auf Warteschlangenebene für App Engine-Aufgaben konfigurieren

Wenn Sie das Routing auf Warteschlangenebene für App Engine-Aufgaben konfigurieren möchten, setzen Sie den Parameter appEngineRoutingOverride der Warteschlange auf Ihren bevorzugten App Engine-Dienst und Ihre bevorzugte Version.

Zum Einrichten dieses nicht standardmäßigen Routings auf Warteschlangenebene und zum Überschreiben des Routings auf Aufgabenebene können Sie gcloud verwenden:

  gcloud tasks queues update QUEUE_ID\
      --routing-override=service:SERVICE,version:VERSION

Ersetzen Sie Folgendes:

  • SERVICE: der für die Aufgabenverarbeitung zuständige App Engine-Worker-Dienst.
  • VERSION ist die Version der App.

Wenn Sie beispielsweise den Worker-Dienst SERVICE einrichten, der alle Aufgaben in einer Warteschlange verarbeitet, können Sie das Routing an diesen Dienst und die Standardversion konfigurieren:

  gcloud tasks queues update QUEUE_ID \
      --routing-override=service:SERVICE

Beschreiben Sie die Warteschlange:

    gcloud tasks queues describe QUEUE_ID --location=LOCATION

Ersetzen Sie Folgendes:

  • QUEUE_ID: die Warteschlangen-ID (der Kurzname)
  • LOCATION: der Speicherort der Warteschlange

Die Ausgabe sollte 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

Routing auf Warteschlangenebene für App Engine-Ziele entfernen

Wenn das Routing auf Warteschlangenebene entfernt wird, gilt das Routing auf Aufgabenebene sowohl für Aufgaben, die sich derzeit in der Warteschlange befinden, als auch für Aufgaben, die der Warteschlange zukünftig hinzugefügt werden. Führen Sie den folgenden Befehl aus, um das Routing auf Warteschlangenebene zu entfernen:

  gcloud tasks queues update QUEUE_ID \
      --clear-routing-override

Definieren Sie Ratenlimits

Sie können die maximale Rate und die Anzahl gleichzeitiger Aufgaben festlegen, die von einer Warteschlange weitergeleitet werden können.

  gcloud tasks queues update QUEUE_ID \
      --max-dispatches-per-second=DISPATCH_RATE \
      --max-concurrent-dispatches=MAX_RUNNING

Ersetzen Sie Folgendes:

  • DISPATCH_RATE: Die Weiterleitungsrate. Dies ist die Rate, mit der Tokens im Bucket aktualisiert werden. Unter Bedingungen mit einem relativ gleichmäßigen Aufgabenfluss entspricht dies der Geschwindigkeit, mit der Aufgaben weitergeleitet werden.
  • MAX_RUNNING: 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 mit dem folgenden Befehl die maximale Anzahl gleichzeitiger Aufgaben aktualisieren:

  gcloud tasks queues update QUEUE_ID \
          --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES

Describe die Warteschlange:

  gcloud tasks queues describe QUEUE_ID --location=LOCATION

Ersetzen Sie Folgendes:

  • QUEUE_ID: die Warteschlangen-ID (der Kurzname)
  • LOCATION: der Speicherort der Warteschlange

Die Ausgabe sollte 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

Verarbeitungsraten mit gcloud-Befehlen im Vergleich zu queue.yaml definieren

Der Cloud Tasks API-Ansatz zum Definieren von Verarbeitungsraten für Warteschlangen unterscheidet sich geringfügig vom Upload von queue.yaml-Dateien, obwohl beide Methoden zu Warteschlangen mit demselben zugrunde liegenden Mechanismus führen.

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 mit den zugehörigen Tokens.

Jedes Mal, wenn Ihre Anwendung eine Aufgabe ausführt, wird ein Token aus dem Bucket entfernt. Die Warteschlange verarbeitet weiterhin Aufgaben, bis keine Tokens mehr im Bucket vorhanden sind. Das System füllt den Bucket auf der Grundlage der max_dispatches_per_second-Rate, die Sie für die Warteschlange festlegen, kontinuierlich mit neuen Tokens auf. Wenn Ihre Warteschlange zu verarbeitende Aufgaben und der Bucket der Warteschlange Tokens enthält, verarbeitet das System gleichzeitig dieselbe Anzahl von Aufgaben und Tokens bis zu dem von Ihnen festgelegten Wert max_concurrent_dispatches.

Ein ungleichmäßiger Ladevorgang kann dazu führen, dass die Anzahl der Tokens im Bucket erheblich anwächst, was zu Bursts der Verarbeitung führen kann, wenn dann eine Reihe von Anfragen eingeht. In diesem Fall kann die Warteschlange eine tatsächliche Weiterleitungsrate aufweisen, die Ihre max_dispatches_per_second-Rate ü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 HTTP-Fehlern wie 429 (zu viele Anfragen) oder 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_second
  • max_concurrent_dispatches

Ein drittes Feld, max_burst_size, wird vom System auf der Grundlage des Werts berechnet, den Sie für max_dispatches_per_second festgelegt haben.

Wenn Sie die Methode queue.yaml verwenden, können Sie alle drei Elemente festlegen:

  • max_concurrent_requests, was max_concurrent_dispatches entspricht
  • rate, was max_dispatches_per_second entspricht
  • bucket_size, was max_burst_size entspricht

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 gewünschte Rate relativ langsam ist, können Sie jedoch entweder bucket_size mit der Methode queue.yaml manuell auf einen kleinen Wert setzen oder max_concurrent_dispatches über die Cloud Tasks API auf einen kleinen Wert festlegen, um so mehr Kontrolle zu erhalten.

Wiederholungsparameter festlegen

Wenn eine Aufgabe nicht erfolgreich abgeschlossen wurde, wiederholt Cloud Tasks die Aufgabe mit exponentiellem Backoff gemäß den von Ihnen festgelegten Parametern. Sie können die maximale Anzahl der Wiederholungen von fehlgeschlagenen Warteschlangenaufgaben, ein Zeitlimit für Wiederholungsversuche und das Intervall zwischen den Versuchen festlegen.

  gcloud tasks queues update QUEUE_ID \
      --max-attempts=MAX_ATTEMPTS \
      --min-backoff=MIN_INTERVAL \
      --max-backoff=MAX_INTERVAL \
      --max-doublings=MAX_DOUBLINGS \
      --max-retry-duration=MAX_RETRY_DURATION

Ersetzen Sie Folgendes:

  • MAX_ATTEMPTS: Die maximale Anzahl der Versuche für eine Aufgabe, einschließlich des ersten Versuchs. Sie können unbegrenzte Wiederholungen zulassen, indem Sie dieses Flag auf unlimitedfestlegen.
  • MIN_INTERVAL: Die Mindestwartezeit zwischen Wiederholungsversuchen. Der Wert muss ein String sein, der mit "s" endet, zum Beispiel 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 Häufigkeit, mit der das Intervall zwischen fehlgeschlagenen Aufgabenwiederholungen verdoppelt wird, bevor die Erhöhung konstant wird.
  • MAX_RETRY_DURATION: Die maximale Zeit für die Wiederholung einer fehlgeschlagenen Aufgabe, gemessen ab dem ersten Versuch. Der Wert muss ein String sein, der mit „s“ endet, z. B. 5s.

So können Sie überprüfen, ob die Warteschlange erfolgreich konfiguriert wurde:

    gcloud tasks queues describe QUEUE_ID --location=LOCATION

Ersetzen Sie Folgendes:

  • QUEUE_ID: die Warteschlangen-ID (der Kurzname)
  • LOCATION: der Speicherort der Warteschlange

Nächste Schritte