Kuyruk Seçimi: Başarısız İşler ve Tekrar Denenebilirlik

Bir medya uygulamasında kargo gönderiş işleri başarısız olduğunda, hangi kuyruk türünü seçmelisin? Hız değil, kurtarma stratejisi önemli.

Cornelius Hayes'in yazısında ana fikir basit: çoğu durumda standart kuyruk yeterli. FIFO sadece işlerin kesinlikle belirli bir sırada işlenmesi zorunlu bir iş kuralı olduğunda gerekli.

Asıl sorun şu. Bir worker kargo gönderiş talebini aldı, dış servise çağrı yaptı, ama cevabı almadan çöktü. Kuyruk sistemi işi başarısız sayıyor ve yeniden gönderiyor. Dış servis aslında işi yaptı. Sonuç: çift gönderiş. FIFO deduplication bunu çözmez.

Çözüm: her işe uygulama seviyesinde bir ID ver ve handler'ını idempotent yap. Yani aynı ID'li işi iki kez alsa bile sonuç değişmesin. Bir sipariş servisi shipment.updated olayı yayınlıyor, fan-out worker bunu email, push ve partner webhook'a gönderiyor. Webhook zaman aşımına uğrayıp diğerleri başarılı olursa? Ledger'ı (geçmiş kaydını) önce yaz, sonra yeniden deneme güvenli olur.

Pratik tavsiye: başarısız işler için standart kuyruk kullan, her işe bir ID ekle, handler'ını idempotent tasarla. Kurtarma kolay, gözlemlenebilir ve yeniden çalıştırması basit olur. Hız meselesi değil, güvenilirlik meselesi.

konu hakkında tepkinizi verebilirsiniz