Töleglerde gaýtalanmalar we backoff
Töleglerde gaýtalanmalar we backoff
1) Näme üçin gaýtalanmalar gerek?
Öwrülişik: ýumşak şowsuzlyklar (timeouts, 3DS-ýalňyşlyklar, tor şowsuzlyklary) köplenç gaýtalananda dikeldilýär: "Auth Rate" -e + 2-7 p.p.
Durnuklylyk: PSP/ACS/bankyň lokal şowsuzlyklary alternatiw ýollar bilen tekizlenýär.
Oýunçynyň tejribesi: dogry gurlan gaýtalanmalar infrastrukturanyň "sesini" goşa hasapdan çykarmazdan gizleýär.
2) Esasy ýörelgeler
1. "payment intent" (PI) derejesindäki idempotentlik: bir amal = bir 'idempotency _ key'; islendik gaýtadan ýüz tutmak pul ýagdaýyny üýtgetmeýär.
2. Hatalary bölmek:- Hard decline (mysal üçin 'Do not honor' emitentiň berk syýasaty, 'Insufficient funds') → adatça birbada retraim däl.
- Soft decline/tehniki (timeout, 'Issuer unavailable', 'Try again') → rugsat edilen retrai.
- 3. Backoff + synanyşyk çäklendirmesi: gijikdirmegi eksponensial ýokarlandyrýarys, jitleri goşýarys we çäklerden geçmeýäris (adatça 2-3 synanyşyk).
- 4. Baglanyşykda marşrut: retrai diňe bir "şol bir PSP-den gaýtalamak" däl, eýsem PSP/MID/3DS-re modeimi/usulyny üýtgetmekdir.
- 5. Syn edilişi: her hop Route Journal-da ýazylýar (PSP, reason, latency, 3DS-re modeim, fee, netije).
3) Retra hakyndaky çözgüt üçin ýalňyşlyklaryň klassifikasiýasy
4) Backoff-strategiýalar (tejribe)
4. 1 Jitter bilen eksponensial backoff (maslahat berilýär)
База: `delay_n = min(base 2^n, max_delay)`
Jitler: 'delay = rand (0, delay_n)' - köp haýyş bir wagtyň özünde gaýtalananda "stampedalary" peseldýär.
Adaty parametrler: 'base = 200-500 ms', 'max _ delay = 5-10 s', 'n ≤ 2-3'.
4. 2 Çyzykly backoff
Internetdäki "tolgunyşyklarda" ýönekeý, ýöne has erbet. Eksponensial jitterden pes.
4. 3 Wagt taşlaýyş syýasaty
Client timeout (siziňki) ≤ PSP SLA (mysal üçin 3-5 s), ýogsam dublikat/doňdurma töwekgelçiligi ýokarlanýar.
Webhook/confirm üçin aýratyn wagt beriň: eger tassyklama gelmedik bolsa → öwezini dolmak barlagy (ledger/PSP).
5) Dampotentlik we dubllardan goramak
Payment Intent (PI) statusyny, mukdaryny, usulyny, 'idempotency _ key', marşrutlaryň taryhyny saklaýar.
Her hop we retry birmeňzeş açary ulanýarlar.
Öwezini dolmak amallary: bölünen ýagdaýynda (PSP-de approve, sizde bolsa timeout) - "reconcile-pull" + ledjeri düzetmek.
Webhook gaýtadan iberilende gaýtadan ygtyýarnamany aýyryň: 'transaction _ id '/' PSP reference' -iň özboluşlylygyny barlaň.
6) 3DS/SCA we gaýtalanmalar
Soft decline frictionless → retrai s challenge.
ACS timeout/unavailable → eksponensial backoff, soňra alternatiw kanal (açyk banking/APM) ýa-da beýleki PSP.
ACS köpçülikleýin pese gaçanda - circuit-breaker, 'challenge rate' ösüşi, mukdarlar boýunça wagtlaýyn çäkler.
7) APM/açyk banking üçin gaýtalanmalar
Open banking/instant rails (SEPA Instant/FPS/Pix/UPI):- Retraýlar çäklidir: üpjün edijiniň tarapynda idempotentligi we gijikdirilen webhook 'ax-daky statuslary barlaň.
- Näbelli statusda - backoff bilen polling we berk deňeşdirmeler.
- Talonlar/nagt pul: retraýlar "onlaýn-amallar" hökmünde ulanylmaýar, ýöne töleg möhletine gözegçilik we "status refresh" hereket edýär.
8) Tölegler (netijeler): gaýtalanmalar we nobatlar
Bankyň tehniki şowsuzlygy/PSP → backoff-dren bilen queued payouts.
KYT/velocity fail → retraim däl, el bilen barlamak üçin terjime.
Nobatyň ileri tutulmagy: VIP/ownuk pul/haýyşnamanyň möhleti; SLA möhletleri we awto-eskalasiýa.
Retraýyň ikinji ädiminde alternatiw relsler (RTP/FPS/SEPA Instant/Pix).
9) Circuit-breaker we retralar
Lokal (PSP/MID/BIN-de): ýalňyşlyklar ýüze çykanda → bu ugurda retraýalary saklaýarys, alternatiwa geçýäris.
Global (usul/sebit): ulgamlaýyn pese gaçmak → usuly öçürýäris, APM/açyk banking hödürleýäris.
Half-open: Doly yzyna gaýtarylmazdan ozal dikeldişi barlamak üçin traffigiň bir bölegini (1-5%) yzyna gaýtarýarys.
10) Retraýlar strategiýasynyň pseudo-resminamasy
python def pay_with_retries(pi):
ensure_idempotency(pi.key)
if not compliance_pass(pi): return REJECT
routes = rank_candidates(pi) # по вероятности approve, fee, health attempts = 0 for route in routes:
policy3ds = select_3ds(pi, route)
res = call_psp(route, pi, policy3ds, pi.key, timeout=3.0)
log_attempt(pi, route, res)
if res.approved: return APPROVED
if is_soft_decline(res) or is_transient_error(res):
while attempts < MAX_ATTEMPTS and not breaker_open(route):
delay = backoff_with_jitter(base=0.3, attempt=attempts, cap=8.0)
sleep(delay)
policy3ds = maybe_toggle_3ds(policy3ds, res)
res = call_psp(route, pi, policy3ds, pi.key, timeout=3.0)
log_attempt(pi, route, res)
attempts += 1 if res.approved: return APPROVED if is_hard_decline(res): break перейти к следующему маршруту (PSP-B/APM/open banking)
return DECLINED
11) KPI we maksatlaýyn görkezmeler
Incremental Approvals from Retries: + 2-7 p.p. esasy konwersiýa.
Avg Retry Attempts per Approved Tx: 1. 2–1. 5 (aşakda saklaň 1. 7).
Retry Success Rate (soft/tech): ≥ 25–40%.
Duplicate Rate: 0 dogry idempotentlik ýagdaýynda.
P95 Latency (retraýlary göz öňünde tutup): <7 s gutarnykly jogaba çenli.
Töleg SLA (instant share): ≥ 70% ýeňil çekler, möhleti geçen <maksat çäkleri.
12) Wakalaryň pleýbuklary
A. PSP-A-da köpçülikleýin timeouts
1. PSP-A üçin lokal döwüjini aç
2. Retraidleri PSP-B/APM-e paýla.
3. Jitter bilen eksponensial backoff, 2-3 synanyşyk çägi.
4. Half-open kanareýasy 10-15 minutdan soň.
B. zaýalanma ACS/3DS
1. Ösüş detekti 'soft decline', timeouts.
2. & Çallenge rate; traffigiň bir bölegi → açyk banking.
3. Agyr çekleri goýuň, velocity çäklerini goşuň.
C. Payouts boýunça gijikdirmeler
1. Nobata geçirmek, VIP/kiçi möçberleri ileri tutmak.
2. Alternatiw rails üçin reraut (RTP/FPS/SEPA Instant/Pix).
3. Oýunçylara aragatnaşyk + awto-eskalasiýa.
13) Gözegçilik etmek we maglumatlar
Route Journal: PSP/MID, BIN/issuer, reason, latency, 3DS-режим, retry chain, итог, fee.
Daşbordlar: Auth Rate (banklar boýunça), Retry Success, Avg Attempts, Decline Mix, p95 latency, Payout Queue Depth.
Alertler: reason-kodlar boýunça spikes, synanyşyklaryň/latency köpelmegi, netijeleriň nobatlarynyň aşa köp bolmagy.
14) Girizmegiň çek-listleri
Arhitektura/maglumatlar
- Payment Intent + `idempotency_key` на все hops.
- Reason-kod matrisi: retryable vs non-retryable.
- Gol çekilen webhooks, PSP reference.
Backoff/Düzgünler
- Jitter bilen eksponensial backoff; synanyşyklaryň çäkleri we penjiräniň wagty.
- Smart retry: 3DS/MID/PSP/usulyny üýtgetmek; kartoçkalar üçin tapawut vs APM/açyk banking.
- Circuit-breakers (lokal/global), half-open-kanareýkalar.
Dolandyryjy/Barlyşyk
- "Asylan" statuslarda öwezini dolmak amallary.
- T + 0/T + 1 barlyşyk: PSP, bank, pul dolandyryjysy.
- Confirm/webhook-da wagt we SLA syýasaty.
Amallar/utgaşmalar
- RG/sanksiýalar/PEP/ýaş - retraýlara çenli.
- KYT/velocity на payouts; el bilen gygyrmagyň düzgünleri.
- Wakalar/güýçlenmeler üçin Runbooks we RACI.
15) Ykdysadyýet we töwekgelçilik
3DS-fiýa, FX, çarjbek-gymmaty, retrai-overhead-i göz öňünde tutup, effective rate hasaplaň.
Çargeback exposure we ätiýaçlyklary ýaýratmazlyk üçin ýokary töwekgelçilikli segmentler boýunça retralary berk çäklendiriň.
16) Jemleýji
Gaýtalamalar dolandyrylanda işleýär: idempotentlik, reason-kodlaryň aç-açan matrisi, jitter bilen eksponensial backoff, synanyşyklaryň çäklendirilmegi we marşrut bilen baglanyşyk (PSP/3DS/usulyň üýtgemegi). Circuit-breaker, payouts üçin nobatlar we güýçli barlyşyklar goşuň - goşa we kassa "deşikleri" döretmezden konwersiýany yzygiderli ýokarlandyrarsyňyz.