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
- User melakukan aksi, misalnya upload file
- Server menyimpan pesan ke queue
- Server langsung merespons user bahwa request diterima
- Worker membaca pesan dari queue
- Worker memproses task di background
- 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