GH GambleHub

Timeout и circuit control

1) Bu näme üçin zerur?

Ulgamlar bir "ölümli" şowsuzlykdan däl-de, gijikdirmeleriň we "tolkun" retraýalarynyň toplanmagyndan ýykylýar. Taýmautlar garaşmak wagtyny çäklendirýär we çeşmeleri goýberýär, circuit control (breaker + shedding + uýgunlaşýan bäsdeşlik) bolsa pese gaçmagyň garaşlylyk zynjyryna ýaýramagynyň öňüni alýar. Maksat p95/p99-ny maksatly çäklerde saklamak we bölekleýin şowsuzlyklarda elýeterliligi saklamak.


2) Esasy kesgitlemeler

2. 1 Taýmaut görnüşleri (L7/L4)

Connect timeout - TCP/TLS baglanyşygy.
TLS/Handshake timeout - TLS/HTTP2 preface.
Write timeout - haýyşy ibermek (bedeni goşmak bilen).
Read timeout - jogabyň we/ýa-da tutuş bedeniň ilkinji baýtyna garaşmak.
Idle/Keep-Alive timeout - hereketsiz baglanyşyk.
Overall deadline - ähli haýyş üçin "gaty" möhlet (end-to-end).

2. 2 Wagt wagty (deadline budget)

Maksatly 'deadline _ total' -i saýlaýarys we aşakdaky tapgyrlara bölýäris:
  • `ingress (gateway) + authZ + app + DB/cache + outbound PSP`.
payments 'POST' üçin mysal (maksat 400 ms):
  • şlýuz: 30 ms,
  • goşundy: 120 ms,
  • BD: 120 ms,
  • PSP: 100 ms,
  • ätiýaçlyk: 30 ms.

2. 3 Propagasiýa we ýatyrmak

'deadline '/' timeout' zynjyryň aşagyna geçmeli (kontekst, sözbaşylar, gRPC Deadline). Möhleti gutaranda - fon amallaryny ýatyrmak (abort/ctx cancel), blokirlemeleri/semaforlary arassalamak.


3) Taýmautlary oturtmak strategiýalary

1. Ýokardan-aşak: SLO we p95-e esaslanyp - ahyrky-soňy goýuň, soň bolsa aşaky wagtlara bölüň.
2. "Gymmat" ýollary kesgitlemek (faýly ýüklemek, hasabatlar, daşarky PSP) - aýry-aýry has uzyn, ýöne çäkli.

3. Idempotent vs write:
  • idempotent (GET/status gaýtalamalary) - gysgaça, has agressiw;
  • write/pul - birneme uzyn, ýöne bir gezek gaýtalamak we duýgurlyk bilen.
  • 4. Meýilnamalar/tenantlar boýunça derejelemek (enterprise has uzyn timeout bolup biler, ýöne az meňzeşlik).


4) Circuit breaker: modeller we parametrler

4. 1 Işe girizmek syýasaty

"Failure-rate": "S "/" S" penjiresinde X% ≥ ýalňyşlyklaryň paýy.
Consecutive failures: M yzly-yzyna şowsuzlyklar.
Slow-call rate: Jaňlaryň paýy T. bosagasyndan has uzyn.
Error classes: wagt/5xx/connection-reset → "ölümli", 4xx - göz öňünde tutulmaýar.

4. 2 Ýagdaýlar

Closed - hemme zady sypdyrýar, statistikany ýygnaýar.
Açyk - derrew şowsuzlyk (serişdeleri tygşytlaýar, garaşlylygy basmaýar).
Half-open - "suwy barlamak" üçin kiçi "synaglar" (N soraglary).

4. 3 Peýdaly goşmaçalar

Bulkhead (shpangouts): biri hemme zady "sormaz" ýaly, akym/birikme howzy.
Adaptive concurrency: gözegçilik edilýän gizlinlik boýunça awtomatiki paralelligi çäklendirmek (AIMD/Vegas meňzeş algoritmler).
Load Shedding: ýerli çeşme ýetmezçiligi (nobatlar, CPU, GC-arakesmeler) ýüze çykan halatynda irki şowsuzlyk/pese gaçma.


5) Özara gatnaşygy: wagtlar, retralar, çäkler

Ilki deadline, soň retralar: her gaýtalamak umumy möhlete laýyk gelmelidir.
Tekrarlamak üçin Backoff + jitter; "Retry-After" we retry-budget.
Rate limiting: açyk breaker - tupany güýçlendirmezlik üçin çäkleri azaldyň.
Idempotency: write-amallarda hökmanydyr ("sessiz" wagtlarda goşa bolmazlygy üçin).
Nirede retrairlemek: içerde däl-de, gyrada (müşderi/şlýuz) has gowudyr.


6) Amaly maksatlaýyn gymmatlyklar (görkezmeler)

Köpçülige açyk okalýan API: end-to-end '200-500 ms', okalýan wagt '100-300 ms'.
Möhüm write (tölegler): '300-800 ms' e2e; daşarky PSP ≤ '250-400 ms'.
Connect/TLS: '50-150 ms' (has köp - tor/çözme meselesi).
Idle: '30-90 s' (ykjam müşderiler batareýany tygşytlamak üçin gysgaça).
p95/p99 we sebitler boýunça bahalary düzüň.


7) Konfigikler we mysallar

7. 1 Envoy (cluster + route, psevdo)

yaml clusters:
- name: payments_psp connect_timeout: 100ms type: STRICT_DNS lb_policy: ROUND_ROBIN circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 2000 max_requests: 2000 max_retries: 50 outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50

routes:
- match: { prefix: "/api/v1/payments" }
route:
cluster: payments_psp timeout: 350ms        # per-request deadline idle_timeout: 30s retry_policy:
retry_on: "reset,connect-failure,refused-stream,5xx,gateways"
num_retries: 1 per_try_timeout: 200ms

7. 2 NGINX (perimetri)

nginx proxy_connect_timeout 100ms;
proxy_send_timeout  200ms;  # write proxy_read_timeout  300ms;  # read (первый байт/все тело)
keepalive_timeout   30s;
send_timeout     15s;

Быстрый отказ при перегрузке limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 50;

7. 3 gRPC (müşderi, Go-psevdo)

go ctx, cancel:= context.WithTimeout(context.Background(), 350time.Millisecond)
defer cancel()
resp, err:= client.Pay(ctx, req) // Deadline передается вниз

7. 4 HTTP-müşderi (Go)

go client:= &http.Client{
Timeout: 350 time.Millisecond, // общий дедлайн на запрос
Transport: &http.Transport{
TLSHandshakeTimeout: 100 time.Millisecond,
ResponseHeaderTimeout: 250 time.Millisecond,
IdleConnTimeout: 30 time.Second,
MaxIdleConnsPerHost: 100,
},
}

7. 5 Resilience4j (Java, psevdo)

yaml resilience4j.circuitbreaker.instances.psp:
slidingWindowType: TIME_BASED slidingWindowSize: 60 failureRateThreshold: 50 slowCallDurationThreshold: 200ms slowCallRateThreshold: 30 permittedNumberOfCallsInHalfOpenState: 5 waitDurationInOpenState: 30s

resilience4j.timelimiter.instances.psp:
timeoutDuration: 350ms

8) Synlamak we alertingler

8. 1 Metrikler

`http_client_requests{endpoint, status}`, `client_latency_bucket`

`timeouts_total{stage=connectreadwritedeadline}`
`circuit_state{dependency}`: 0/1/2 (closed/half/open)
`slow_call_rate`, `failure_rate`
`active_concurrency{route, dependency}`
`shed_requests_total{reason}` (load shedding)
`retry_total{reason}`, `retry_budget_used`

8. 2 Söwda

Spanes: ingress → handler → DB/Redis → daşarky.
Atributlar: 'timeout _ ms _ target', 'circuit _ state', 'queue _ time _ ms'.
Ekzemplarlar: p99 piklerini belli bir trace-id bilen baglanyşdyryň.

8. 3 Alertler

'p99 _ latency {critical}'> nyşanlar X minut yzly-yzyna.
'timeout _ rate {dependency}' bökmek görnüşinde> Y%.
Breaker 'open '/' flapping' -a ýygy-ýygydan geçilýär.
Ýokary CPU/GC bilen 'shed _ requests _ total' ösüşi.


9) Adaptive Concurrency & Load Shedding

9. 1 Pikir

Awtomatika latentlik guýruklarynyň köpelmeginde parallelligi peseldýär:
  • AIMD: haýal ulaldyp, ýiti azaldyp.
  • Vegas - şuňa meňzeş: Maksat nobatyny saklamak (queue time).
  • Token-based: Her haýyş belligi "ýakýar"; bellikler ölçenen tizlik boýunça berilýär.

9. 2 Ýerine ýetirmek

per-route ýerli semaforlary; Maksat 'queue _ time' -ni bosagadan aşakda saklamak.
Şlýuzda global "goragçy" (marginal RPS/bäsdeşlik).
CPU/birikdirmeler ýetmezçilik edenlerinde - logika ýerine ýetirilýänçä irki şowsuzlyk (429/503 s 'Retry-After').


10) Synag we bulam-bujarlyk ssenarileri

Latency injection: endike 50-300 ms emeli usulda goşuň.
Packet loss/dup/drop (tc/tbf, Toxiproxy).
Knob turning: birikme howuzlaryny azaltmak, ýükleri saturasiýa çenli ýokarlandyrmak.
Öldürmek/Degrade bir zona/şard (bölekleýin elýeterli däl).
Barlaglar: retraý-tupanyň "şowsuzlyga uçramaýandygy"; breaker öňünden açylýar; nobat artýarmy?


11) Antipatternler

Bir global "read timeout" jikme-jikliksiz connect/TLS/per-stage.
Umumy möhletiň ýoklugy → retralar SLO-dan çykýar.
Jittersiz we retry-budgetsiz retraýlar.
Idle-taymautsyz "baky" baglanyşyklar → deskriptorlaryň syzmagy.
Breaker 4xx-i ölüm howply ýalňyşlyklar hasaplaýar.
Ýok/abort → fon işleri müşderiniň wagtyndan soň dowam edýär.
Ykjam/durnuksyz ulgamlar üçin gaty uzyn wagt.


12) iGaming/Maliýe aýratynlyklary

Möhüm write (goýumlar/netijeler): Idempotency-Key bilen bir gysga gaýtalamak, soň '202 Accepted' + tükeniksiz garaşmagyň ýerine polling.
PSP/banking: üpjün ediji/sebit boýunça aýry-aýry syýasatlar (käbirleri has haýal).
Jogapkär tölegler we çäkler: gulplananda/gulplananda - çalt '423/409', "asylan" amallary uzaltmaň.
Hasabat/agregasiýa - asinhron (batch + status-resurs).


13) Prod-taýynlyk çek-sanawy

  • Kritik ugurlar boýunça (GET/POST) ahyrky-soňy kesgitlenildi.
  • Býudjet tapgyrlara bölünýär; Möhletiň propagasiýasy goşuldy.
  • Şlýuzda we müşderilerde connect/TLS/read/write/idle wagtlary konfigi.
  • Failure-rate we slow-call bosagalary bolan circuit breaker; dogry half-open logika.
  • Bulkheads garaşly; per-route paralellik çäkleri.
  • Artykmaç ýüklenende iş logikasyny ýerine ýetirmezden ozal ýükläň.
  • Retralar bilen integrasiýa: backoff + jitter, retry-budget, hormat 'Retry-After'.
  • Write, 'Idempotency-Key' we wakalar üçin outbox.
  • Metrikler: timeout/slow-call/breaker/queue time/bäsdeşlik ýagdaýy.
  • Bulam-bujarlyk synaglary: gijikdirmeler/ýitgiler/şowsuzlyklar, zonalaryň zaýalanmagy.
  • Müşderiler üçin resminamalar: taýmingleriň mysallary, jogap kodlary, gaýtalanmalar boýunça maslahatlar.

14) TL; DR

Her haýyşa berk möhlet beriň, ony tapgyrlara bölüň we zynjyryň aşagyna ýaýradyň. Şowsuzlyklary circuit breaker + bulkheads + adaptive concurrency + load shedding arkaly dolandyryň. Gaýtalanmalar - diňe möhletiň çäginde, jitter we býudjet bilen; write - diňe idempotent. Timeout/slow-call, breaker we 'queue _ time' ölçäň, yzygiderli bulam-bujarlyk synagyny geçiriň.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.