Backoff & Jitter Hesaplayıcı
Exponential backoff zamanlamasını hesapla ve full, equal, decorrelated jitter retry’leri nasıl dağıttığını 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 beklemeye uyum sağlar ve güçlü bir genel varsayılandır. - 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 Equal’ın en az değerini nasıl aşağı çektiğine, en çok değerinin — dolayısıyla en kötü durumda toplam beklemenin — None’dakiyle aynı kaldığına bak. Decorrelated ise aralığı genişletir: tabanı base’te durur, tavanı None’ınkini aşar; yani en kötü durumda toplamı küçülmez, büyür. İyileşmekte olan bir servisten yükü kaldıran şey, daha kısa bir toplam değil, beklemelerin bu aralığa yayılmasıdır.
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.