Cloud Tasks memungkinkan Anda membuat sistem asinkron yang tangguh saat mendesain perilaku eksekusi antrean dan batas layanan tertentu. Anda dapat mencegah bottleneck pemrosesan dan penundaan yang tidak terduga dengan memperhitungkan pengiriman setidaknya satu kali, pembatasan sistem, dan kapasitas resource target.
Urutan eksekusi
Dengan pengecualian tugas yang dijadwalkan untuk dijalankan di masa mendatang, task queue sepenuhnya independen dari platform terkait urutan eksekusi. Tidak ada jaminan atau upaya terbaik yang dilakukan untuk menjalankan tugas dalam urutan tertentu. Secara khusus: tidak ada jaminan bahwa tugas lama akan dijalankan kecuali jika antrean benar-benar dikosongkan. Ada sejumlah kasus umum ketika tugas yang lebih baru dijalankan lebih cepat daripada tugas yang lebih lama, dan pola di sekitarnya dapat berubah tanpa pemberitahuan.
Penundaan eksekusi
Eksekusi Cloud Tasks terkadang dapat mengalami penundaan kecil, biasanya berlangsung beberapa menit, karena sistem internal dimulai ulang. Tugas ditunda, tetapi tidak ada tugas yang hilang. Ini adalah peristiwa tingkat sistem tanpa solusi. Peristiwa ini tidak dicatat, dan kemunculannya tidak memiliki linimasa yang ditetapkan.
Eksekusi duplikat
Cloud Tasks bertujuan untuk semantik "jalankan tepat satu kali" yang ketat. Namun, dalam situasi ketika trade-off desain harus dilakukan antara eksekusi yang dijamin dan eksekusi duplikat, layanan akan melakukan eksekusi yang dijamin. Oleh karena itu, sejumlah eksekusi duplikat yang bukan nol akan terjadi. Anda harus memastikan bahwa eksekusi duplikat ditangani dengan baik dan tidak menyebabkan kegagalan yang tidak terduga. Dalam produksi, lebih dari 99,999% tugas hanya dijalankan satu kali.
Keterbatasan resource
Sumber backlog paling umum dalam antrean pemrosesan langsung adalah resource yang habis pada instance target. Jika Anda mencoba menjalankan 100 tugas per detik pada instance frontend yang hanya dapat memproses 10 permintaan per detik, backlog akan dibuat. Hal ini biasanya terjadi dalam salah satu dari dua cara, yang keduanya umumnya dapat diselesaikan dengan meningkatkan jumlah instance yang memproses permintaan.
Error backoff dan tarif yang diterapkan
Server yang kelebihan beban dapat mulai menampilkan error backoff: HTTP 503 (untuk target App Engine), atau HTTP 429 atau 5xx (untuk target eksternal).
Cloud Tasks bereaksi terhadap error ini dengan memperlambat eksekusi hingga error berhenti. Pembatasan sistem ini mencegah pekerja kelebihan beban. Perhatikan bahwa setelan Anda tidak diubah.
Pembatasan sistem terjadi dalam situasi berikut:
Cloud Tasks melakukan backoff pada semua error. Biasanya, backoff yang ditentukan dalam
rate_limitsdigunakan. Namun, jika pekerja menampilkan HTTP429 Too Many Requests,503 Service Unavailable, atau tingkat error tinggi, Cloud Tasks akan menggunakan tingkat backoff yang lebih tinggi. Percobaan ulang yang ditentukan dalam header respons HTTPRetry-Afterakan dipertimbangkan.Untuk mencegah lonjakan traffic dan memperlancar peningkatan traffic yang tiba-tiba, pengiriman akan meningkat secara perlahan saat antrean baru dibuat atau tidak ada aktivitas, dan jika sejumlah besar tugas tiba-tiba tersedia untuk dikirim (karena lonjakan dalam tarif pembuatan tugas, antrean yang tidak dijeda, atau banyak tugas yang dijadwalkan pada waktu yang sama).
Lonjakan latensi dan serentak maks
Server yang kelebihan beban juga dapat merespons dengan peningkatan latensi yang besar.
Dalam situasi ini, permintaan tetap terbuka lebih lama. Karena antrean berjalan dengan jumlah tugas serentak maksimum, hal ini dapat menyebabkan antrean tidak dapat menjalankan tugas pada kecepatan yang diharapkan. Meningkatkan the
max_concurrent_dispatches
untuk antrean yang terpengaruh dapat membantu dalam situasi ketika nilai telah ditetapkan terlalu
rendah, sehingga memperkenalkan batas kecepatan buatan. Namun, meningkatkan max_concurrent_dispatches kemungkinan tidak akan mengurangi tekanan resource yang mendasarinya.
Masalah peningkatan dengan tugas yang berjalan lama
Antrean Cloud Tasks meningkatkan outputnya sebagian berdasarkan jumlah tugas yang berhasil dikirim sebelumnya. Jika pengendali tugas memerlukan waktu yang cukup lama—dalam urutan menit—untuk menyelesaikan tugas dan menampilkan respons keberhasilan, mungkin ada jeda dalam kecepatan peningkatan antrean.
Melihat lebih dari 5.000 tugas
Jika Anda memiliki lebih dari 5.000 tugas, beberapa tugas tidak terlihat di Google Cloud konsol. Gunakan gcloud CLI untuk melihat semua tugas.
Metrik kedalaman antrean maksimum yang dilaporkan
Metrik kedalaman antrean maksimum yang dilaporkan oleh Cloud Tasks dibatasi hingga 1.000.000 tugas. Hal ini dimaksudkan untuk meningkatkan performa pekerja tugas yang mendasarinya dan tidak ada dampak pada jumlah tugas yang dapat dikirim ke atau diproses oleh antrean Anda. Tugas yang dikirim ke antrean di atas batas kedalaman antrean akan terus dijalankan sebagaimana mestinya.
Untuk mengambil kedalaman antrean saat ini di luar 1.000.000 tugas, Anda dapat menggunakan metode
queues.tasks.list.
Metode ini menampilkan semua tugas dengan penomoran halaman, sehingga Anda dapat menggabungkan data, dan melakukan operasi penghitungan. Namun, bergantung pada ukuran kedalaman antrean, metode
ini mungkin mengalami batasan kuota.
Membuat ulang antrean dengan nama yang sama
Jika Anda menghapus antrean dari Google Cloud konsol, Anda harus menunggu 3 hari sebelum membuatnya ulang dengan nama yang sama. Periode tunggu ini mencegah perilaku yang tidak terduga dalam tugas yang sedang dijalankan pada saat penghapusan atau menunggu untuk dijalankan. Tindakan ini juga menghindari kegagalan proses internal dalam siklus penghapusan atau pembuatan ulang.
Target yang tidak didukung saat menggunakan perimeter aman
Jika Anda telah menyiapkan perimeter aman menggunakan Kontrol Layanan VPC, permintaan HTTP dari eksekusi Cloud Tasks akan diblokir untuk target yang tidak didukung, dan akan gagal dengan kode error TARGET_TYPE_NOT_PERMITTED_FOR_VPC. Untuk mengetahui informasi selengkapnya, lihat
Menyiapkan perimeter layanan menggunakan Kontrol Layanan VPC.
Batasan lokasi resource
Cloud Tasks mendukung pembatasan lokasi resource; namun, batasan berlaku untuk region berikut:
us-central1us-central2(region pribadi Google Cloud )
Jika Anda menentukan salah satu region dalam kebijakan organisasi, Anda harus menyertakan us-central1 dan us-central2, meskipun Anda tidak membuat resource Cloud Tasks di kedua region tersebut. Anda dapat menyertakan region us-central2 dalam kebijakan organisasi meskipun organisasi Anda tidak menggunakan region pribadi.