Backoff Strategy

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 #

  1. Service A memanggil Service B
  2. Service B overload dan mulai timeout
  3. Service A melakukan retry langsung & paralel
  4. Beban Service B semakin besar
  5. 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) #

AspekRetry StrategyBackoff Strategy
FokusApakah retryKapan retry
TujuanSuccessStabilitas
RisikoRetry stormDikontrol

👉 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) #

  1. Retry tanpa delay
  2. Retry tanpa batas
  3. Backoff tanpa jitter
  4. Retry semua jenis error
  5. 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.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact