Halaman ini menjelaskan beberapa masalah dan batasan yang mungkin Anda temui saat menggunakan Cloud Tasks.
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. Khususnya: tidak ada jaminan bahwa tugas lama akan dieksekusi kecuali jika antrean benar-benar kosong. Ada sejumlah kasus umum di mana tugas yang lebih baru dieksekusi lebih cepat daripada tugas yang lebih lama, dan pola di sekitarnya dapat berubah tanpa pemberitahuan.
Eksekusi duplikat
Cloud Tasks bertujuan untuk semantik "jalankan tepat satu kali" yang ketat. Namun, dalam situasi ketika kompromi desain harus dilakukan antara eksekusi yang dijamin dan eksekusi duplikat, layanan akan memilih eksekusi yang dijamin. Oleh karena itu, sejumlah eksekusi duplikat yang tidak nol akan terjadi. Developer harus mengambil langkah-langkah untuk memastikan bahwa eksekusi duplikat bukan merupakan peristiwa yang merugikan. Dalam produksi, lebih dari 99,999% tugas hanya dijalankan satu kali.
Keterbatasan resource
Sumber backlog yang paling umum dalam antrean pemrosesan langsung adalah kehabisan resource pada instance target. Jika pengguna mencoba menjalankan 100 tugas per detik di instance frontend yang hanya dapat memproses 10 permintaan per detik, backlog akan terbentuk. Hal ini biasanya terjadi dalam salah satu dari dua cara, yang keduanya umumnya dapat diselesaikan dengan meningkatkan jumlah instance yang memproses permintaan.
Error mundur dan kecepatan yang diterapkan
Server yang kelebihan beban dapat mulai menampilkan error mundur: 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 mengalami kelebihan beban. Perhatikan bahwa setelan yang ditentukan pengguna tidak diubah.
Pembatasan sistem terjadi dalam keadaan berikut:
Cloud Tasks melakukan penundaan pada semua error. Biasanya, jeda yang ditentukan dalam
rate limits
akan digunakan. Namun, jika pekerja menampilkan HTTP429 Too Many Requests
,503 Service Unavailable
, atau tingkat error tinggi, Cloud Tasks menggunakan tingkat backoff yang lebih tinggi. Pencobaan ulang yang ditentukan di header respons HTTPRetry-After
dipertimbangkan.Untuk mencegah lonjakan traffic dan memperlancar peningkatan traffic yang tiba-tiba, pengiriman ditingkatkan secara perlahan saat antrean baru dibuat atau tidak aktif, dan jika sejumlah besar tugas tiba-tiba tersedia untuk dikirim (karena lonjakan tingkat pembuatan tugas, antrean yang dilanjutkan, atau banyak tugas yang dijadwalkan pada waktu yang sama).
Lonjakan latensi dan serentak maksimum
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
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—sekitar beberapa menit—untuk menyelesaikan tugas dan menampilkan respons keberhasilan, mungkin ada jeda dalam laju peningkatan antrean.
Melihat lebih dari 5.000 tugas
Jika Anda memiliki lebih dari 5.000 tugas, beberapa tugas tidak terlihat di konsol Google Cloud . Gunakan gcloud CLI untuk melihat semua tugas.
Membuat ulang antrean dengan nama yang sama
Jika Anda menghapus antrean dari konsol Google Cloud , Anda harus menunggu 3 hari sebelum membuatnya ulang dengan nama yang sama. Periode tunggu ini mencegah perilaku yang tidak terduga dalam tugas yang sedang dieksekusi atau menunggu untuk dieksekusi pada saat penghapusan. Hal ini juga menghindari kegagalan proses internal dalam siklus penghapusan atau pembuatan ulang.