Digital Transformation
Exponential Backoff (Mundur Eksponensial)
TL;DR: Exponential backoff adalah strategi retry yang menggandakan jeda waktu antar percobaan ulang setiap kali request gagal. Misal jeda 1 detik, lalu 2, 4, 8, 16 detik. Tujuannya supaya server pemberi error 429 atau 5xx tidak kebanjiran trafik saat pulih, dan client tidak boros kuota.
Apa itu Exponential Backoff?
Exponential backoff adalah pola di sisi client untuk menjadwalkan ulang request yang gagal dengan jeda yang naik secara eksponensial. Rumus dasarnya delay = base * 2^attempt, biasanya ditambah jitter acak supaya banyak client yang retry tidak menabrak server di detik yang sama. Pola ini standar di API Google, AWS, dan Stripe.
Lawan dari pola ini adalah retry dengan jeda tetap atau retry tanpa jeda, yang justru memperburuk keadaan saat server lagi overload. Algoritma retry yang dipakai bersama rate limiting di sisi server jadi pasangan klasik untuk menjaga stabilitas sistem terdistribusi.
Cara Kerja
| Percobaan | Jeda dasar | Dengan jitter (range) |
|---|---|---|
| 1 | 1 detik | 0,5-1,5 detik |
| 2 | 2 detik | 1-3 detik |
| 3 | 4 detik | 2-6 detik |
| 4 | 8 detik | 4-12 detik |
| 5 | 16 detik | 8-24 detik |
Praktik yang umum: batasi maksimal 5-7 percobaan, beri ceiling 60 detik supaya tidak menunggu terlalu lama, dan retry hanya untuk error transient seperti 408, 425, 429, 500, 502, 503, 504. Jangan retry untuk 4xx lain seperti 401 atau 404 karena penyebabnya bukan di server.
Implementasi di Next.js bisa pakai library axios-retry, p-retry, atau bawaan SDK seperti AWS SDK v3 yang sudah punya middleware backoff. Untuk webhook delivery, retry dengan exponential backoff juga jadi standar Stripe dan Shopify, biasanya 3 hari sampai 14 hari sebelum dianggap gagal permanen.
Kenapa Penting?
Untuk pengembang Indonesia yang banyak integrasi ke API pembayaran (Midtrans, Xendit, Doku), exponential backoff cegah duplikasi transaksi saat jaringan flapping. Dalam praktik di proyek client e-commerce, mengganti retry tanpa jeda dengan exponential backoff bersama jitter biasanya menurunkan rate error 40-60% saat traffic spike.
Praktik standar industri: Google Cloud rekomendasikan exponential backoff dengan jitter untuk semua client. Tanpa jitter, banyak client yang retry serempak akan menciptakan thundering herd dan bikin server makin sulit pulih.
Pertanyaan Umum
Apa beda exponential backoff dan linear backoff?
Linear backoff menambah jeda secara konstan (1, 2, 3, 4 detik), exponential menggandakan (1, 2, 4, 8 detik). Exponential lebih ramah server karena beri waktu pulih lebih cepat saat banyak client retry.
Kenapa butuh jitter?
Jitter (acak kecil pada delay) cegah banyak client retry di detik yang sama. Tanpa jitter, server yang baru pulih bisa langsung overload lagi karena thundering herd dari ribuan client.
Istilah Terkait