Anda dapat mengonfigurasi antrean Cloud Tasks saat membuat antrean atau kapan saja setelahnya. Konfigurasi diterapkan ke semua tugas dalam antrean tersebut.
Ada tiga aspek dasar untuk mengonfigurasi antrean:
Mengonfigurasi pemilihan rute tingkat antrean
Mengonfigurasi pemilihan rute di tingkat antrean akan mengganti pemilihan rute 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.
Pemilihan rute tingkat antrean berlaku untuk:
- Tugas yang ada dalam antrean
- Tugas yang ditambahkan ke antrean setelah pemilihan rute tingkat antrean ditetapkan
Batasan
Pemilihan rute tingkat antrean tidak kompatibel dengan kunci enkripsi yang dikelola pelanggan (CMEK) Cloud Key Management Service (Cloud KMS). Jika CMEK diaktifkan, Anda tidak dapat melakukan hal berikut:
- Membuat tugas di antrean yang memiliki pemilihan rute tingkat antrean
- Menerapkan pemilihan rute tingkat antrean
Mengonfigurasi pemilihan rute tingkat antrean untuk tugas HTTP
Anda dapat mengonfigurasi antrean untuk mengganti pemilihan rute tingkat tugas saat membuat atau memperbarui antrean. Untuk mengonfigurasi pemilihan rute tingkat antrean, tetapkan parameter uriOverride
antrean ke rute pilihan Anda.
Jika Anda menerapkan pemilihan rute tingkat antrean sebagai pembaruan pada antrean yang ada, jeda antrean sebelum menerapkan perubahan dan tunggu satu menit setelah menerapkan perubahan untuk melanjutkan antrean.
Jeda antrean dengan menjalankan perintah berikut:
gcloud tasks queues pause QUEUE_ID
Ganti
QUEUE_ID
dengan ID antrean Anda.Perbarui atau hapus perutean tingkat antrean.
Untuk memperbarui pemilihan rute tingkat antrean, tetapkan parameter
uriOverride
ke rute yang diperbarui.Untuk menghapus perutean tingkat antrean menggunakan REST atau RPC API:
REST API: Kirim permintaan
patch
untuk antrean dengan payload kosong dan parameterupdateMask
ditetapkan kehttpTarget
.RPC API: Kirim
updateQueueRequest
untuk antrean dengan payload kosong dan parameterupdate_mask
ditetapkan kehttp_target
.
Contoh berikut menggunakan REST API untuk memperbarui host yang menjadi tujuan tugas:
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
Ganti kode berikut:
ACCESS_TOKEN
: token akses Anda. Anda bisa mendapatkannya dengan menjalankan perintah berikut di terminal:gcloud auth application-default login gcloud auth application-default print-access-token
PROJECT_ID
: ID project Google Cloud Anda. Anda bisa mendapatkannya dengan menjalankan perintah berikut di terminal:gcloud config get-value project
LOCATION
: lokasi antrean Anda.NEW_HOST
: host baru yang Anda inginkan untuk dirutekan oleh antrean.
Tunggu satu menit.
Diperlukan waktu hingga satu menit hingga konfigurasi baru diterapkan. Menunggu untuk melanjutkan antrean membantu mencegah tugas dikirim dengan konfigurasi lama.
Lanjutkan antrean dengan menjalankan perintah berikut:
gcloud tasks queues resume QUEUE_ID
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.
Siapkan pemilihan rute tingkat antrean dan ganti pemilihan rute tingkat tugas:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE,version:VERSION
Ganti kode berikut:
QUEUE_ID
: ID antrean (nama pendeknya).SERVICE
: layanan pekerja App Engine yang bertanggung jawab untuk penanganan tugas.VERSION
: versi aplikasi.
Misalnya, jika menyiapkan layanan pekerja untuk menangani semua tugas dalam antrean, Anda dapat merutekan ke layanan tersebut dan versi default:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE
Pastikan antrean Anda berhasil dikonfigurasi dengan menjalankan perintah berikut:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Ganti
LOCATION
dengan lokasi antrean.Outputnya akan mirip dengan berikut 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
Untuk menghapus pemilihan rute tingkat antrean, jalankan perintah berikut:
gcloud tasks queues update QUEUE_ID \ --clear-routing-override
Saat pemilihan rute tingkat antrean dihapus, pemilihan rute tingkat tugas akan diterapkan ke tugas dalam antrean dan tugas yang ditambahkan ke antrean pada masa mendatang.
Menentukan batas kapasitas
Batas kapasitas menentukan kecepatan maksimum saat tugas dapat dikirim oleh antrean, terlepas dari apakah pengiriman tersebut merupakan upaya tugas pertama atau percobaan ulang.
Tetapkan kecepatan maksimum dan jumlah tugas serentak yang dapat dikirim oleh antrean dengan menjalankan perintah berikut:
gcloud tasks queues update QUEUE_ID \ --max-dispatches-per-second=DISPATCH_RATE \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Ganti kode berikut:
QUEUE_ID
: ID antrean (nama singkatnya).DISPATCH_RATE
: kecepatan pengiriman. Ini adalah frekuensi pembaruan token di bucket. Dalam kondisi saat ada alur tugas yang relatif stabil, ini adalah setara dengan kecepatan pengiriman tugas.MAX_CONCURRENT_DISPATCHES
: 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 menjalankan perintah berikut:
gcloud tasks queues update QUEUE_ID \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Pastikan antrean Anda berhasil dikonfigurasi dengan menjalankan perintah berikut:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Ganti
LOCATION
dengan lokasi antrean.Outputnya akan mirip dengan berikut ini:
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
Metode untuk menentukan kecepatan pemrosesan antrean
Anda dapat menentukan kecepatan pemrosesan antrean menggunakan Cloud Tasks API atau dengan mengupload file queue.yaml
. Kedua metode tersebut menghasilkan antrean yang menggunakan mekanisme dasar yang sama.
Dalam kedua kasus tersebut, antrean menggunakan algoritma token bucket untuk mengontrol laju eksekusi tugas. Setiap antrean bernama memiliki bucket yang menyimpan tokennya.
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
tingkat max_dispatches_per_second
yang Anda tentukan untuk antrean. Jika antrean Anda
berisi tugas yang akan diproses, dan bucket antrean berisi token, sistem
akan secara bersamaan 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 lonjakan pemrosesan saat lonjakan permintaan
datang. Dalam hal ini, antrean Anda mungkin mengalami kecepatan pengiriman sebenarnya yang melebihi kecepatan max_dispatches_per_second
, yang menghabiskan 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 HTTP 503
(Layanan Tidak Tersedia).
Saat menggunakan metode Cloud Tasks API, Anda memiliki dua kolom untuk menentukan kecepatan pengiriman antrean:
max_dispatches_per_second
max_concurrent_dispatches
Kolom ketiga,
max_burst_size
, dihitung oleh sistem berdasarkan nilai yang Anda tetapkan untukmax_dispatches_per_second
.Saat menggunakan metode
queue.yaml
, Anda dapat menetapkan ketiga elemen tersebut:max_concurrent_requests
, yang setara denganmax_concurrent_dispatches
rate
, yang setara denganmax_dispatches_per_second
bucket_size
, yang setara denganmax_burst_size
Pada umumnya, menggunakan metode Cloud Tasks API dan membiarkan sistem menetapkan
max_burst_size
menghasilkan kecepatan yang sangat efisien untuk mengelola lonjakan permintaan. Namun, dalam beberapa kasus, terutama jika kecepatan yang diperlukan relatif lambat, menggunakan metode queue.yaml
untuk menetapkan bucket_size
secara manual ke nilai yang kecil, atau menetapkan max_concurrent_dispatches
ke nilai yang kecil menggunakan Cloud Tasks API, dapat memberi Anda kontrol yang lebih besar.
Menetapkan 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.
Tentukan frekuensi maksimum untuk mencoba ulang tugas yang gagal dalam antrean, tetapkan batas waktu untuk percobaan ulang, dan kontrol interval antar-percobaan dengan menjalankan perintah berikut:
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
Ganti kode berikut:
QUEUE_ID
: ID antrean (nama singkatnya).MAX_ATTEMPTS
: jumlah maksimum upaya untuk tugas, termasuk upaya pertama. Anda dapat mengizinkan percobaan ulang tanpa batas dengan menetapkan tanda ini ke-1
. Perhatikan bahwa jikaMAX_ATTEMPTS
ditetapkan ke-1
,MAX_RETRY_DURATION
masih diterapkan.MAX_RETRY_DURATION
: jumlah maksimum waktu untuk mencoba kembali tugas yang gagal, diukur dari saat tugas pertama kali dicoba. Nilainya harus berupa string yang diakhiri dengan "s", seperti5s
. Jika ditetapkan ke0
, usia tugas tidak terbatas. Perhatikan bahwa jikaMAX_RETRY_DURATION
ditetapkan ke0
,MAX_ATTEMPTS
masih diterapkan.
MIN_INTERVAL
: jumlah minimum waktu yang harus ditunggu antara upaya percobaan ulang. Nilai harus berupa string yang diakhiri dengan "s", seperti5s
.MAX_INTERVAL
: jumlah maksimum waktu tunggu antara upaya percobaan ulang. Nilai harus berupa string yang diakhiri dengan "s", seperti5s
.MAX_DOUBLINGS
: frekuensi maksimum penggandaan interval antara percobaan ulang tugas yang gagal sebelum peningkatan menjadi konstan. Interval percobaan ulang tugas dimulai padaMIN_INTERVAL
, lalu menggandakan waktuMAX_DOUBLINGS
, lalu meningkat secara linear, dan akhirnya mencoba ulang pada intervalMAX_INTERVAL
hinggaMAX_ATTEMPTS
kali.Misalnya, jika
MIN_INTERVAL
adalah10s
,MAX_INTERVAL
adalah300s
, danMAX_DOUBLINGS
adalah3
, interval percobaan ulang akan digandakan3
kali, meningkat secara linear sebesar 2^3 * 10 detik, lalu mencoba ulang pada intervalMAX_INTERVAL
hingga tugas telah dicobaMAX_ATTEMPTS
kali: 10 detik, 20 detik, 40 detik, 80 detik, 160 detik, 240 detik, 300 detik, 300 detik, dan seterusnya.
Untuk mengetahui detail parameter selengkapnya, lihat setelan
RetryConfig
untuk resourceQueue
.Pastikan antrean Anda berhasil dikonfigurasi dengan menjalankan perintah berikut:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Ganti
LOCATION
dengan lokasi antrean.Output harus berisi parameter percobaan ulang yang Anda tetapkan.
Langkah selanjutnya
- Pelajari cara membuat tugas Target HTTP.
- Pelajari cara membuat tugas App Engine.
- Pelajari lebih lanjut pengelolaan antrean di referensi RPC API.
- Pelajari lebih lanjut pengelolaan antrean di referensi REST API.