Backoff Strategy #
Dalam sistem modern—terutama distributed system, microservices, dan cloud-native architecture—kegagalan bukan lagi sesuatu yang jika terjadi, melainkan kapan terjadi. Network timeout, service overload, rate limit API, hingga dependency yang tidak stabil adalah kondisi sehari-hari.
Di sinilah Backoff Strategy berperan penting. Backoff bukan sekadar menunda request, tetapi sebuah mekanisme kontrol beban dan stabilitas sistem agar kegagalan kecil tidak berkembang menjadi system-wide outage.
Artikel ini membahas Backoff Strategy secara mendetail: konsep dasar, jenis-jenis backoff, kapan harus digunakan, kesalahan umum, hingga best practice implementasi di dunia nyata.
Apa Itu Backoff Strategy? #
Backoff Strategy adalah teknik untuk meningkatkan jeda waktu (delay) sebelum melakukan retry setelah sebuah operasi gagal.
Alih-alih melakukan retry secara agresif dan beruntun, backoff memberi waktu bagi:
- Sistem target untuk pulih
- Resource untuk kembali tersedia
- Antrian untuk berkurang
Secara sederhana:
❌ Retry langsung → memperparah overload ✅ Retry dengan backoff → sistem lebih stabil
Masalah Nyata Tanpa Backoff #
Tanpa backoff, retry justru bisa menjadi penyebab utama kegagalan besar.
Contoh Kasus #
- Service A memanggil Service B
- Service B overload dan mulai timeout
- Service A melakukan retry langsung & paralel
- Beban Service B semakin besar
- Terjadi Retry Storm / Thundering Herd Problem
Akibatnya:
- Latency meningkat drastis
- CPU & connection pool habis
- Failure menyebar ke service lain
Jenis-Jenis Backoff Strategy #
Fixed Backoff #
Delay retry selalu sama.
Contoh:
- Retry setiap 1 detik
Kelebihan:
- Sederhana
- Mudah diimplementasikan
Kekurangan:
- Tidak adaptif
- Berisiko retry bersamaan
Kapan dipakai:
- Sistem kecil
- Beban rendah
Linear Backoff #
Delay bertambah secara linear.
Rumus:
delay = base_delay × attempt
Contoh:
- Retry ke-1: 1s
- Retry ke-2: 2s
- Retry ke-3: 3s
Kelebihan:
- Lebih baik dari fixed
Kekurangan:
- Masih kurang agresif menahan retry di skala besar
Exponential Backoff (Paling Umum) #
Delay bertambah secara eksponensial.
Rumus:
delay = base_delay × 2^attempt
Contoh:
- 1s → 2s → 4s → 8s → 16s
Kelebihan:
- Sangat efektif menurunkan tekanan sistem
- Digunakan luas (AWS, GCP, HTTP client, SDK)
Kekurangan:
- Bisa terlalu lama jika tanpa batas
Exponential Backoff dengan Jitter (Best Practice) #
Menambahkan randomness (jitter) pada delay.
Kenapa penting? Tanpa jitter, banyak client akan retry bersamaan.
Contoh pendekatan jitter:
- Full Jitter
- Equal Jitter
- Decorrelated Jitter
Contoh sederhana:
delay = random(0, base_delay × 2^attempt)
Inilah yang direkomendasikan di production.
Backoff vs Retry Strategy (Bukan Hal yang Sama) #
| Aspek | Retry Strategy | Backoff Strategy |
|---|---|---|
| Fokus | Apakah retry | Kapan retry |
| Tujuan | Success | Stabilitas |
| Risiko | Retry storm | Dikontrol |
👉 Retry tanpa backoff = anti-pattern
Kapan Backoff WAJIB Digunakan? #
Gunakan backoff ketika:
- HTTP call ke service lain
- Mengakses database atau cache
- Konsumsi message queue
- Call ke external API (payment, email, map)
- Rate-limited endpoint (HTTP 429)
⚠️ Tidak disarankan untuk:
- Error validasi (400)
- Error bisnis (insufficient balance, invalid state)
Best Practice Implementasi Backoff #
Batasi Jumlah Retry #
Retry tanpa batas adalah bencana.
Rekomendasi umum:
- 3–5 kali retry
Gunakan Max Backoff #
Hentikan eksponensial di batas tertentu.
Contoh:
- Max delay: 30 detik
Tambahkan Jitter (WAJIB) #
Tanpa jitter, backoff hampir sia-sia di sistem besar.
Kombinasikan dengan Circuit Breaker #
Backoff tidak cukup sendirian.
Flow ideal:
Request → Retry + Backoff → Circuit Breaker → Fail Fast
Gunakan Timeout yang Masuk Akal #
Retry + timeout panjang = latency membengkak.
Logging dan Observability #
Catat:
- Attempt ke berapa
- Delay yang digunakan
- Error type
Ini penting untuk debugging dan tuning.
Contoh Kasus Nyata di Industri #
Cloud Provider #
- AWS SDK: Exponential Backoff + Jitter
- GCP API: Built-in retry & backoff
Message Queue #
- Visibility timeout + backoff retry
- Dead Letter Queue setelah retry habis
Microservices #
- HTTP client dengan retry policy
- gRPC interceptor dengan backoff
Kesalahan Umum (Anti-Pattern) #
- Retry tanpa delay
- Retry tanpa batas
- Backoff tanpa jitter
- Retry semua jenis error
- Mengandalkan backoff tanpa circuit breaker
Ringkasan #
Backoff Strategy bukan optimasi kecil, tapi fondasi reliability.
Checklist production-ready:
- Retry terbatas ✅
- Exponential backoff ✅
- Jitter ✅
- Max delay ✅
- Observability ✅
- Circuit breaker ✅
Jika sistemmu terdistribusi dan tidak menggunakan backoff, itu bukan soal jika akan bermasalah—tapi kapan.
Penutup #
Backoff Strategy adalah salah satu hidden best practice yang jarang terlihat, tapi dampaknya sangat besar terhadap stabilitas dan biaya operasional.
Di sistem modern, kegagalan adalah normal—yang tidak normal adalah sistem yang tidak siap menghadapinya.