Recraftory

Async Processing

Memahami pemrosesan asynchronous dengan message queue

Apa itu Async Processing

  • Proses yang berjalan di background tanpa memblokir user
  • User mendapatkan response cepat sementara task berjalan di belakang
  • Hasil task bisa diberitahukan nanti melalui notifikasi atau polling

Mengapa Async Processing Penting

  • Task berat bisa membuat user menunggu lama
  • Server synchronous bisa kehabisan resource saat banyak request
  • Async memisahkan acceptance dan processing
  • User experience lebih baik dengan response cepat

Alur Async Processing

  1. User melakukan aksi, misalnya upload file
  2. Server menyimpan pesan ke queue
  3. Server langsung merespons user bahwa request diterima
  4. Worker membaca pesan dari queue
  5. Worker memproses task di background
  6. Worker mengirim notifikasi saat selesai

Contoh Kasus Async Processing

Upload File Besar

  • User upload file
  • Server simpan file dan kirim pesan ke queue
  • Server response: file sedang diproses
  • Worker memproses file: resize, convert, scan virus
  • Notifikasi dikirim ke user saat selesai

Kirim Email

  • User register atau melakukan aksi yang memicu email
  • Server simpan detail email ke queue
  • User tidak perlu menunggu email terkirim
  • Worker mengirim email lewat SMTP
  • Retry otomatis jika SMTP sementara tidak tersedia

Generate Report

  • User minta report kompleks
  • Server simpan request ke queue
  • User bisa menutup tab atau melanjutkan kerja
  • Worker generate report dan simpan ke storage
  • User diberi link download saat report siap

Implementasi Async Processing

Job Queue

  • Definisi task disimpan sebagai job di queue
  • Job berisi semua informasi yang diperlukan untuk menjalankan task
  • Worker mengambil job dan mengeksekusi

Task Status

  • Simpan status task di database: pending, processing, completed, failed
  • User bisa memeriksa status melalui API
  • Retry mechanism untuk task yang gagal

Notification

  • WebSocket untuk notifikasi real-time
  • Polling untuk aplikasi yang tidak mendukung WebSocket
  • Email atau push notification untuk update async

Kapan Menggunakan Async

Gunakan Async

  • Task memerlukan waktu lebih dari beberapa detik
  • Task tidak memerlukan hasil langsung untuk response
  • Ada risiko timeout jika synchronous
  • Task bisa di-retry jika gagal

Gunakan Sync

  • Task cepat, kurang dari satu detik
  • User memerlukan hasil langsung untuk lanjut
  • Task bersifat transactional dan tidak bisa dipisah

Praktik Terbaik

  • Simpan status task yang bisa dicek oleh user
  • Implementasikan retry dengan delay bertahap
  • Batasi jumlah retry untuk mencegah infinite loop
  • Gunakan dead letter queue untuk task yang gagal berulang kali
  • Monitor queue length untuk deteksi backlog