Untuk mengatasi bug queue worker yang menumpuk, pendekatan Debug Backend ala Claudius dimulai dengan melihat gejala spesifik, mengumpulkan data operasional, dan menutup celah yang ditemukan dalam setiap lapisan pemrosesan. Di artikel ini, kita langsung ke inti: bagaimana sebuah worker yang pernah berjalan baik tiba-tiba berhenti memproses tugas dan apa langkah konkret untuk mengembalikannya ke kondisi sehat.

Gejala yang Kasat Mata: Queue Terapung dan Worker Diam

Masalah bermula saat antrean job Redis tetap penuh meskipun worker berjalan, sedangkan log menunjukkan tidak ada eksekusi baru dalam rentang waktu yang lama. Caller API menunggu, tetapi queue worker tidak mengeluarkan hasil, walau tidak crash. Karena interview Claudius menyebutkan pentingnya observability anomali, langkah pertama adalah memastikan gejala benar-benar konsisten di produksi.

Reproduksi Lingkungan yang Memadai

Kita membuat ulang skenario dengan menekan volume job pada instance staging untuk memastikan worker tidak terpengaruh oleh tuntutan throughput yang sangat tinggi. Pastikan pula worker dijalankan dengan konfigurasi yang sama (misalnya jumlah worker, batch size, dan timeout). Saat job-job dasar yang memodifikasi database dijalankan, antrean tetap terisi, menandakan worker tidak menarik tugas baru.

Observasi dan Root Cause

Langkah debug utama adalah meninjau stack observability Claudius, yakni log worker, metrik Redis, dan status proses. Pada log worker tidak ada exception, tetapi ada jeda berulang sekitar satu menit di antara log "Job received" yang menandakan worker menunggu job padahal queue tidak kosong.

Memetakan Delay dengan Metrik

Kami mengumpulkan metrik Redis: panjang antrean tetap 20+, sementara latency Redis spikes tidak signifikan. Namun, metrik sumber data lain menunjukkan connection pool dari worker ke service downstream (misalnya database) sudah mencapai batas maksimal dan menolak koneksi baru (ERROR: connection pool exhausted). Root cause-nya ternyata bukan queue itu sendiri, tetapi worker yang menunggu resource lain.

Patch dan Verifikasi

Perbaikan dilakukan dalam beberapa langkah:

  • Menambahkan timeout eksplisit dan retry pada pool connection downstream agar worker segera gagal dan kembali mengeksekusi job berikutnya.
  • Mengurangi jumlah concurrency worker agar tidak melewati batas connection pool.
  • Menambahkan metrik anomali baru: waktu tunggu connection dan backlog Redis.

Contoh penyesuaian konfigurasi worker (misalnya menggunakan worker Python sederhana):

worker = QueueWorker(queue='jobs', max_concurrency=4, connection_timeout=5)
worker.retry_policy = RetryPolicy(max_attempts=3, backoff=0.5)
worker.start()

Perubahan ini membuat worker lebih cepat menyadari jika resource downstream tidak tersedia, mencegah job stagnan di tengah pipeline.

Verifikasi Pasca-Patch

Setelah patch diterapkan, uji kembali dengan skenario yang sama. Metrik menunjukkan queue length turun drastis, log worker menunjukkan job diproses setiap beberapa detik, dan tidak ada job yang menunggu lebih dari timeout. Bahkan ketika pool terbatas, worker segera mereset job sehingga antrean tidak menumpuk.

Best Practice Debug Backend ala Claudius

  • Reproduksi selektif: Jangan hanya mengandalkan log; bangun ulang konfigurasi dan kondisi beban untuk memastikan gejala terjadi secara konsisten.
  • Observasi berlapis: Gabungkan log worker, metrik queue, dan status dependency agar Anda bisa memetakan keterkaitan keterlambatan.
  • Timeout dan retry strategis: Pastikan tiap layer bisa gagal cepat dan memberi kesempatan bagi job lain jika resource tidak tersedia.
  • Pantau connection pool: Queue worker sering tidak bermasalah, tapi resource downstream yang kehabisan koneksi adalah penyebab tersembunyi.
  • Patch defensif: Ubah konfigurasi agar worker tetap responsif saat situasi tidak ideal—misalnya menurunkan concurrency dan menambah metrik kesehatan.
  • Verifikasi end-to-end: Setelah patch, jalankan ulang skenario dari awal, pastikan queue terurai dan job selesai tanpa intervensi manual.

Penerapan prinsip-prinsip ini membantu tim backend mempercepat diagnosis gangguan queue worker yang tidak jelas gejalanya, sama seperti pendekatan yang Claudius tekankan dalam berbagai wawancara.