Logo GH

Politikaları yeniden deneme ve geri alma

Tekrarlamalar (yeniden denemeler) geçici arızalardan kurtulmaya yardımcı olur, ancak yanlış yapılandırılırsa, trafik çığlarına, işlemlerin kopyalarına ve basamaklı düşüşlere neden olurlar. Güvenilir bir geri ödeme politikası her zaman son tarihler/zaman aşımları ile başlar, idempotensi dikkate alır ve backoff + jitter kullanır.

1) Temel prensipler

1. Önce zaman aşımı/son tarih, sonra geri çekilme. Zaman sınırı olmadan tekrarlamak sadece başarısızlığı uzatır.
2. Retray - sadece güvenli/idempotent işlemler için. Güvensiz olanlar için - idempotency-anahtarları ve işlem garantileri aracılığıyla.
3. Geri çekilme zorunludur. Dalgaları eşzamansız hale getirmek için jitter ile üstel veya GCRA benzeri.
4. Deneme sayısını ve toplam bütçe süresini sınırlayın. Kullanıcının SLO'sunu terk etmeyin.
5. Altyapı sinyallerine saygı gösterin. '429/503' + 'Retry-After', devre kesici durumu, sıra sınırları.

2) Zaman aşımları ve son tarihler (son tarih yayılımı)

Talep zaman aşımı <SLO hizmeti, son tarih zinciri aşağı yayılır (HTTP başlıkları/gRPC bağlam).
Zaman aşımı kompozisyonu: toplam (ilk deneme + geri alma + sonraki) ≤ kullanıcı son tarihi.
Okumalar/kayıtlar için farklı zaman aşımları: kayıtlar daha kısa ve daha katıdır; Okur hedging izin verir.

3) Idempotency ve güvenli tekrarlar

Okur (GET/idempotent RPC): '5xx', 'UNAVAILABLE', ağ zaman aşımları ile güvenli bir şekilde tekrarlanır.

Kayıtlar:
  • Sınırda 'Idempotency-Key' (HTTP) veya request-ID kullanın; Sunucu tekilleştirilmelidir.
  • Idempotent işleyicileri yazın: "upsert",'en az bir kez "+ tazminat (saga).
  • Dış ödemeler/yerleşimler - sadece idempotent anahtarlar ve işlem günlüğü ile.

4) Geri dönüş algoritmaları

Üstel: 'Temel 2 ^ girişimi', 'max _ backoff'ile sınırlanmıştır.
Dekore edilmiş Jitter (tam/eşit jitter) - müşterileri senkronize etmek için aralıkta rastgelelik.
GCRA/Token-Bucket benzeri gecikmeler: oran limitleri ile tutarlı.
Kenarlıklar: 'initial _ backoff' (50-200 ms okur; 200-500 ms kayıtlar), 'max _ backoff' (1-5 s), 'max _ elapsed' (örneğin, 3-10 s).

Önerilen desen üstel geri alma + tam titremedir.

5) Karar Politikalarını Tekrarlayın/Tekrarlamayın

Tekrarlıyoruz:
  • Ağ hataları/zaman aşımları, '429' (saygıyla 'Retry-After'), 'soft' '5xx' ('502/503/504'), gRPC 'UNAVAILABLE/DEADLINE _ EXCEEDED'.
Aşağıdaki durumlarda tekrarlamayın:
  • '4xx' (bazı senaryolarda '409/429/408' hariç), iş hataları, '401/403', doğrulama hataları, açık 'DoNotRetry' flag.
Akıllı istisnalar:
  • '409 Çatışma' - bazen konsensüs/kilitlerden sonra bir gecikme ile tekrarlanır.
  • Kalıcı olarak tutarlı okumalar için '404' - bir veya iki kez küçük bir geri çekilme ile geri ödeme.

6) Eşzamanlılık kapakları ve "retray storm"

İstemci başına/kiracı başına/uç nokta başına eşzamanlı geri yüklemeleri sınırlayın.
İstek başına toplam deneme limiti (örn. 2-3).
Kuyrukları şişirmemek için giriş kontrolü yoluyla sıcak uç noktaları yavaşlatın.

7) Devre Kesici ve limitler ile etkileşim

CB açıksa, doğrudan retrays gerçekleştirmeyin - fallback'e gidin veya 'yarı açık' örnekleri bekleyin.
At '429' - saygı 'Retry-After'; Değilse, "yumuşak" geri alma kullanın.
Retrays gerginliği artırabilir; Uyarlanabilir eşikler uygulayın (bir olay için daha düşük 'max _ girişimleri').

8) Protokoller ve sözleşmeler

HTTP

Kodlar: '408/429/5xx'.
Başlıklar: 'Retry-After', aile 'RateLimit-', 'Idempotency-Key', 'Request-Id'.
Müşteri 'X-Request-Timeout'/' Deadline-At' (eğer öyleyse) göndermelidir.

gRPC

Bir son tarih ile bağlam kullanın; 'UNAVAILABLE', 'DEADLINE _ EXCEEDED', yöntem başına yeniden ödeme politikalarına saygı gösterin.
Idempotent RPC'ler için, retrays dahil; Mutasyonlar için - sadece idempotency desteği ile.

9) Kuyruklar, arka plan görevleri ve entegrasyonlar

En az bir kez işleyenler - idempotent eylemler, anahtar veri tekilleştirme.
Girişimler arasında geri çekilme için gecikme kuyruğu (örneğin, 5s/30s/2m).
Bir dizi deneme ve manuel işleme ile ölü harf kuyruğu (DLQ).
Giden kutusu/CDC - tekrarların işlem bütünlüğünü tehlikeye atmaması için.

10) Hedging vs Retries

Hedging, kuyruk gecikmesinde son derece kritik okumalar için kullanışlıdır.
Limit: Taleplerin en fazla % X'i, start-grace gecikmesi (örneğin, p95 gecikmesi), kaybedenlerin iptali.
Güçlü idempotency olmadan yazma işlemlerine hedging uygulamayın.

11) Telemetri ve gözlemlenebilirlik

Теги: 'tenant _ id', 'endpoint', 'entry', 'decision' (retry/skip), 'reason', 'backoff _ ms', 'deadline _ ms', 'idempotency _ key'.
Metrikler: geri çekilmelerin payı, geri çekilmelerden sonra başarı, p95/p99 "uçtan uca", aşılan son teslim tarihlerinin sayısı, CB tetiklemesi.
Denetim kayıtları: Üst N "gürültülü" anahtarlar/uç noktalar, 429/503 ile korelasyon.

12) Test ve kaos

Profiller: "saw" (burst-lull), "storm" (mass timeouts), "sticky" errors (every Nth), latency tails.
Torus sınırlayıcı/önbellek/kuyruk hataları, saat eğriltme.
Toplam sürenin (girişimler + geri alma) SLO'ya uyup uymadığını denetler.

13) Politika pseudocode

pseudo handle(req, deadline):
attempt = 0 backoff = initial()
while attempt < MAX_ATTEMPTS and now() < deadline:
attempt += 1 with timeout(per_attempt_timeout(deadline, attempt)):
try:
resp = call(req)
if isRetryableStatus(resp): raise Retryable(resp. status)
return resp except Retryable as e:
if circuit. isOpen(dep) or! isIdempotent(req): break sleep(jitter(backoff))
backoff = min(exp(backoff), MAX_BACKOFF)
except NonRetryable:
break return fail_or_fallback(req)

14) Yapılandırma şablonu (örnek)

yaml retries:
default:
max_attempts: 3 initial_backoff_ms: 150 max_backoff_ms: 2000 strategy: exponential_full_jitter respect_retry_after: true per_attempt_timeout_fraction: 0. 4 # 40% of remaining deadline hedging:
enabled: false read_heavy:
max_attempts: 4 initial_backoff_ms: 80 max_backoff_ms: 1200 hedging:
enabled: true start_after_p95_ms: 300 max_extra_requests_ratio: 0. 05 write_strict:
max_attempts: 2 initial_backoff_ms: 250 max_backoff_ms: 1000 idempotency_required: true

limits:
concurrent_retries_per_tenant: 100 concurrent_retries_per_endpoint: 20

15) Satış öncesi kontrol listesi

  • Son tarihler çağrılar yoluyla yayılır; SLO ≤ toplam süresi.
  • jitter ile backoff algoritması; Yük testi ile doğrulanmış parametreler.
  • IDempotence: kayıtlar için anahtarlar/günlükler/tazminatlar.
  • Retray politikaları okuma ve kayıtlar için farklılık gösterir; 'Retry-After'a saygı göster.
  • Geri ödeme rekabet gücü ve toplam girişim sayısı sınırlıdır.
  • Devre kesici ve hız limitleri ile entegrasyon yapılandırılmıştır.
  • Telemetri: etiketler, metrikler, neden günlükleri; Panolar p95/p99, retrays sonra başarı payı.
  • "Fırtınalar've gecikme kuyrukları testleri, görevler için DLQ.
  • Müşteri belgeleri: kodlar/başlıklar, geri alma ve iptal örnekleri.

16) Tipik hatalar

Zaman aşımı/son tarih olmayan tekrarlar "sonsuz beklentiler'dir.
Titremesiz sabit duraklamalar - senkron dalgalar ve DDoS kendini sabote etme.
Güvensiz kayıtların idempotency olmadan yeniden denenmesi - kopyalar ve eşzamansızlık.
'Retry-After've CB sinyallerini görmezden gelmek - artan olay.
Kapak eksikliği ve giriş kontrolü nedeniyle kuyruklardaki darboğazlar.
Retrays nedenleri/çözümleri telemetri eksikliği - "kör uçuş".

17) Hızlı tarifler

Genel API okur: 3 girişimleri, 'başlangıç = 100ms', 'max = 1s', tam jitter, trafiğin %5 kadar hedging.
Kritik kayıtlar (ödeme): 1-2 maksimum deneme, katı zaman aşımı, zorunlu 'Idempotency-Key', riskten korunma yok.
Dış entegrasyonlar: '429/Retry-After', 'max _ entry = 3', 'max _ backoff = 2-5s', giden akış limitlerine saygı gösterin.
Arka plan görevleri: delay-backoff (5'ler - 30'lar - 2m), DLQ, idempotent işleyicileri.

Sonuç

İyi bir tekrar politikası, hızlı iyileşme ve kontrollü başarısızlık arasındaki dengedir. Son tarihler, idempotans, jitter ile üstel geri dönüş, rekabeti sınırlama ve altyapı sinyallerine saygı duyma, geri çekilmeleri bir "fırtına'dan SLO güvenilirliğini ve kalıcılığını artırmak için bir araca dönüştürür.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.