Tool

Backoff & Jitter Hesaplayıcı

Exponential backoff zamanlamasını hesapla ve full, equal, decorrelated jitter retry’leri nasıl dağıtıyor gör. Tarayıcıda çalışır, hiçbir şey yeniden denenmez.

Bu araç tarayıcınızda çalışır. Veriler dışarı çıkmaz.

Deneme En az En çok

Nasıl Çalışır

Jitter’sız retry’lar, geçici bir tıkanmayı bir kesintiye çevirmenin yoludur. Bu araç, exponential backoff’un gecikme zamanlamasını çıkarır ve her jitter stratejisinin denemeleri nasıl dağıttığını gösterir. Yalnızca hesaplar — hiçbir şeyi yeniden denemez.

Formül

Exponential backoff, n. deneme için delay = min(cap, base × factorⁿ⁻¹):

  • base — ilk bekleme (örneğin 100 ms).
  • factor — deneme başına büyüme (2 her seferinde ikiye katlar).
  • cap — üst sınır; bekleme sınırsız büyümesin diye. Cap olmadan base 100ms × 2, 12. denemede ~3,4 dakikaya ulaşır.

Neden jitter — thundering herd

Bin tane istemci aynı zamanlamayla geri çekilirse, senkronize dalgalar hâlinde yeniden dener — servisi deviren o tepe, bir zamanlayıcıyla tekrar gelir. Jitter, beklemeyi rastgeleleştirerek onları senkronizasyondan çıkarır.

  • Full[0, delay] aralığında uniform. En geniş dağılım; bir istemci çok erken yeniden deneyebilir.
  • Equal[delay/2, delay] aralığında uniform. Bir taban tutar ki kimse anında üstüne binmesin, yine de herd’i dağıtır.
  • Decorrelated — sonraki bekleme [base, önceki × 3] aralığında uniform, capped. Son uykuya uyum sağlar ve güçlü bir genel varsayılandır (AWS’nin önerisi).
  • None — çıplak senkronize zamanlama. Tek istemci için sorun değil; bir filo için tehlikeli.

Tabloyu okumak

En az / En çok, bir denemenin beklemesinin düşebileceği aralıktır. None için ikisi eşittir. Özetteki en kötü durumda toplam bekleme, her denemenin en çok değerini toplar — bir istemcinin N denemeden sonra vazgeçmeden önce toplamda bekleyebileceği en uzun süre. Full ve Decorrelated’ın bu aralığı None’a göre nasıl aşağı çektiğine bak: o düşen taban, tam da iyileşmekte olan bir servisten kaldırdığın yük.

Bir retry, aynı zamanda aynı mesajın iki kez teslim edilmesinin de yoludur; o yüzden öbür uçtaki handler idempotent olmalı: BabelQueue idempotency spec’ine ve çalıştırılabilir idempotency-payments örneğine bak.

Gizlilik

Her şey tarayıcında çalışır. Hiçbir girdi sayfadan dışarı çıkmaz.