Logo GH

Takrorlash va backoff siyosati

Takrorlash (retries) vaqtinchalik muvaffaqiyatsizliklardan omon qolishga yordam beradi, lekin noto’g’ri sozlash natijasida trafik ko’chkilari, operatsiya dubllari va kaskadli qulashlar paydo bo’ladi. Ishonchli retraj siyosati har doim muddatlar/taymaut bilan boshlanadi, idempotentlikni hisobga oladi va backoff + jitterdan foydalanadi.

1) Bazaviy prinsiplar

1. Avval taymaut/muddat, keyin retraj. Vaqt chegarasisiz takrorlash faqat rad etishni uzaytiradi.
2. Retray - faqat xavfsiz/idempotent operatsiyalar uchun. Xavfsizlar uchun - idempotency-keys va tranzaksion kafolatlar orqali.
3. Backoff talab qilinadi. To’lqinlarni sinxronlashtiradigan eksponensial yoki GCRA jitterga o’xshash.
4. Urinishlar sonini va umumiy byudjet-vaqtni cheklang. Foydalanuvchining SLOsidan chiqmang.
5. Infratuzilma signallarini hurmat qiling.’429/503’+’Retry-After’, circuit breaker holati, navbat chegaralari.

2) Taymautlar va muddatlar (deadline propagation)

So’rov vaqti <SLO servisi, muddati zanjir bo’yicha pastga tarqaladi (HTTP sarlavhalari/gRPC context).
Taymaut kompozitsiyasi: jami (birinchi urinish + backoff + keyingi urinish) ≤ foydalanuvchi muddati.
Oʻqish/yozish uchun turli taymautlar: yozuvlar qisqaroq va qattiqroq; oʻqishlar hedgingga ruxsat beradi.

3) Idempotentlik va xavfsiz takrorlash

Oʻqish (GET/idempotent RPC):’5xx’,’UNAVAILABLE’, tarmoq taymautlarida takrorlash xavfsiz.

Yozuvlar:
  • Chegarada’Idempotency-Key’(HTTP) yoki request-ID’dan foydalaning; server deduplyatsiya qilishi kerak.
  • Idempotent ishlov beruvchilarni yozing: «upsert», «at-least-once» + kompensatsiyalar (saga).
  • Tashqi to’lovlar/o’zaro hisob-kitoblar - faqat idempotent kalitlar va operatsiyalar jurnali bilan.

4) Backoff algoritmlari

Exponential:’base 2 ^ attempt’, cheklangan’max _ backoff’.
Decorrelated Jitter (full/equal jitter): mijozlarni xronizatsiya qilish uchun tasodif.
GCRA/Token-Bucket kabi kechikishlar: rate limits bilan kelishilgan.
Chegaralar:’initial _ backoff’(50-200 ms o’qish; 200-500 ms yozuv),’max _ backoff’(1-5 s),’max _ elapsed’(masalan, 3-10 s).

Tavsiya etilgan namunasi: eksponensial backoff + full jitter.

5) Qaror qabul qilish siyosati «takrorlash/takrorlamaslik»

Takrorlaymiz:
  • Tarmoq xatolari/taymautlari,’429’(hurmat bilan’Retry-After’),’yumshoq’5xx’(’502/503/504’), gRPC’UNAVAILABLE/DEADLINE _ EXCEEDED’.
Takrorlamaymiz:
  • ’4xx’ (ba’zi stsenariylarda’409/429/408’dan tashqari), biznes xatolari,’401/403’, validatsiya xatolari, aniq’DoNotRetry’bayrog’i.
Aqlli istisnolar:
  • ’409 Conflict’ - ba’zan konsensusdan keyin kechiktirilgan takrorlash.
  • ’404’ eventually consistent o’qish uchun - kichik backoff bilan bir-ikki martalik retray.

6) Concurrency caps va «retray bo’roni»

Bir vaqtning oʻzida ishlatiladigan per-client/per-tenant/per-endpoint retralarini cheklang.
So’rovga urinishlarning jami limiti (masalan, 2-3).
Navbatlarni oshirmaslik uchun admission control orqali «issiq» endpoyntlarni sekinlashtiring.

7) Circuit Breaker va limitlar bilan o’zaro hamkorlik qilish

Agar CB open boʻlsa, retrajni toʻgʻridan-toʻgʻri bajarmang - fallbackga boring yoki’half-open’ni kuting.
’429’ da -’Retry-After’ni hurmat qiling; u bo’lmaganda - «yumshoq» backoff qo’llang.
Retralar yukni oshirishi mumkin; moslashuvchan chegaralardan foydalaning (hodisa yuz berganda’max _ attempts’ni pasaytiring).

8) Bayonnomalar va kontraktlar

HTTP

Kodlar:’408/429/5xx’.
Sarlavhalar:’Retry-After’,’RateLimit-’,’Idempotency-Key’,’Request-Id’.
Mijoz’X-Request-Timeout ’/’ Deadline-At’ni uzatishi kerak (agar sizda shunday qabul qilingan boʻlsa).

gRPC

Muddat kontekstidan foydalaning; ’UNAVAILABLE’,’DEADLINE _ EXCEEDED’ga hurmat qiling.
Idempotent RPC uchun - retraylarni yoqing; mutatsiyalar uchun - faqat idempotentlik ko’magida.

9) Navbatlar, fon vazifalari va integratsiya

At-least-once ishlov beruvchilar → idempotent harakatlar, kalit bo’yicha deduplikatsiya.
Urinishlar orasida backoff uchun Delay queue (masalan, 5s/30s/2m).
Dead-letter queue (DLQ) urinishlar limiti va qoʻlda ishlov berish.
Outbox/CDC - takrorlash tranzaksiya yaxlitligini buzmasligi uchun.

10) Hedging vs Retries

Xedging (ko’zgu so’rovi) quyruq latentligida juda tanqidiy o’qish uchun foydalidir.
Cheklang: X% dan koʻp boʻlmagan soʻrovlar, «start-greys» ni kechiktirish (masalan, p95-latentlik), yutqazganlarni bekor qilish.
Xedging’ni yozuv operatsiyalarida kuchli idempotentsiz qoʻllamang.

11) Telemetriya va kuzatish

Теги: `tenant_id`, `endpoint`, `attempt`, `decision` (retry/skip), `reason`, `backoff_ms`, `deadline_ms`, `idempotency_key`.
Metrika: retraylar ulushi, retraylardan keyingi muvaffaqiyat, p95/p99 «end-to-end», ortiqcha muddatlar soni, CB ishga tushirilishi.
Audit loglari: yuqori N «shovqinli» kalitlar/endpointlar, 429/503 bilan korrelyatsiya.

12) Test va tartibsizlik

Profillar: «arra» (burst-sukunat), «bo’ron» (ommaviy taymautlar), «yopishqoq» xatolar (har bir N-i), latentlik dumlari.
Limiter/kesh/navbat sustkashligi, clock-skew.
Umumiy davomiyligi (attempts + backoff) SLOga toʻgʻri kelishini tekshirish.

13) Siyosatning soxta hujjati

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) Konfiguratsiya shabloni (misol)

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) Sotishdan oldingi chek-varaq

  • Muddatlar chaqiriqlar orqali tarqaladi; SLO ≤ umumiy davomiyligi.
  • Jitter bilan backoff algoritmi; parametrlar yuklash testida validlangan.
  • Idempotentlik: yozuvlar uchun kalitlar/jurnallar/kompensatsiyalar.
  • Retray siyosatchilar o’qish va yozish uchun farqlanadi; respect `Retry-After`.
  • Retrajlarning raqobatbardoshligi va urinishlarning umumiy soni cheklangan.
  • Circuit breaker va rate limits bilan integratsiya oʻrnatilgan.
  • Telemetriya: teglar, metrika, sabablar; p95/p99 dashbordlari, retrajlardan keyingi muvaffaqiyatlar ulushi.
  • «Bo’ronlar» va latentlik dumlari testlari, vazifalar uchun DLQ.
  • Mijozlar uchun hujjatlar: kodlar/sarlavhalar, backoff va bekor qilish misollari.

16) Tipik xatolar

Taymaut/muddatsiz takrorlash - «abadiy kutish».
Jittersiz qat’iy pauzalar - sinxron to’lqinlar va DDoS-o’z-o’zidan ishlash.
Xavfsiz yozuvlarning idempotentsiz retralari - dubli va rassinxronizatsiya.
’Retry-After’ va CB signallarini e’tiborsiz qoldirish - hodisaning kuchayishi.
Kaps va admission control mavjud emasligi sababli navbatdagi tor joylar.
Retraylarning sabablari/qarorlari telemetriyasining yo’qligi - «ko’r-ko’rona parvoz».

17) Tezkor retseptlar

Ommaviy oʻqish API: 3 urinish,’initial = 100ms’,’max = 1s’, full jitter, hedging 5% gacha.
Tanqidiy yozuvlar (to’lov): 1-2 maksimal urinishlar, qat’iy taymut, majburiy’Idempotency-Key’, hedgingsiz.
Tashqi integratsiyalar:’429/Retry-After’,’max _ attempts = 3’,’max _ backoff = 2-5s’, chiquvchi oqim limitlarini hurmat qilish.
Orqa fon vazifalari: delay-backoff (5s → 30s → 2m), DLQ, idempotent ishlov beruvchilar.

Xulosa

Yaxshi takrorlash siyosati - bu tezkor tiklanish va nazorat ostidagi rad etish o’rtasidagi muvozanat. Deadline, idempotentlik, jitter bilan eksponensial backoff, raqobatni cheklash va infratuzilma signallarini hurmat qilish retraylarni «boʻron» dan SLOni saqlash va ishonchliligini oshirish vositasiga aylantiradi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.