Membuat Push Queue

Halaman ini menjelaskan cara membuat dan menyesuaikan push queue, serta cara memeriksa konten antrean.

Menggunakan file konfigurasi antrean untuk membuat antrean

Untuk memproses tugas, Anda harus menambahkannya ke push queue. App Engine menyediakan push queue default, bernama default, yang dikonfigurasi dan siap digunakan dengan setelan default. Jika mau, Anda cukup menambahkan semua tugas ke antrean default, tanpa harus membuat dan mengonfigurasi antrean lainnya.

Untuk menambahkan antrean atau mengubah konfigurasi default, edit file konfigurasi antrean untuk aplikasi Anda, yang Anda upload ke App Engine. Anda dapat membuat hingga 100 antrean. Antrean tidak dapat dibuat secara dinamis.

File konfigurasi antrean ini mendefinisikan dua antrean:

queue:
- name: queue-blue
  target: v2.task-module
  rate: 5/s

- name: queue-red
  rate: 1/s

Untuk mengupload file:

gcloud app deploy queue.yaml

Semua tugas yang ditambahkan ke queue-blue dikirim ke modul target v2.task-module. Kecepatan refresh queue-red diubah dari 5/dtk menjadi 1/dtk. Tugas akan dihapus dari antrean dan dikirim ke targetnya dengan kecepatan 1 tugas per detik.

Jika menghapus antrean, Anda harus menunggu sekitar 7 hari sebelum membuat antrean baru dengan nama yang sama.

Ada banyak parameter lain yang dapat ditambahkan ke file konfigurasi untuk menyesuaikan perilaku push queue. Untuk mengetahui informasi selengkapnya, lihat referensi file konfigurasi antrean.

Menentukan kecepatan pemrosesan push queue

Anda dapat mengontrol tingkat pemrosesan tugas di setiap antrean dengan menentukan perintah lain, seperti rate, bucket_size, dan max_concurrent_requests.

Task queue menggunakan token bucket untuk mengontrol laju eksekusi tugas. Setiap antrean bernama memiliki token bucket yang menyimpan token, hingga jumlah maksimum yang ditentukan oleh bucket_size, atau maksimum 5 token jika Anda tidak menentukan ukuran bucket.

Setiap kali aplikasi Anda menjalankan sebuah tugas, token akan dihapus dari bucket. Aplikasi Anda akan terus memproses tugas dalam antrean sampai bucket antrean kehabisan token. App Engine mengisi ulang bucket dengan token baru secara terus-menerus berdasarkan rate yang Anda tentukan untuk antrean.

Jika antrean berisi tugas yang akan diproses, dan bucket antrean berisi token, App Engine akan secara bersamaan memproses tugas sebanyak token yang ada. Hal ini dapat menyebabkan burst pemrosesan, yang menghabiskan resource sistem, dan bersaing dengan permintaan layanan pengguna.

Jika Anda ingin mencegah terlalu banyak tugas dijalankan sekaligus atau untuk mencegah pertentangan datastore, gunakan max_concurrent_requests.

Contoh berikut menunjukkan cara menetapkan max_concurrent_requests untuk membatasi tugas dan juga menunjukkan cara menyesuaikan ukuran dan kapasitas bucket berdasarkan kebutuhan aplikasi Anda dan resource yang tersedia:

queue:
- name: queue-blue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

Menetapkan batas penyimpanan untuk semua antrean

Anda dapat menggunakan file konfigurasi antrean untuk menentukan jumlah total penyimpanan yang dapat digunakan oleh data tugas pada semua antrean. Untuk menentukan batas penyimpanan total, sertakan elemen bernama total_storage_limit di tingkat atas:

# Set the total storage limit for all queues to 120MB
total_storage_limit: 120M
queue:
- name: queue-blue
  rate: 35/s

Nilainya adalah angka yang diikuti oleh unit: B untuk byte, K untuk kilobyte, M untuk megabyte, G untuk gigabyte, T untuk terabyte. Misalnya, 100K menetapkan batas 100 kilobyte. Jika penambahan tugas akan menyebabkan antrean melebihi batas penyimpanannya, panggilan untuk menambahkan tugas akan gagal. Batas default adalah 500M (500 megabyte) untuk aplikasi gratis. Untuk aplikasi yang ditagih, tidak ada batasan hingga Anda menetapkannya secara eksplisit. Anda dapat menggunakan batas ini untuk melindungi aplikasi Anda dari error pemrograman fork bomb saat setiap tugas menambahkan beberapa tugas lain selama eksekusinya.

Jika aplikasi Anda mengalami error karena kuota tidak mencukupi saat menambahkan tugas, meningkatkan total batas penyimpanan dapat membantu. Jika Anda menggunakan fitur ini, sebaiknya tetapkan batas yang sesuai dengan penyimpanan yang diperlukan untuk tugas selama beberapa hari. Hal ini memungkinkan antrean untuk sementara dicadangkan dan terus menerima tugas baru saat mengerjakan backlog sambil tetap terlindungi dari error pemrograman fork bomb.

Mengonfigurasi jumlah maksimum permintaan serentak

Anda dapat mengontrol kecepatan pemrosesan dengan menetapkan max_concurrent_requests, yang membatasi jumlah tugas yang dapat dijalankan secara bersamaan.

Jika antrean aplikasi Anda memiliki kecepatan 20/dtk dan ukuran bucket 40, tugas dalam antrean tersebut akan dijalankan pada kecepatan 20/dtk dan untuk sesaat dapat terjadi burst hingga 40/dtk. Setelan ini berfungsi dengan baik jika latensi tugas relatif rendah; namun, jika latensi meningkat secara signifikan, Anda akan memproses tugas serentak yang lebih banyak secara signifikan. Beban pemrosesan ekstra ini dapat menghabiskan instance tambahan dan memperlambat aplikasi Anda.

Misalnya, anggaplah latensi tugas normal Anda adalah 0,3 detik. Pada latensi ini, Anda akan memproses maksimal 40 tugas secara bersamaan. Namun, jika latensi tugas Anda meningkat menjadi 5 detik, Anda dapat dengan mudah memproses lebih dari 100 tugas sekaligus. Peningkatan ini memaksa aplikasi Anda menggunakan lebih banyak instance untuk memproses tugas tambahan, yang berpotensi memperlambat seluruh aplikasi dan mengganggu permintaan pengguna. Anda dapat menghindari kemungkinan ini dengan menetapkan max_concurrent_requests ke nilai yang lebih rendah.

Misalnya, jika Anda menetapkan max_concurrent_requests ke 10, contoh antrean akan mempertahankan sekitar 20 tugas/detik jika latensi adalah 0,3 detik. Saat latensi meningkat lebih dari 0,5 detik, setelan ini akan men-throttle kecepatan pemrosesan untuk memastikan bahwa tidak lebih dari 10 tugas berjalan secara bersamaan.

queue:
# Set the max number of concurrent requests to 50
- name: optimize-queue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

Memantau antrean di konsol Google Cloud

  1. Di konsol Google Cloud, buka halaman Cloud Tasks.

    Buka Cloud Tasks

    Perlu diketahui bahwa jika Anda membuka halaman Task queue App Engine, akan ada petunjuk yang memandu Anda ke halaman Cloud Tasks. Update di konsol Google Cloud ini tidak mengubah fungsi Task queue.

  2. Aktifkan Cloud Tasks API.

  3. Setelah berada di halaman Cloud Tasks, Anda akan melihat daftar semua antrean dalam aplikasi. Mengklik nama antrean akan memunculkan halaman Detail Antrean, yang menampilkan semua tugas dalam antrean yang dipilih.

Langkah berikutnya

Pelajari cara membuat tugas.