WinUpGo
Որոնում
CASWINO
SKYSLOTS
BRAMA
TETHERPAY
777 FREE SPINS + 300%
Cryptocurrency խաղատուն Կրիպտո կազինո Torrent Gear-ը ձեր համընդհանուր տորենթ որոնումն է։ Torrent Gear

Backend արձագանքի օպտիմիզացումը 'հերթեր, async, backpressure

1) Ինչո՞ ւ նպատակներ և SLO-ներ

Նպատակը կայուն արագ արձագանք է նույնիսկ պայթյունների ժամանակ։ Բիզնեսը արտահայտում է դա SLO։

API (CRUD/windows): p95-250-400 ms, error rate <1%։

Պլատոգ/սեթլմենտ (asinhrono): ներքին SLA-ն ապացուցելու համար 242-5 րոպե, իսկ հաճախորդը 'ակնթարթային ստանդարտ/Accepted + կարգավիճակը/webhuk։

WS/real-time: RTT p95 ≤ 120 мс, disconnect ≤ 0. 5%.

Բանալին 'տեղադրել «դանդաղ» քայլերը (պրովայդերներ, BD, արտաքին API) հերթից և բեռի գրագետ սահմանափակում։


2) Ռուսական նկարը 'որտե՞ ղ է վերցնում լատենտությունը

Նեղ տեղեր ՝ BD (փամփուշտներ/ինդեքսներ), արտաքին պրովայդերներ (PMS/խաղային), որոնք արգելափակում են I/O, GC/stop աշխարհը, JSON-ի շարքը, «ծանր» միավորումը։

Ախտանիշները 'p99 աճը, հերթը միացված է BD-ին, գետերի աճը, թայմ-աուտները շղթայով (retry storm)։

Անտոն 'ասինխրոն փոխակրիչներ + backpressure + tim-uta/retrai + idempotenty։


3) Asinhrone patters: SEDA և CQRS

SEDA (staged event-driven architecture) 'վերամշակման վերլուծություն փուլում (ingress validation)։ Յուրաքանչյուրն ունի իր հերթը և զուգահեռականության սահմանները։

CQRS 'բաժանեք ընթերցանությունները և գրառումները։ Ձայնագրությունը/հիմքը, կարդալը 'պրոյեկցիաներից/քեշից։

Nobox-ը 'իրադարձությունը հրատարակվում է ատոմային ձայնագրությամբ (խուսափում ենք «կորցրած» հաղորդագրություններից)։

Saga 'երկար բիզնես գործընթացներ, որոնք փոխհատուցում են գործարքները գլոբալ փոխարեն։


4) Հերթեր և հոսանքներ 'ընտրություն և թյունինգ

RabbitMQ/NATS JetStream-ը առաջադրանքների թիմերն են (work queues), Kafka-ը 'իրադարձություններ/սթրիմներ, որոնք ունեն։

Այն փոփոխությունները, որոնք ազդում են արձագանքի վրա

Winfetch/max in-flight: Սահմանափակեք միաժամանակ մշակված հաղորդագրությունների քանակը գողերի վրա (օրինակ, 16-64), որպեսզի չմոռանաք BD/արտաքին API-ը։

Ակեր/կրկնություն '«ack» գաղափարական ձայնագրությունից հետո։ կրկնություններ էքսպոնենցիալ ուշացումով և ջիթերով։

DLQ/parking lot: անթերի գետեր չկան, N-ից հետո փորձերը գնում են Dead Letter Queue-ում։

Կուսակցությունը (Kafka) 'բանալին ըստ էության (userID/txnId) կարգաբերելու համար։ զուգահեռ է կուսակցությունների քանակով։


5) Հակադարձ ճնշումը (backpressure) - ինչպես խեղդվել

Գաղափարը 'ընդունել միայն այնքան, որքան կարող եք մշակել SLO-ի լատենտության սահմաններում։

Տեխնիկան

Admission 24l: Սահմանափակեք մրցակցությունը (semaphore/worker-pool) յուրաքանչյուր արտաքին կախվածության համար 'BD, PSA, խաղի պրովայդեր։

Շեյփինգ 2019: token-bucket/leaky-bucket մուտքի և կրիտիկական երթուղիների վրա։

Գծերը վերին սահմանից 'լրացնելով պոչը (429/503 + Retry-After) կամ թարգմանենք asap-batch։

Adaptive concurrency (AIMD) 'ավելացրեք զուգահեռականությունը հաջողության ժամանակ, նվազեցրեք թայմ-աուտներում։

Circuit Breaker: «closed www.half-open» սխալ/time արտաքին API-ի։ բաց - դեգրադացիա (քաշ/71)։

Կեղծ (Go-նման)

go sem: = make (chan struct +, 64 )//մրցակցության սահմանափակում BD/PSA/PSA

func handle(req) {
select {
case sem <- struct{}{}:
defer func(){ <-sem }()
ctx, cancel:= context. WithTimeout(req. ctx, 300time. Millisecond)
defer cancel()
res, err:= db. Do(ctx, req)
if err == context. DeadlineExceeded { metrics. Timeouts. Inc(); return TooSlow() }
return Ok(res)
default:
metrics. Backpressure. Inc()
return TooBusy(429, "Retry-After: 0. 2")
}
}

6) Taim-uta, retrai և jitter: «գոյատևման երեք կետեր»

Tim-utes-ը SLO-ից ավելի կարճ է, եթե SLO 400 ms, tim-aut դեպի BD/պրովայդեր 250-300 ms; ընդհանուր Time-aut հարցումը <400-600 ms.

Retrai սահմանափակ և խելացի '1-2 փորձեր max, միայն անվտանգ վիրահատությունների համար (idempotent), էքսպոնենտով և ջիթերով։

Կոալեսինգ 'Համախմբեք կրկնությունները մեկ ստեղնաշարի համար։

Կեղծ (էքսպոնենտ + ջիտթեր)

python for attempt in range(0, 2):
try:
return call(dep, timeout=0. 3)
except Timeout:
backoff = (0. 05 (2attempt)) + random. uniform(0, 0. 05)
sleep(backoff)
raise UpstreamUnavailable

7) Idempotenty և deduplication

Idempotency-Key-ը HTTP-ում (դեպոզիտներ, վճարումներ), «operation _ id» -ում (յուրահատուկ ինդեքս)։
  • Inbox/Disbox: Webhuks-ը միշտ անփոփոխ inbox աղյուսակի միջոցով է 'dedu.ru-ով' event _ id; ելքերը գործարքի բանկային բլոկներից են։
  • Exactly-once-ը «իմաստալից» է, մենք թույլ ենք տալիս կրկնվող առաքում/կատարումը, բայց ազդեցությունը մեկ է։

8) Արագ API-ը դանդաղ վիրահատությունների համար

Սինխրոն արձագանքը ՝ 201/108 + URL կարգավիճակը ("/status/+ id +), ETA և ռետրայի հուշումներ։

Webhuki/Server-Sent Events/WS-ը պատրաստ է։
  • Հաճախորդների կարգապահությունը '«Retry-After», idempotenty, հարցման սահմանափակում։

Պատասխանը հետևյալն է

json
HTTP/1. 1 202 Accepted
Location: /v1/withdrawals/req_9f2/status
Retry-After: 2
{
"request_id": "req_9f2",  "state": "processing",  "next_check_sec": 2
}

9) Նվազեցնենք աշխատանքը տաք ճանապարհով

Վերցրեք ծանր բաները ֆոնի վրա 'փոխակերպումներ, ագրեգացիաներ, ծանուցումներ, ձայնագրություն CPH-ում։
  • Քեշը և պրոյեկտները 'հաճախ կարդացածը' cache-aside, կարճ TTL և իրադարձական հաշմանդամություն ունեցող։
  • Batch-patters 'խմբավորել արտաքին մարտահրավերները (օրինակ, պրովայդերի սահմանների հարցումը մեկ անգամ N-ում)։
  • Սերիզացիա 'արագ ֆորումներ և (wwww.obuf/www.gpack) սերվիզային կապերի համար։ JSON-ը միայն edge-ում է։

10) BD վերահսկողության տակ

Պուլները նշում են. Վերին սահմանները (հիմնվելով միջուկներից/IO), պուլուսի գծերը ներառված են։
  • Ինդեքսները և պլանը ՝ p95 medain + պլանների ռեգրեսիա։
  • Հարցումների թայմ-աուտները 'կարճ, «statium _ timeout» (Postgres)։
  • Hot rows/wwww.ks: Շարդինգը բանալին, լավատեսական արգելափակումները (հավասարակշռության տարբերակը), saga-ը «մոնոլիտ» գործարքի փոխարեն։

11) WebSocket/real-time

Տեղադրման սահմանափակիչը 'batched broadcript, max wings/sec per connect։
  • Ներքին backpressure, առաջացող հաղորդագրությունների հերթը գլխարկով։ հալման ժամանակ 'drop low-priority։
  • Sticky-routing-ը և PDB-ը թողարկումների ժամանակ, որպեսզի չվնասեն reconnational-փոթորիկը։

12) Դիտողություններ, որպեսզի չվնասենք

Մետրիկները (RED/USE + backpressure)

«request _ rate», «error _ ratio», «latency _ p95/p99» երթուղիներով։

`queue_depth`, `lag_seconds`, `consumer_inflight`, `retries_total`, `dlq_rate`.

`backpressure_drops`, `admission_rejects`, `circuit_open`.

Для БД: `connections_in_use/max`, `locks`, `slow_queries`.

Թրեյզներ ՝ «queue no worker db/prone» երգերը '«operation _ id», «partrone», «retry»։
  • Լոգներ ՝ կառուցվածքային, «trace _ id», առանց PII; առանձնահատուկ իրադարձություններ «բաց/close circuit»։

13) Փորձարկումներ բեռի տակ

Բաց-մոդելը (arrivals/sec) աճելու համար։ Closed-մոդելը (VUs) նստաշրջանների համար։
  • Պրոֆիլներ ՝ 60-120 s կարճ burst և soak 1-4 ռուբլիա
  • Մերժումների ներարկումը 'դանդաղեցրեք արտաքին API-ը + 200-500 մզ, նայեք r99/retray/հերթին։
  • Կանաչ գոտու չափանիշները 'առանց «queue _ lag» աճի, կայուն p95, «dlq _ rate 240»։

14) Անվտանգությունն ու հուսալիությունը

TFC/mTSA-ի հերթերը, հաղորդագրությունների ստորագրությունը, սխեմայի վերահսկումը (Avro/Medobuf + Schema Registry)։

Idempotent corer (Kafka), exactly-once tx այնտեղ, որտեղ արդարացված է։
  • Հաոս ռեժիմը 'պարբերաբար «մեծացրեք» կախվածությունը և նայեք քայքայմանը (circuit, fallback)։

15) Խմբակցությունների «կտորների» օրինակները

Nginx/Envoy մուտքի շեյպինգը

nginx limit_req_zone $binary_remote_addr zone=api:10m rate=20r/s;
server {
location /api/ {
limit_req zone=api burst=40 nodelay;
proxy_read_timeout 0. 6s; # ավելի կարճ է, քան SLO proxy _ connational _ timeout 0-ը։ 2s;
}
}
RabbitMQ (prefetch):

basic. qos (wwww.fetch _ count = 32) # CPU/IO հավասարակշռություն

Kafka consumer (Java-հատված)

java props. put(ConsumerConfig. MAX_POLL_RECORDS_CONFIG, 200);
props. put(ConsumerConfig. FETCH_MAX_BYTES_CONFIG, 5_000_000);
props. put(ConsumerConfig. MAX_POLL_INTERVAL_MS_CONFIG, 60_000);

16) Chek-Show-( 2019-ready)

  • Քննադատական ճանապարհները բաժանված են սինխրոն արձագանքի և ասինխրոն վերամշակման (SEDA)։
  • Admission corl և մրցակցության սահմանները արտաքին կախվածության վրա։
  • Թայմ-աուտները SLO-ից կարճ են; trai 242, էքսպոնենտով և ջիտտերով; կոալեսինգը։
  • Circuit breaker + դեգրադացիան (cash/2019), half-open քաղաքականությունը։
  • Հերթեր/strims: wwww.fetch/in-flight, DLQ, բեկորների կուսակցություն։
  • Idempotention (operation _ id/Idempotency-Key), Disbox/Inbox, dedeplication։
  • Քաշ 'cache-aside, կարճ TTL + իրադարձական հաշմանդամություն։
  • BD: փամփուշտների, ստատիկ _ timeout, ինդեքսներ, հակատիպային ռազմավարություն։
  • WS: հաղորդագրությունների սահմանափակումներ, բատչինգ, sticky-routing, PDB։
  • Դիտարկումը 'backpressure/queues/retries, end-to-end, dashbords։
  • Բեռի և ձախողված թեստերը (բաց + closed, burst + soak), կանաչ գոտու չափանիշները։

Ռեզյումե

Արագ backend-ը ոչ թե «մեկ այլ քեշ» է, այլ վերահսկվող հոսքը ՝ սահմանափակված, ծանր 'ֆոնի վրա, յուրաքանչյուր քայլ' հերթերով և սահմաններով, կտրվածքով հազվագյուտ և խելացի, այլ շղթաները պաշտպանված են circuit breaker և impotenty։ Ավելացրեք թայմ-աուտների կարգապահությունը, դիտարկումը և սթրեսային փորձարկումները, և ձեր p95/p99-ը կմնան կանաչ նույնիսկ բուրգի և արտաքին պրովայդերների պատվաստումների տակ։

× Որոնում խաղերի մեջ
Մուտքագրեք առնվազն 3 նիշ՝ որոնումը սկսելու համար։