# Exponential Backoff

Adres: https://softwaredictionary.org/tr/terimler/exponential-backoff
Kategori: Backend ve API'ler
Son güncelleme: 2026-09-30
Okunuşu: ekspınenşıl bekof

Kısaca: Exponential backoff, her başarısız denemeden sonra 1, 2, 4, 8 saniye gibi giderek daha uzun bekleyen yeniden deneme stratejisidir; zorlanan servis toparlanır.

## Exponential backoff nedir?

Bir ağ çağrısı başarısız olduğunda sıkı bir döngüde hemen yeniden denemek genellikle işleri kötüleştirir: sunucu aşırı yüklüyse ani yeniden denemeler yalnızca daha fazla yük ekler. Exponential backoff, her başarısızlıktan sonra bekleme süresini, tipik olarak iki katına çıkararak çarpar ve yeniden denemeleri aralıklandırır. Bir istemci 1 saniye, sonra 2, sonra 4, sonra 8 saniye bekleyebilir; vazgeçip hatayı bildirmeden önce azami bir gecikmeye ve azami deneme sayısına kadar.

Gerçek uygulamalar jitter, yani her gecikmede rastgele bir değişim ekler. Bu olmadan aynı anda başarısız olan binlerce istemci aynı anlarda yeniden dener ve sunucuya senkronize dalgalar halinde vurur; buna thundering herd (gürleyen sürü) sorunu denir. Full jitter denen popüler bir yaklaşım, sıfır ile geçerli üstel sınır arasında rastgele bir gecikme seçer. İstemciler ayrıca sunucu bir `Retry-After` başlığı gönderdiğinde, örneğin `429 Too Many Requests` veya `503 Service Unavailable` yanıtıyla birlikte, ona uymalıdır.

Exponential backoff, meşgul bir arkadaşı aramaya benzer: yanıt vermezse art arda elli kez aramak yerine bir dakika sonra, sonra beş dakika sonra, sonra bir saat sonra yeniden denersiniz. HTTP istemcilerine, bulut SDK'larına, mesaj kuyruğu tüketicilerine, veritabanı sürücülerine ve arka plan işi sistemlerine yerleşiktir ve düşük seviyeli protokollerde de görülür: klasik Ethernet, iki cihaz aynı anda ilettiğinde toparlanmak için ikili exponential backoff kullanıyordu.

Backoff, iyi bir yeniden deneme politikasının yalnızca yarısıdır. Yalnızca geçici olması muhtemel hataları, örneğin zaman aşımlarını, kopan bağlantıları, `429` ve `5xx` yanıtlarını yeniden deneyin; `400 Bad Request` veya `401 Unauthorized` gibi her seferinde aynı şekilde başarısız olacak hataları asla yeniden denemeyin. Yeniden denenen bir ödeme müşteriden iki kez ücret almasın diye yalnızca idempotent işlemleri yeniden deneyin ya da idempotency key kullanın. Backoff ayrıca circuit breaker'dan farklıdır: backoff tekil isteklerin yeniden denemelerini yavaşlatır; circuit breaker ise başarısız bir servise bir süre tamamen istek göndermeyi durdurur.

## Önemli noktalar

- Her yeniden deneme bir öncekinden daha uzun bekler; genellikle gecikmeyi ikiye katlar.
- Rastgele jitter, birçok istemcinin senkron biçimde yeniden denemesini engeller.
- Hem azami gecikmeyi hem de deneme sayısını sınırlayın.
- Yalnızca geçici hataları ve yalnızca tekrarlanması güvenli işlemleri yeniden deneyin.
- Sunucu gönderdiğinde `Retry-After` başlığına uyun.

## Örnek: Exponential backoff ve full jitter ile bir isteği yeniden denemek

```javascript
async function fetchWithRetry(url, maxAttempts = 5) {
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
    const res = await fetch(url).catch(() => null); // network error -> null
    if (res && res.status !== 429 && res.status < 500) return res; // success or permanent error
    if (attempt === maxAttempts - 1) break;
    const limit = Math.min(30_000, 1000 * 2 ** attempt); // 1s, 2s, 4s, 8s... capped at 30s
    const delay = Math.random() * limit;                  // full jitter
    await new Promise((resolve) => setTimeout(resolve, delay));
  }
  throw new Error("Request failed after " + maxAttempts + " attempts");
}
```

## Sık sorulan sorular

**Exponential backoff'a neden jitter eklenir?**

Jitter olmadan birlikte başarısız olan istemciler birlikte yeniden dener; bu da toparlanmakta olan bir sunucuyu ayakta tutamayan tekrarlı trafik artışları yaratır. Her gecikmeyi rastgele kılmak yeniden denemeleri zamana eşit yayar.

**Başarısız bir isteği kaç kez yeniden denemeliyim?**

Kullanıcıya dönük istekler için birkaç on saniyeyle sınırlanmış gecikmelerle 3 ile 5 deneme yaygındır. Arka plan işleri çok daha uzun süre yeniden deneyebilir ve yine de başarısız olan iş genellikle raporlanır ya da bir dead-letter kuyruğuna taşınır.

**Exponential backoff ile rate limiting arasındaki fark nedir?**

Rate limiting, bir istemcinin kaç istek gönderebileceğini sınırlamak için sunucu tarafından uygulanır. Exponential backoff ise istekler reddedildiğinde ya da sunucu başarısız olduğunda iyi davranışlı bir istemcinin nasıl tepki verdiğidir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
