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 (
2her 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.