Ignorarea latentei medii te face să crezi că totul merge bine, în timp ce utilizatorii tăi se confruntă cu timpi de așteptare insuportabili. O medie maschează cozile lungi de răspunsuri cauzate de GC, lock-uri sau I/O lent, ducând la o experiență utilizator (UX) proastă și la pierderea încrederii în sistem. Definirea obiectivelor pe percentili (p50, p95, p99) îți oferă o imagine realistă asupra experienței reale a utilizatorilor, nu doar a mediilor statistice.
Cum o aplici
- Alege metricile relevante: Latența la finalul cererii (end-to-end) este crucială pentru UX, iar latența internă (ex: timpul de execuție al unei funcții) pentru debugging.
- Stabilește SLAs/SLOs clare: Definește ținte specifice, ex:
p95 < 200ms. Evită să folosești doar media. - Instrumentează aplicația: Folosește librării care suportă agregarea statistică (histograme, percentili) direct în runtime sau exportă date către un sistem de monitoring.
- Monitorizează continuu: Configurează alerte pentru depășirea pragurilor de p95/p99, nu doar pentru erori 5xx.
Exemplu
În loc să calculezi doar media, utilizează instrumente care generează histograme.
Varianta greșită (doar media):
# Aici un singur request lent de 5 secunde distorsionează media
avg_latency = sum(latencies) / len(latencies)
Varianta corectă (percentili): Utilizând Prometheus cu client library în Python/Go:
// Definim un histogram pentru latență
requestDuration := prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "http_request_duration_seconds",
Help: "Duration of HTTP requests.",
Buckets: prometheus.ExponentialBuckets(0.01, 2, 10), // 10ms -> ~5s
},
[]string{"method", "endpoint"},
)
În interogări SQL/PromQL:
-- Corect: verificăm p99
histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))
Cum verifici
- Dashboards: Verifică graficele de percentili în Grafana sau Datadog. Asigură-te că linia p99 nu este aproape de media.
- Load Testing: Rulează teste de încărcare (ex: k6, JMeter) și compară rezultatele cu SLOs definite.
- Loguri de producție: Analizează logurile de tracing (OpenTelemetry) pentru a identifica request-urile care cad în coada p99.
Greșeli frecvente
- Folosirea exclusivă a mediei: Maschează problemele de scalabilitate și "noisy neighbors".
- Ignorarea p99: Un p95 bun poate asculta un p99 catastrofic care afectează o mică fracțiune critică de utilizatori sau tranzacții.
- Buckets incorecte în histograme: Dacă bucket-urile sunt prea largi sau nu acoperă domeniul real, calculul percentililor va fi imprecis.
Resurse gratuite
Alte subiecte din „Măsurare și profilare”
- Monitorizează aplicația cu un APM (Datadog, New Relic, Elastic APM)
- Instrumentează serviciile cu distributed tracing (OpenTelemetry)
- Profilează CPU-ul și memoria înainte de a optimiza
- Analizează hot path-urile cu flame graphs
- Activează continuous profiling în producție (Pyroscope, Parca)
- Scrie benchmark-uri pentru codul critic și rulează-le în CI
- Măsoară impactul fiecărei optimizări, nu presupune