Mengonfigurasi antrean Cloud Tasks

Halaman ini menjelaskan cara mengonfigurasi antrean Cloud Tasks menggunakan perintah gcloud dari Google Cloud CLI.

Ringkasan

Anda dapat mengonfigurasi antrean Cloud Tasks saat Anda membuat antrean atau kapan saja setelahnya, dan konfigurasi akan diterapkan pada semua tugas dalam antrean tersebut.

Ada tiga aspek dasar dalam mengonfigurasi antrean Anda:

Pemilihan rute tingkat antrean

Mengonfigurasi perutean di tingkat antrean akan menggantikan perutean yang ditetapkan di tingkat tugas. Hal ini berguna jika Anda ingin menggunakan Cloud Tasks sebagai buffer di depan layanan target, atau jika Anda perlu mengubah pemilihan rute untuk semua tugas dalam antrean.

Perutean tingkat antrean berlaku untuk:

  • Tugas yang saat ini berada dalam antrean
  • Tugas yang ditambahkan ke antrean setelah perutean tingkat antrean ditetapkan

Batasan

Perutean level antrean tidak kompatibel dengan kunci enkripsi yang dikelola pelanggan (CMEK) Cloud Key Management Service (Cloud KMS). Jika CMEK diaktifkan, Anda tidak dapat:

  • Membuat tugas pada antrean yang memiliki perutean tingkat antrean
  • Menerapkan pemilihan rute tingkat antrean

Mengonfigurasi pemilihan rute tingkat antrean untuk tugas HTTP

Menerapkan pemilihan rute tingkat antrean

Anda dapat mengonfigurasi antrean untuk mengganti perutean tingkat tugas saat membuat antrean atau saat memperbarui antrean. Untuk mengonfigurasi perutean tingkat antrean, tetapkan parameter uriOverride antrean ke rute pilihan Anda. Jika Anda menerapkan pemilihan rute tingkat antrean sebagai update pada antrean yang ada, jeda antrean sebelum menerapkan perubahan dan tunggu satu menit setelah menerapkan perubahan untuk melanjutkan antrean. Diperlukan waktu hingga satu menit agar konfigurasi baru diterapkan. Jadi, menunggu untuk melanjutkan antrean membantu mencegah tugas dikirim dengan konfigurasi lama.

Memperbarui atau menghapus pemilihan rute tingkat antrean

  1. Jeda antrean.

    Konsol

    Untuk menjeda antrean menggunakan konsol Google Cloud:

    1. Buka halaman antrean Cloud Tasks di konsol.

      Buka halaman antrean Cloud Tasks

    2. Pilih nama antrean yang ingin Anda jeda, lalu klik Jeda antrean.

    3. Konfirmasi tindakan.

    gcloud

    gcloud tasks queues pause QUEUE_ID
    

    Ganti QUEUE_ID dengan ID antrean Anda.

  2. Perbarui atau hapus pemilihan rute tingkat antrean.

    • Untuk memperbarui pemilihan rute tingkat antrean, tetapkan parameter uriOverride ke rute yang telah Anda perbarui.

    • Untuk menghapus perutean tingkat antrean menggunakan REST atau RPC API:

      • REST API: Kirim permintaan patch untuk antrean dengan payload kosong dan parameter updateMask yang ditetapkan ke httpTarget.

      • RPC API: Kirim updateQueueRequest untuk antrean dengan payload kosong dan parameter update_mask yang ditetapkan ke http_target.

    Contoh berikut menggunakan REST API untuk memperbarui tugas host yang dirutekan ke:

    curl -X PATCH -d @- -i \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -H "Content-Type: application/json" \
    "https://cloudtasks.googleapis.com/v2beta3/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID?updateMask=httpTarget.uriOverride" << EOF
    {
    "httpTarget": {"uriOverride":{"host":"NEW_HOST"}}
    }
    EOF
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda. Anda bisa mendapatkannya dengan menjalankan perintah berikut di terminal Anda:
      gcloud config get-value project
    • LOCATION: Lokasi antrean Anda.
    • QUEUE_ID: ID antrean Anda.
    • ACCESS_TOKEN: Token akses Anda. Anda bisa mendapatkannya dengan menjalankan perintah berikut di terminal:

      1. gcloud auth application-default login
      2. gcloud auth application-default print-access-token
    • NEW_HOST: Host baru yang Anda inginkan menjadi tujuan rute.

  3. Tunggu satu menit.

    Diperlukan waktu hingga satu menit agar konfigurasi baru diterapkan. Jadi, menunggu untuk melanjutkan antrean membantu mencegah tugas dikirim dengan konfigurasi lama.

  4. Lanjutkan antrean.

    Konsol

    Untuk melanjutkan antrean menggunakan konsol Google Cloud:

    1. Buka halaman antrean Cloud Tasks di konsol.

      Buka halaman antrean Cloud Tasks

    2. Pilih nama antrean yang ingin Anda jeda, lalu klik Lanjutkan antrean.

    3. Konfirmasi tindakan.

    gcloud

    gcloud tasks queues resume QUEUE_ID
    

    Ganti QUEUE_ID dengan ID antrean Anda.

Mengonfigurasi pemilihan rute tingkat antrean untuk tugas App Engine

Untuk mengonfigurasi perutean tingkat antrean untuk tugas App Engine, tetapkan parameter appEngineRoutingOverride antrean ke layanan dan versi App Engine pilihan Anda.

Untuk menyiapkan perutean tingkat antrean non-default ini dan mengganti perutean tingkat tugas apa pun, Anda dapat menggunakan gcloud:

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

Ganti kode berikut:

  • SERVICE: layanan pekerja App Engine yang bertanggung jawab untuk penanganan tugas.
  • VERSION: versi aplikasi.

Misalnya, jika Anda menyiapkan layanan pekerja SERVICE untuk menangani semua tugas dalam antrean, Anda dapat mengarahkan rute ke layanan tersebut dan versi default:

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

Jelaskan antrean:

    gcloud tasks queues describe QUEUE_ID --location=LOCATION

Ganti kode berikut:

  • QUEUE_ID: ID antrean (nama pendeknya)
  • LOCATION: lokasi antrean

Outputnya akan terlihat seperti ini:

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

Menghapus pemilihan rute tingkat antrean untuk target App Engine

Saat perutean tingkat antrean dihapus, perutean tingkat tugas berlaku untuk tugas yang saat ini ada dalam antrean dan tugas yang ditambahkan ke antrean di masa mendatang. Untuk menghapus pemilihan rute tingkat antrean, jalankan perintah berikut:

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

Menentukan batas kapasitas

Anda dapat menetapkan tingkat maksimum dan jumlah tugas serentak yang dapat dikirimkan oleh antrean.

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

Ganti kode berikut:

  • DISPATCH_RATE: tingkat pengiriman (ini adalah tingkat saat token di bucket dimuat ulang). Dalam kondisi dengan aliran tugas yang relatif stabil, ini setara dengan kecepatan pengiriman tugas.
  • MAX_RUNNING: jumlah maksimum tugas dalam antrean yang dapat dijalankan sekaligus.

Misalnya, jika membuat antrean tanpa menetapkan parameter apa pun, Anda dapat memperbarui jumlah maksimum tugas serentak dengan memanggil:

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

Describe antrean:

  gcloud tasks queues describe QUEUE_ID --location=LOCATION

Ganti kode berikut:

  • QUEUE_ID: ID antrean (nama pendeknya)
  • LOCATION: lokasi antrean

Output harus berupa:

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

Menentukan kecepatan pemrosesan menggunakan perintah gcloud dibandingkan menggunakan queue.yaml

Pendekatan Cloud Tasks API untuk menentukan kecepatan pemrosesan antrean sedikit berbeda dengan pendekatan yang diambil menggunakan upload file queue.yaml, meskipun kedua metode tersebut menghasilkan antrean menggunakan mekanisme dasar yang sama.

Pada kedua kasus tersebut, antrean menggunakan algoritma token bucket untuk mengontrol tingkat eksekusi tugas. Setiap antrean yang diberi nama memiliki sebuah bucket yang menyimpan token-nya.

Setiap kali aplikasi Anda menjalankan sebuah tugas, token akan dihapus dari bucket. Antrean akan terus memproses tugas hingga bucket-nya kehabisan token. Sistem akan mengisi ulang bucket dengan token baru secara terus-menerus berdasarkan tarif max_dispatches_per_second yang Anda tentukan untuk antrean. Jika antrean berisi tugas yang akan diproses, dan bucket antrean berisi token, sistem secara bersamaan akan memproses tugas sebanyak token yang ada, hingga nilai max_concurrent_dispatches yang telah Anda tetapkan.

Beban yang tidak merata dapat memungkinkan jumlah token dalam bucket meningkat secara signifikan, yang dapat menyebabkan burst pemrosesan saat burst permintaan kemudian masuk. Dalam hal ini, antrean Anda mungkin mengalami tingkat pengiriman sebenarnya yang melebihi kecepatan max_dispatches_per_second, memakai resource sistem, dan bersaing dengan permintaan layanan pengguna. Jika Anda menggunakan antrean untuk mengelola kecepatan pengiriman berdasarkan SLA yang relatif lambat untuk layanan downstream, hal ini dapat menyebabkan error seperti HTTP 429 (Terlalu Banyak Permintaan) atau 503 (Layanan Tidak Tersedia).

Saat menggunakan metode Cloud Tasks API, Anda memiliki dua kolom untuk menentukan tingkat pengiriman antrean:

  • max_dispatches_per_second
  • max_concurrent_dispatches

Kolom ketiga, max_burst_size, dihitung oleh sistem berdasarkan nilai yang Anda tetapkan untuk max_dispatches_per_second.

Saat menggunakan metode queue.yaml, Anda dapat menetapkan ketiga elemen:

  • max_concurrent_requests, yang setara dengan max_concurrent_dispatches
  • rate, yang setara dengan max_dispatches_per_second
  • bucket_size, yang setara dengan max_burst_size

Pada umumnya, menggunakan metode Cloud Tasks API dan mengizinkan sistem menetapkan max_burst_size akan menghasilkan kecepatan yang sangat efisien untuk mengelola burst permintaan. Namun, dalam beberapa kasus, terutama jika kecepatan yang diinginkan relatif lambat, baik penggunaan metode queue.yaml untuk menetapkan bucket_size secara manual ke nilai yang kecil maupun menyetel max_concurrent_dispatches ke nilai kecil melalui Cloud Tasks API dapat memberi Anda lebih banyak kontrol.

Menyetel parameter percobaan ulang

Jika tugas tidak berhasil diselesaikan, Cloud Tasks akan mencoba kembali tugas tersebut dengan backoff eksponensial sesuai dengan parameter yang telah Anda tetapkan. Anda dapat menentukan jumlah maksimum percobaan ulang tugas yang gagal dalam antrean, menetapkan batas waktu untuk upaya percobaan ulang, dan mengontrol interval antar-percobaan.

  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

Ganti kode berikut:

  • MAX_ATTEMPTS: jumlah maksimum percobaan untuk satu tugas, termasuk upaya pertama. Anda dapat mengizinkan percobaan ulang tanpa batas dengan menyetel tanda ini ke unlimited.
  • MIN_INTERVAL: jumlah waktu tunggu minimum di antara upaya percobaan ulang. Nilai harus berupa string yang diakhiri dengan "s," seperti 5s.
  • MAX_INTERVAL: jumlah waktu tunggu maksimum antara upaya percobaan ulang. Nilai harus berupa string yang diakhiri dengan "s," seperti 5s.
  • MAX_DOUBLINGS: frekuensi maksimum interval antara percobaan ulang tugas yang gagal akan dilipatgandakan sebelum peningkatan menjadi konstan.
  • MAX_RETRY_DURATION: jumlah waktu maksimum untuk mencoba ulang tugas yang gagal, yang diukur dari saat tugas pertama kali dicoba. Nilainya harus berupa string yang diakhiri dengan "s," seperti 5s.

Verifikasi bahwa antrean Anda telah berhasil dikonfigurasi:

    gcloud tasks queues describe QUEUE_ID --location=LOCATION

Ganti kode berikut:

  • QUEUE_ID: ID antrean (nama pendeknya)
  • LOCATION: lokasi antrean

Langkah selanjutnya