API de analiză și măsurători de performanță
1) De ce aveți nevoie de ea
API - sistemul circulator al platformei. "Fără măsurători stricte, nu putem:- să dovedească punerea în aplicare a SLO și SLA
- gestionați lățimea de bandă și interogarea economică,
- localizați rapid degradarea (p99-cozi, rafale 5xx),
- prioritizeaza optimizarile impactului afacerilor.
Obiectiv: un singur model de observabilitate în care fiecare cerere este urmărită de la perimetru la DB cu identificatori comuni și SLI-uri consecvente.
2) Taxonomia metricii
Tehnic: RPS, latență (p50/p95/p99), rată de eroare (4xx/5xx), saturație (CPU, memorie, fișier-desc), timp de coadă.
Produs: operațiuni de succes/min, conversie în trepte (200/total), cotă limitată de rată (429), retribuții, segmente de utilizatori.
Cost: cost/cerere (CPU-ms + ieșire + cereri de baze de date), costul caracteristicii/endpoint, $/chiriaș, $/1k apeluri.
3) „Semnale de aur”: ROȘU și UTILIZARE
RED (pentru API):- Tarif - cereri/sec (după punctul final/chiriaș/plan).
- Erori - 4xx/5xx/429 fracții și absolute.
- Durata - p50/p95/p99 end-to-end și pe etape (ingress → app → DB → terță parte).
- Utilizare - sarcină CPU/IO/canal.
- Saturație - cozi (run-coadă, restanțe, așteptare DB).
- Erori - erori de driver/timeout.
4) Definiții și formule de bază
Disponibilitate SLI: '1 − (5xx + gateway_timeout )/ all_requests'.
SLI de succes: '2xx/( toate − 429_shadow)' (excluzând încuietorile din umbră).
Apdex: '(|T≤T| + 0. 5·|T≤4T| )/toate ', în cazul în care „T” este pragul țintă „bun”.
Amplificarea cozii: 'p99 _ total − max (p99_stage_i)' - contribuția cozilor/compoziției.
Bugetul de eroare (luna) la 99. 9%: "buget = 0. 1% perioada _ timpul '.
Coșuri de percentilă recomandate de histograme de latență: '[5ms, 10ms, 25ms, 50ms, 100ms, 250ms, 500ms, 1s, 2. 5s, 5s] '.
5) SLI/SLO și alertă prin burn-rate
Exemplu SLO (API public):- Disponibilitate: ≥ 99. 9 %/30 zile.
- p95 latenta 'GET/portofel/echilibru' <150 ms; „POŞTĂ/PLĂŢI” <400 ms.
- Erori '5xx' <0. 2%. „429” (solid) <1% din traficul total.
- 2% din buget timp de 1 oră sau 5% timp de 6 ore → pagină inginerului.
- 10% pe zi → prioritizarea RCA.
6) Set de valori (ceea ce trebuie colectat este obligatoriu)
Pe perimetru (gateway/WAF):- 'http _ requires _ total {route, method, status, chiriaș, plan}'
- 'http _ request _ duration _ seconds _ bucket {route,...}' (histogramă)
- 'retries _ total {reason}', 'rate _ limited _ total {key, policy}'
- Dimensiuni corp: 'request _ bytes', 'response _ bytes'
- 'db _ client _ requires _ total {op, table}', 'db _ latency _ seconds _ bucket {op}'
- 'cache _ ops _ total {op}', apeluri externe hit-rate cache: 'outbound _ calls _ total {provider, op}', latență/erori/termene de coadă/piscine: lungimi/întârzieri, UTILIZAREA resurselor active Lucrătorii: CPU, RSS, FD, GC pause
Etichete business: 'tenant _ id',' region ',' kyc _ level ',' plan ',' feature _ flag '.
7) Urme și corelații (OpenTelemetry)
W3C Trace-Context („traceparent”, „tracestate”) pe toate hameiul.
Span-s pe etape: intrare → authZ → app handler → DB/Redis → PSP/extern.
Atribute/etichete: "http. route ',' enduser. id', "chiriaş. id', "idempotenta. cheia „,” risc. scor '.
Exemplare: Puncte asociate privind graficele de latență/eroare cu id-ul de urme specific.
- cap-based 1-10% pentru trasee „normale”,
- pe bază de coadă pentru cozi (luați încet/eronat),
- adaptive pentru vârfuri și incidente.
- Bagaje: transportați „chiriaș ”/„ risc” pentru tăieri fără marcarea fiecărui eveniment.
8) Jurnale: structură și confidențialitate
JSON structurat; câmpurile necesare sunt 'ts',' trace _ id', 'span _ id',' route ',' status ',' latency _ ms', 'tenant', 'user _ id _ hash'.
Politica PII: masca PAN/PII; refuza secretele/jetoanele.
Eșantionarea jurnalului: ridicată pentru cererile 4xx/5xx/429 și „lungi”.
9) Harta tabloului de bord (set minim)
1. Sumar: RPS, disponibilitate, rată de eroare, latenţă p95/p99, 429 share, buget pentru rata de inscripţionare.
2. Per-Route: Top Endoints by RPS/Error/Tail; compararea versiunilor (canar).
3. Per-Chiriaș/Plan: Încărcare/Cost/Error Leaders.
4. Sănătate dependentă: DB, cache, PSP/extern - latență, erori, saturație.
5. Capacitate: CPU/RAM/FD, cozi, piscină de conectare, GC, limite de containere.
6. Securitate/Abuz: 401/403, 429/politicieni, felii geo/ASN, spikes retray.
10) Alerte (prag și tendință)
'error _ rate {route}'> 2% (5 minute) și RPS> N → pager.
'p99 _ latency {critical}'> pragul țintă (10 minute).
"burn _ rate 'by budget (vezi § 5).
DB 'timeouts'/' blocaje' sau creștere 'coadă _ timp'> X ms.
Furnizori externi: 'outbound _ 5xx _ rate {provider}'> 1% + dependent de SLO.
11) Planificarea și performanța capacitivă
Legea lui Little: 'L = λ· W' (lungimea medie a cozii = traficul × timpul mediu).
Ținta p95 este descompusă: 'intrare + aplicație + DB + coadă + externă'.
Bugetul de concurență: fixați numărul maxim de operațiuni de scriere simultană.
Metrica bugetară: „CPU ms per request”; păstrăm o marjă de 30-50% până la vârf.
Interacțiunea cu limita ratei: măsurarea proporției cererilor la „plafonul” contingentului și a impactului asupra latenței.
12) Încărcare și controale sintetice
Tipuri: sarcină de bază, explozii × 10, „pași”, platouri pe termen lung, stres/haos (uciderea nodurilor, întârzieri în rețea), sintetice în funcție de scenariile critice ale clienților.
Profilare: CPU/allocare/blocare-contention, N + 1 (SQL/HTTP), coduri lente.
Controlul regresiei: compararea erorilor p95/p99/înainte/după eliberare (canar).
13) Cost-Observabilitate
Cost metrics: 'cpu _ ms',' egress _ bytes ',' db _ calls', '$ per 1k requests'.
Alocarea la punctul final/chiriaș/caracteristică: etichete de facturare de la orchestrator + măsurători de încărcare → raport economic unitate API.
Algoritm de optimizare: selectați TOP-endpoints de către produsul „trafic × cost × (p95 − țintă)”.
14) Analiza per chiriaș și „justiție”
Toate valorile cheie sunt etichetate „chiriaș _ id/plan”.
Ponderea clienților „grei” în cozile p99; limite/cote individuale și bugete retrase.
Forfecare echitabilă: atunci când este supraîncărcat, reducem ponderea chiriașilor „cu profil înalt”.
15) Specificul iGaming/Finanțe
Secțiuni prin 'kyc _ level', 'risk _ tier', 'payment _ method'.
SLI pentru căile „money” („POST/depuneri”, „POST/retrageri”): p95 țintă mai mică, bugete separate de erori.
Măsurători Time-to-Wallet (TTW), cota de blocări automate antifraudă, conversia plăților.
Audit: jurnale imuabile pentru acțiuni financiare și decizii antifraudă.
16) Instrumentație: Practici de implementare
Indicatori de denumire (exemplu):- 'api _ http _ requests _ total' (counter)
- 'api _ http _ request _ duration _ seconds' (histogramă)
- 'api _ outbound _ requests _ total', 'api _ db _ query _ duration _ seconds'
- 'api _ rate _ limited _ total', 'api _ retry _ total {reason}'
Лейблы: 'route', 'method', 'status _ class',' tenant ',' region ',' version ',' canary ',' provider ',' db _ table '.
Cardinalitate: evitați valorile libere (user_id), utilizați „găleți „/hash.
Exemplare: conectați-vă la histogramele p95/p99 → făcând clic pe urmă.
17) Antipattern
Mediu în loc de percentile; nici o împărțire în clase de stare.
Inconsecvent „traseu ”/„ cale” (ID-urile dinamice sunt „cusute” în etichete).
Etichete cu cardinalitate ridicată (user_id brută, IP).
Nu există contabilitate separată a furnizorilor externi (PSP/3rd-party).
Alerte prin „zgomot” (o singură fereastră și un prag).
p99, cu excepția timpului de coadă (măști de degradare reală).
18) Lista de verificare Prod Readiness
- SLI/SLO și bugetul de eroare definit, de acord cu afacerea.
- Histograme de latență unică și clase de stare; p95/p99 pe tablouri de bord.
- Urme complete (OTel), corelație jurnal/metric/urmă.
- Alerte burn-rate (două ferestre), praguri p99 și rata de eroare.
- Per-chiriaș/per-plan secțiuni și rapoarte de costuri.
- Tablouri de bord: , Per-Route, Dependențe, Capacitate, Abuz.
- Scenarii de încărcare (izbucnire/platou/stres), profilare.
- Jitter Retrai Policies; contabilizarea efectului retroactivelor asupra SPR.
- Documentație SLA/SLO pentru parteneri și clienți publici.
- Mascare de retenție/jurnal, protecție PII.
19) TL; DR
Construiți observabilitatea în jurul SLI/SLO și bugetul de eroare, măsurați RED/USE, colectați histograme de latență cu p95/p99 și timpul de coadă, distribuiți un singur trace-id din perimetru în DB, utilizați coada/adaptive-sampling, țineți per chiriaș/reduceri de costuri și două ferestre burn-rate-alert. Capacitatea planului în conformitate cu legile de coadă și impactul asupra metricii de afaceri; antipatterns - mediu în loc de percentile, cardinalitate ridicată și dependențe externe nescontate.