Gaýtalama we backoff syýasatlary
Gaýtalamalar (retries) wagtlaýyn şowsuzlyklardan halas bolmaga kömek edýär, ýöne nädogry sazlanylanda traffigiň göçmegine, amallaryň goşa we kaskadly ýykylmagyna sebäp bolýar. Retraýlaryň ygtybarly syýasaty elmydama möhletlerden/wagtlardan başlaýar, dempotentligi göz öňünde tutýar we backoff + jitterleri ulanýar.
1) Esasy ýörelgeler
1. Ilki wagt/möhlet, soň bolsa retraý. Wagt çäksiz gaýtalamak diňe ret etmegi uzaldýar.
2. Retraý - diňe howpsuz/idempotent amallary üçin. Howpsuz däller üçin - idempotency-keys we geleşik kepillikleri arkaly.
3. Backoff hökmanydyr. Tolkunlary sinhronlaşdyrmak üçin eksponensial ýa-da GCRA-meňzeş jitter.
4. Synanyşyklaryň sanyny we umumy býudjet-wagty çäklendiriň. Ulanyjynyň SLO-syndan çykmaň.
5. Infrastruktura signallaryna hormat goýuň. '429/503' + 'Retry-After', circuit breaker ýagdaýy, nobatlaryň çäkleri.
2) Wagtlar we möhletler (deadline propagation)
Haýyşnamanyň wagty <SLO hyzmaty, möhleti zynjyryň aşagyna ýaýraýar (HTTP sözbaşylar/gRPC context).
Wagtyň düzümi: jemi (birinji synanyşyk + backoff + indiki) ≤ ulanyjy möhleti.
Okamak/ýazmak üçin dürli wagtlar: ýazgylar has gysga we has berk; okamak hedging etmäge mümkinçilik berýär.
3) Idempotentlik we howpsuz gaýtalanmalar
Okamak (GET/Idempotent RPC): '5xx', 'UNAVAILABLE', tor wagtlary howpsuz gaýtalamak.
Bellikler:- Serhetde 'Idempotency-Key' (HTTP) ýa-da request-ID ulanyň; serwer duplizirlemeli.
- Idempotent prosessorlary ýazyň: "upsert", "at-least-once" + kompensasiýa (saga).
- Daşarky tölegler/özara hasaplaşyklar - diňe idempotent açarlary we amallar žurnaly bilen.
4) Backoff algoritmleri
Exponential: 'base 2 ^ attempt', çäkli 'max _ backoff'.
Decorrelated Jitter (full/equal jitter): müşderileri sinhronlaşdyrmak üçin aralykda tötänlik.
GCRA/Token-Bucket-şuňa meňzeş gijikdirmeler: rate limits bilen ylalaşyldy.
Serhetler: 'initial _ backoff' (50-200 ms okalýar; 200-500 ms), 'max _ backoff' (1-5 s), 'max _ elapsed' (mysal üçin 3-10 s).
Maslahat berilýän şablon: eksponensial backoff + full jitter.
5) Karar kabul etmegiň "gaýtalamak/gaýtalamazlyk" syýasaty
Şu wagt gaýtalaýarys:- Tor ýalňyşlyklary/wagtlary, '429' (hormat bilen 'Retry-After'), 'ýumşak' 5xx '(' 502/503/504 '), gRPC' UNAVAILABLE/DEADLINE _ EXCEEDED '.
- '4xx' (käbir ssenariýalarda '409/429/408' -dan başga), iş ýalňyşlyklary, '401/403', tassyklama ýalňyşlyklary, aýdyň 'DoNotRetry' baýdagy.
- '409 Conflict' - käwagt konsensusdan/loklardan soň gijikdirilip gaýtalanýar.
- '404' eventually consistent okamak üçin - kiçijik backoff bilen bir-iki gezek retray.
6) Concurrency caps we "retraý tupany"
Bir wagtyň özünde per-client/per-tenant/per-endpoint retraýalaryny çäklendiriň.
Haýyşnama synanyşyklaryň jemi çägi (mysal üçin 2-3).
Nobatlary köpeltmezlik üçin admission control arkaly "gyzgyn" end nokatlaryny haýalladyň.
7) Circuit Breaker we çäkler bilen özara gatnaşyk
CB açyk bolsa, göni retra etmäň - fallback-a gidiň ýa-da 'half-open' synagyna garaşyň.
'429' -da 'Retry-After' -e hormat goýuň; ol ýok bolsa - "ýumşak" backoff ulanyň.
Retralar ýükleri artdyryp biler; adaptasiýa bosagalaryny ulanyň (waka bolan ýagdaýynda 'max _ attempts' -i azaldyň).
8) Teswirnamalar we şertnamalar
HTTP
Kodlar: '408/429/5xx'.
Sözbaşylar: 'Retry-After', 'RateLimit-', 'Idempotency-Key', 'Request-Id'.
Müşderi 'X-Request-Timeout '/' Deadline-At' geçirmeli.
gRPC
Möhletli konteksti ulanyň; "UNAVAILABLE", "DEADLINE _ EXCEEDED" -e hormat goýuň, usulyň retraý polisleri.
Idempotent RPC üçin - retraýlary açyň; mutasiýa üçin - diňe idempotentligiň goldawy bilen.
9) Nobatlar, fon meseleleri we integrasiýa
At-least-once prosessorlary → idempotent hereketleri, açar boýunça duplikasiýa.
Synanyşyklaryň arasynda backoff üçin Delay queue (mysal üçin 5s/30s/2m).
Dad-letter queue (DLQ) synanyşyk çäkleri we el bilen işlemek.
Outbox/CDC - gaýtalanmalar geleşik bitewiligini bozmaz ýaly.
10) Hedging vs Retries
Hedging (aýna soragy) guýruk gizlinliginde ýokary derejeli okamak üçin peýdalydyr.
Çäklendiriň: X% -den köp bolmaly däl, "başlangyç-grace" gijikdirilmegi (mysal üçin p95-gizlinlik), ýitirilenleri ýatyrmak.
Güýçli idempotentlik bolmazdan, ýazgy amallaryna hedging ulanmaň.
11) Telemetriýa we gözegçilik etmek
Теги: `tenant_id`, `endpoint`, `attempt`, `decision` (retry/skip), `reason`, `backoff_ms`, `deadline_ms`, `idempotency_key`.
Metrikler: retraýlaryň paýy, retraýlardan soň üstünlik, p95/p99 "end-to-end", geçen möhletleriň sany, CB-iň işleýşi.
Audit ýazgylary: "şowhunly" açarlaryň/endpointleriň ýokarky N, 429/503-den korrelasiýa.
12) Synag we bulam-bujarlyk
Profiller: "arra" (burst-sessizlik), "tupan" (köpçülikleýin wagt), "ýelmeşýän" ýalňyşlyklar (her N-i), gizlinlik guýruklary.
Limiter/kesiş/nobat setiriniň şowsuzlyklary, clock-skew.
Umumy dowamlylygyň (attempts + backoff) SLO-a laýyk gelýändigini barlamak.
13) Syýasatyň ýalan resminamasy
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) Konfigurasiýa şablony (mysal)
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) Azyk önüminden öň çek-sanawy
- Möhletler jaňlar arkaly ýaýradylýar; SLO ≤ umumy dowamlylygy.
- Jitter bilen backoff algoritmi; parametrler ýük synagy bilen tassyklanýar.
- Idempotentlik: ýazgylar üçin açarlar/magazinesurnallar/öwezini dolmak.
- Retraý syýasatçylar okamak we ýazmak üçin tapawutlanýar; respect `Retry-After`.
- Retraýlaryň bäsdeşlik ukyby we synanyşyklaryň umumy sany çäklidir.
- Circuit breaker we rate limits bilen integrasiýa sazlandy.
- Telemetri: bellikler, metrikler, sebäpler; p95/p99 dashbordlary, retraýlardan soň üstünlikleriň paýy.
- "Tupan" we gizlinlik guýruklarynyň synaglary, meseleler üçin DLQ.
- Müşderiler üçin resminamalar: kodlar/sözbaşylar, backoff we ýatyryş mysallary.
16) Adaty ýalňyşlyklar
Taýmautsyz/möhletsiz gaýtalamak - "baky garaşmak".
Jittersiz kesgitlenen arakesmeler - sinhron tolkunlar we DDoS-öz-özüni işlemek.
Idempotentlik bolmazdan howply ýazgylaryň retralary - goşa we rasinhronizasiýa.
'Retry-After' we CB signallaryny äsgermezlik etmek - hadysanyň güýçlenmegi.
Caps we admission control ýoklugy sebäpli nobatlardaky dar ýerler.
Retraýlaryň sebäpleriniň/kararlarynyň telemetriýasynyň ýoklugy - "kör uçuş".
17) Çalt reseptler
API köpçülige okalýar: 3 synanyşyk, 'initial = 100ms', 'max = 1s', full jitter, 5% traffige çenli hedging.
Kritiki ýazgylar (töleg): 1-2 maksimum synanyşyk, berk wagt, hökmany 'Idempotency-Key', hedgingsiz.
Daşarky integrasiýalar: '429/Retry-After', 'max _ attempts = 3', 'max _ backoff = 2-5s', gidýän akymyň çäkleri.
Fon meseleleri: delay-backoff (5s → 30s → 2m), DLQ, idempotent prosessorlary.
Netije
Gowy gaýtalama syýasaty - bu çalt dikeldiş bilen gözegçilik edilýän şowsuzlygyň arasyndaky deňagramlylyk. Möhletler, idempotentlik, jitter bilen eksponensial backoff, bäsdeşligi çäklendirmek we infrastruktura signallaryna hormat goýmak retralary "tupandan" SLO-ny saklamak we ygtybarlylygy ýokarlandyrmak guralyna öwürýär.