- Home »

Folosiți wrk2, ab și k6 pentru testarea încărcării web în producție
Cuprins
- Despre testarea încărcării web
- Scenariu real: o zi neagră în producție
- Problema și importanța testingului de încărcare
- Cum funcționează wrk2, ab și k6?
- Cazuri de utilizare și beneficii
- Setup rapid: Ghid pas cu pas
- Glosar pe înțelesul tuturor
- Exemple și cazuri practice
- Tablou comic de comparație
- Greșeli de începător și mituri
- Decision Tree: Folosește acest tool?
- Statistici și fapte interesante
- Scripting și automatizare
- Poveste de admin
- Concluzii & recomandări
Despre testarea încărcării web
Salutare, cititorule pasionat de servere și optimizare! Dacă ai ajuns aici, sigur te-ai întrebat măcar o dată: „Oare serverul meu ține la tăvăleală dacă dau drumul la campania aia de marketing?” Sau poate ai deja niște bănuieli că ceva nu merge brici sub trafic, dar nu știi sigur cum să verifici. Azi discutăm despre trei unelte legendare din arsenalul de testare a încărcării web: wrk2, ab (Apache Bench) și k6. O să vezi cum să le folosești, ce pot fiecare și cum să le pui la treabă rapid, ca să dormi liniștit noaptea (sau măcar să știi la ce să te aștepți).
Scenariu real: o zi neagră în producție
Imaginează-ți: ai investit zile și nopți în site-ul tău. Totul merge șnur pe localhost și chiar și pe staging. Însă, când lansezi în producție și bagi primul spike de trafic (poate ai dat un newsletter sau ai prins o mențiune virală), site-ul cade. Clienți furioși, telefoane, panică. Loguri peste loguri, dar nu înțelegi de ce s-a întâmplat asta. Sună familiar? Adevărul e că orice devops, programator sau admin a trecut măcar o dată printr-o astfel de zi neagră.
Problema și importanța testingului de încărcare
Testarea încărcării (load testing) nu e doar pentru băieții mari cu zeci de mii de useri pe secundă. E pentru oricine vrea să știe: cât poate duce serverul meu, când crapă și de ce? Fără testare, totul e la noroc și „merge și-așa”. Dar dacă vrei să previi momentele neplăcute și să optimizezi costurile (de ce să plătești pentru un server dedicat dacă un VPS bun e suficient?), trebuie să știi să-ți forjezi serverul ca la carte.
Cum funcționează wrk2, ab și k6?
Hai să le luăm pe rând, pe scurt:
- wrk2: Fratele mai deștept al wrk. Poate genera trafic constant (constant throughput), nu doar bursty. Perfect pentru simulări realiste, când vrei să vezi cum se comportă sistemul sub presiune constantă.
- ab (Apache Bench): Bătrânul din familie. Simplu, direct, rapid. Bun pentru quick&dirty tests, mai ales când vrei să vezi repede niște cifre.
- k6: Tânărul cool, cu scripturi JavaScript, rapoarte detaliate și integrare cu CI/CD. Ideal pentru testări automate și complexe.
Toate trimit cereri HTTP către serverul tău și măsoară cât de repede răspunde, câte cereri duce pe secundă, unde apar erori, etc. Algoritmii diferă (wrk2 e multithreaded, ab e single-threaded, k6 e scriptabil), dar scopul e același: să vezi cât de „fit” e serverul tău.
Cazuri de utilizare și beneficii
- Testare înainte de lansare: Simulezi un spike de trafic ca să vezi dacă totul rezistă.
- Optimizare costuri: Poți decide dacă un VPS e suficient sau ai nevoie de server dedicat.
- Benchmarking între configurații: Vrei să vezi dacă nginx merge mai bine decât Apache? Sau dacă Docker adaugă overhead? Testezi și compari.
- Detectare bottleneck-uri: Identifici unde crapă: la CPU, RAM, rețea, DB, etc.
- Testare CI/CD: Integrezi în pipeline-ul de deploy, să știi că n-ai băgat un bug care încetinește totul.
- Simulare DDoS (cu grijă!): Vrei să vezi cum reacționează firewall-ul sau CDN-ul sub atac? Poți simula, dar cu limită și atenție!
Setup rapid: Ghid pas cu pas
1. Instalare wrk2, ab și k6
- wrk2:
# Ubuntu/Debian sudo apt-get update sudo apt-get install git build-essential libssl-dev -y git clone https://github.com/giltene/wrk2.git cd wrk2 && make sudo cp wrk /usr/local/bin/
- ab:
# Ubuntu/Debian sudo apt-get update sudo apt-get install apache2-utils -y
- k6:
# Ubuntu/Debian sudo apt-get update sudo apt-get install gnupg ca-certificates curl https://dl.k6.io/key.gpg | sudo apt-key add - echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list sudo apt-get update sudo apt-get install k6 -y
2. Testare rapidă
- wrk2:
wrk -t4 -c100 -d30s -R2000 http://localhost/ # -t4: 4 threads # -c100: 100 conexiuni # -d30s: 30 secunde # -R2000: 2000 requesturi/secundă
- ab:
ab -n 10000 -c 100 http://localhost/ # -n: 10.000 requesturi # -c: 100 conexiuni concurente
- k6:
# Creează un fișier test.js: import http from 'k6/http'; export default function () { http.get('http://localhost/'); } # Rulează: k6 run --vus 100 --duration 30s test.js # --vus: utilizatori virtuali # --duration: durata testului
3. Interpretarea rezultatelor
- Te uiți la: RPS (Requests Per Second), latency, erori.
- Dacă vezi timeout-uri, erori 500 sau latență mare, ai găsit deja un bottleneck!
Glosar pe înțelesul tuturor
- RPS (Requests Per Second): Câte cereri poate răspunde serverul într-o secundă. Ca la fast-food: câți clienți servește casierul pe minut.
- Latency: Timpul de răspuns. Cât aștepți la coadă până e gata shaorma.
- Concurrency: Câți clienți stau la coadă în același timp.
- Throughput: Cât trafic „curge” efectiv, nu doar câte cereri.
- Spike: Creștere bruscă de trafic. Ca la Black Friday.
- CI/CD: Automatizarea deploy-ului, să nu faci totul manual ca în 2004.
Exemple și cazuri practice
Exemplu pozitiv
Un magazin online face load testing cu wrk2 înainte de lansarea campaniei de reduceri. Descoperă că la 1500 RPS serverul începe să dea 503. Optimizează cache-ul, upgradează la un VPS mai bun, și la testul final duce 3500 RPS fără probleme. Lansarea merge ca unsă.
Exemplu negativ
Un startup ignoră testarea. În prima zi virală, site-ul cade la 200 useri concurenți. Clienții pleacă, review-urile negative curg. Abia după incident, instalează ab și descoperă că serverul era slab configurat.
Tablou comic de comparație
Imaginează-ți trei personaje la o petrecere:
- ab: Bătrânul DJ cu casetofon. Pune muzică rapid, dar fără finețuri. „Hai să testăm repede, fără prea multe figuri!”
- wrk2: Tipul cu mixer profi, știe să țină beat-ul constant. „Vrei să vezi cum rezistă pista la dansatori non-stop? Eu sunt omul!”
- k6: Hipsterul cu laptop și playlist personalizat. Îți face show pe gustul tău, automatizează, analizează, și transmite live pe internet.
Toți dau petrecerea, dar fiecare are stilul său. Alegi DJ-ul în funcție de vibe-ul dorit!
Greșeli de începător și mituri
- „Dacă merge local, merge și în producție”: Fals! Local ai alte resurse, altă rețea, alt context.
- „Doar site-urile mari au nevoie de load testing”: Orice site poate crăpa la spike neprevăzut.
- „ab e depășit”: E simplu, dar încă util pentru testări rapide sau debugging.
- „Testez cu un singur endpoint și gata”: Realitatea e mai complexă; folosește scripturi cu mai multe rute, autentificare, sesiuni, etc.
- „Testez de pe același server”: Nu! Folosește altă mașină, altă rețea, ca să nu măsori doar cât duce localhost.
Decision Tree: Folosește acest tool?
Ai nevoie de test rapid, fără scripturi? ⬇️ Da ➡️ Folosește ab ⬇️ Nu ➡️ Vrei trafic constant, simulare realistă? ⬇️ Da ➡️ Folosește wrk2 ⬇️ Nu ➡️ Vrei integrare CI/CD, scripturi, rapoarte detaliate? ⬇️ Da ➡️ Folosește k6
Dacă niciunul nu ți se potrivește, poți încerca și alte tool-uri open-source ca JMeter sau Locust.
Statistici și fapte interesante
- Majoritatea downtime-urilor la lansări de site-uri se datorează lipsei testării de încărcare!
- wrk2 poate genera sute de mii de requesturi/secundă pe un server beefy.
- k6 e folosit de companii ca Microsoft, Grafana, și RedHat în pipeline-urile lor de CI/CD.
- ab există de peste 20 de ani și încă e prezent în majoritatea distribuțiilor Linux.
Scripting și automatizare
Un avantaj uriaș la k6 este că poți scrie scripturi complexe, inclusiv cu autentificare, sesiuni și date dinamice. Exemplu de script:
import http from 'k6/http'; import { sleep } from 'k6'; export default function () { let res = http.post('http://localhost/login', { user: "test", pass: "1234" }); http.get('http://localhost/dashboard'); sleep(1); }
Poți integra aceste scripturi în pipeline-ul de CI/CD și să primești notificări când performanța scade sub un anumit prag.
Poveste de admin
A fost odată un sysadmin pe nume Vlad. Îi plăcea să se joace cu servere, dar ura să fie sunat la 2 noaptea. Înainte de o lansare mare, a decis să folosească wrk2 pentru prima dată. A descoperit că la 1200 RPS, aplicația începea să dea erori 502. După o sesiune de tuning la nginx și un upgrade de la shared la VPS, Vlad a reușit să ridice pragul la 4000 RPS. Și-a băut cafeaua liniștit, iar la lansare… liniște: n-a sunat nimeni, totul a mers ca uns!
Concluzii & recomandări
- Nu lăsa testarea încărcării pe ultima sută de metri! Folosește ab pentru teste rapide, wrk2 pentru simulări realiste și k6 pentru automatizare și scenarii complexe.
- Testează de pe o altă mașină, dacă poți, nu de pe localhost.
- Optimizează-ți serverul în funcție de rezultate. Poate un VPS bun e suficient, dar la trafic serios treci pe server dedicat.
- Integrează testele de încărcare în pipeline-ul de CI/CD, ca să nu ai surprize la upgrade sau deploy.
- Nu te speria de cifre mari sau mici. Important e să știi limita, nu să ghicești.
Fii geek, fii pregătit și nu lăsa serverul să-ți joace feste la ora de vârf! Spor la testat și optimizat!