Yuklamali test va stress
Yuklamali test va stress
1) Nima uchun bu zarur?
Maqsadlar:- Sig’imni tasdiqlash (tizim belgilangan SLOda qancha RPS/raqobat sessiyalariga bardosh beradi).
- Shisha ogʻizlarni (CPU/IO/DB/tarmoqlar/blokirovkalar/pullar) topish.
- CI/CD uchun ijro byudjetlari va «geytlar» ni moslash.
- Relizlar xavfini kamaytirish (regressiya p95/p99, cho’qqida xatolar ko’payishi).
- Sig’imni/qiymatni rejalashtirish (skeyl-aut va zaxiralar).
2) Perf-testlar turlari
Load (ish yuki): eng yuqori darajaga yaqin real trafik; SLO validatsiyasi.
Stress (stress): o’sish chegarasidan yuqoriga → buzilish paytida xatti-harakatlar, qayerda buziladi.
Spike (impuls): yukning tez sakrashi → elastiklik/avtoskeyl.
Soak/Endurance (davomli): soat/sutka → oqish, parchalanish, latency dreyfi.
Capacity/Scalability: scale-out paytida throughput/latency qanday o’zgaradi; Amdal/Gustafson qonuni.
Smoke perf: har bir relizda qisqa tutunli yugurish (spektakl-sanitari).
3) Trafikni hosil qilish modellari
Yopiq model (fixed VUs/concurrency):’N’foydalanuvchilar, har kim mijozda → navbat so’rovlar qiladi. Ortiqcha yukni yashirish xavfi.
Ochiq model (arrival rate): real hayotdagi kabi λ intensivligi (req/s) bo’lgan talabnomalar oqimi. Ommaviy API uchun yaxshiroq.
Littl qonuni:’L = λ × W’.
Pule/servis uchun: minimal parallellik ≈’λ × W’(zaxiraning 20-50% ni qo’shing).
Bu yerda’λ’- throughput,’W’- oʻrtacha xizmat koʻrsatish vaqti.
4) Yuklama profillari va ssenariylar
User journey mix: skriptlar ulushi (login, browse, deposit, checkout...).
Think-time: foydalanuvchining pauzalari (taqsimlash: eksponensial/lognormal).
Data profile: javoblar hajmi, payload, parametrlarning oʻzgaruvchanligi.
Korrelyatsiya: qadamlarni (cookie/tokenlar/ID) haqiqiy floudagidek bogʻlang.
Sovuq/issiq/issiq kesh: alohida progonlar.
Read vs Write: o’qish/yozuv balansi, retrajlar uchun idempotentlik.
Ko’p mintaqa: RTT, POP/ASN bo’yicha taqsimlash.
5) Test muhiti
Izolyatsiya: stend topologiya/moslamalar bo’yicha proyektga yaqin (lekin prod «urmaymiz»).
Ma’lumotlar: PII kamuflyajlash, hajmlar, indekslar mahsulotdagi kabi.
Yuk generatorlari: CPU/tarmoqqa tayanmaydi; taqsimlangan rannerlar, vaqtni sinxronlashtirish.
Kuzatish darajasi: metriklar/treyslar/loglar, perimetrda sintetika, CPU/heap profillarini eksport qilish.
6) Metrika va SLI
Throughput: sekundiga RPS/tranzaksiyalar.
Latency: p50/p95/p99, TTFB, server time vs network.
Errors: 5xx/4xx/domen xatolari ulushi.
Saturation: CPU, load avg, GC, diskli IOps/latentlik, network, pool wait.
Biznes-SLI: depozitning muvaffaqiyati ≤ 5s, buyurtmaning tasdiqlanishi ≤ 2s.
Chegarani SLO dan oling (masalan, "99. 95% ≤ 300 ms").
7) Tor joylarni qidirish (metodika)
1. Tizimni maqsadli yuklamaning 60-80 foiziga barqaror isiting.
2. Qadamlar bilan kattalashtiring (ramp) → p95/p99 va error-rate o’sadigan joyni belgilang.
- (DB/HTTP),
- WAIT/lokov (DB) o’sishi,
- GC pauzalari/heap,
- tarmoq retransmits/packet loss,
- disk latentligi/kesh xatolari.
- 4. Mahalliylashtiring: soʻrov yoʻli boʻyicha ikkilik qidiruv, profil moslamalari (CPU/alloc/lock-profile).
- 5. «Shishani» tuzating → sozlash → takrorlash.
8) Stress ostida xulq-atvor
Graceful degradation: limitlar, circuit-breakers, backpressure navbatlari, «qayta ishlashga qabul qilindi».
Retraylar: ko’pi bilan 1 ta, faqat idempotentlar; jitter; retray budjeti ≤ RPSning 10 foizi.
Fail-open/Fail-closed: tanqidiy boʻlmagan bogʻliqliklar uchun, fail-open (kesh/boʻshliqlar) ga ruxsat bering.
Cascading failure: pullar/kvotalar izolyatsiyasi (bulkhead), tezkor taymautlar, funksiyalarning «silliq» uzilishi (feature flags).
9) Asboblar (vazifa uchun tanlash)
k6 (JavaScript, ochiq/ochiq-model, tezkor, CI uchun qulay).
JMeter (ekotizimga boy, GUI/CLI, plaginlar, ammo og’irroq).
Gatling (Scala DSL, yuqori unumdorlik).
Locust (Python, skriptlarning moslashuvchanligi).
Vegeta/hey/wrk (mikro-benchi va tezkor tekshirish).
Qoida: bitta «asosiy» vosita + PRdagi smoke-perf uchun engil CLI.
10) Misollar (snippetlar)
10. 1 k6 (arrival rate bilan ochiq model)
js import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
scenarios: {
open_model: {
executor: 'ramping-arrival-rate',
startRate: 200, timeUnit: '1s',
preAllocatedVUs: 200, maxVUs: 2000,
stages: [
{ target: 500, duration: '5m' }, // до 500 rps
{ target: 800, duration: '5m' }, // стресс
{ target: 0, duration: '1m' }
]
}
},
thresholds: {
http_req_duration: ['p(95)<300', 'p(99)<800'],
http_req_failed: ['rate<0.005'],
},
};
export default function () {
const res = http.get(`${__ENV.BASE_URL}/api/catalog?limit=20`);
sleep(Math.random() 2); // think-time
}
10. 2 JMeter (profil gʻoyasi)
Thread Group + Stepping Thread или Concurrency Thread (open-like).
HTTP Request Defaults, Cookie Manager, CSV Data Set.
Backend Listener → InfluxDB/Grafana; Assertions vaqt/kod boʻyicha.
10. 3 Locust (Python)
python from locust import HttpUser, task, between class WebUser(HttpUser):
wait_time = between(0.2, 2.0)
@task(5)
def browse(self): self.client.get("/api/catalog?limit=20")
@task(1)
def buy(self): self.client.post("/api/checkout", json={"sku":"A1","qty":1})
11) Ma’lumotlar, korrelyatsiya, tayyorgarlik
Seed-ma’lumotlar: kataloglar, foydalanuvchilar, balanslar, tokenlar - nasldagi kabi.
PIIni niqoblash/anonimlashtirish; haqiqiy taqsimotlar ustidan sintetika ishlab chiqarish.
Korrelyatsiya: javoblardan ID/tokenlarni chiqarib oling (RegExp/JSONPath) va keyingi bosqichlarda foydalaning.
12) Haydash vaqtida kuzatish
Yo’nalishlar bo’yicha RED-dashbordlar (Rate, Errors, Duration).
Exemplars: metrikadan trassalarga oʻtish (trace_id).
Xato loglari: sampling + agregatsiya, dublikatlar/idempotentlik.
Tizimlar: CPU/GC/heap, disklar/tarmoq, pool wait.
DQ: top-so’rovlar, blokirovkalar, indeks-skanlar, bloat.
13) Avtomatlashtirish va spektakl-geytlar
CI: merge (masalan, k6 2-3 daqiqa) uchun qisqa pog’onalar.
Nightly/Weekly: uzoq soak/stress alohida muhitda; hisobotlar va trendlar.
Kanareya relizlari: SLO (error-rate, p95) ni reklama «geyti» sifatida tahlil qilish.
Regressiyalar: baseline vs joriy bild; yomonlashganda alertlar> X%.
14) Sig’imni rejalashtirish va qiymati
Egri chiziqlar throughput → latency: knee point (tizza) ni aniqlang - undan keyin p99 keskin o’sadi.
Skayl-out: oʻlchash samaradorligini oʻlchang (delta RPS/delta tugunlari).
Qiymati: «$/soat uchun RPS», eng yuqori hodisalar uchun zaxira + DR-zaxira.
15) Anti-patternlar
Prodni nazoratsiz urish yoki prodga o’xshamaydigan «bo’sh» muhitda sinovdan o’tkazish.
Ortiqcha yukni yashiradigan VU bilan yopiq model.
Think-time/ma’lumotlarning yo’qligi → keshning haqiqiy bo’lmagan xitlari yoki aksincha - manbalarga bo’ron.
Foydalanuvchi flowlari oʻrniga bitta «/ping »skripti.
Kuzatishning yo’qligi: «Biz faqat RPS va o’rtacha kechikishni ko’ramiz».
Nazoratsiz retralar → o-DDoS.
Gipotezalar/o’zgarishlarni qayd etmasdan xamir va optimallashtirishlarni aralashtirish.
16) Chek-varaq (0-30 kun)
0-7 kun
SLI/SLO va maqsadli trafik profillarini (mix, think-time, maʼlumotlar) aniqlang.
Asbobni tanlang (k6/JMeter/Locust).
Stend va seed ma’lumotlarini tayyorlang, uchinchi tomon limitlari/kaptchalarini o’chirib qo’ying.
8-20 kun
Stsenariylarni yarating: open-model (arrival rate), sovuq/issiq/issiq kesh.
load → stress → spike dasturini ishga tushiring; knee point va tor joylarni oʻrnating.
CI (mikro-progon) ga spektakl-geytlarni kiriting.
21-30 kun
Soak-test 4-24 soat: oqish/dreyf GC, barqarorlashtirish.
Chegaralarni, sig’imlar rejasini, «RPS → p95/xatolar» rasmlarini hujjatlashtiring.
Runbook’cheklov/skayl’ni qanday oshirishni va’degradatsiya qilishni’tayyorlang.
17) Etuklik metrikasi
Traffikning 80% ≥ qoplaydigan real profillar (mix, think-time, maʼlumotlar) mavjud.
Barcha testlar uchun RED dashbordlari + trassasi ulangan.
P95/xato regressiyasida spektakllar relizlarni bloklaydi.
Sigʻim va knee point asosiy xizmatlar boʻyicha hujjatlashtirilgan.
Har oylik soak/stress-progonlar va dinamika bo’yicha hisobotlar.
«Spike» ga chidamliligi avtoskayl va cascade-fail yoʻqligi bilan tasdiqlangan.
18) Xulosa
Yuklama sinovi - bu bir martalik «o’lchash» emas, balki muntazam muhandislik amaliyotidir. Haqiqiy foydalanuvchilarni (open-model) modellashtiring, mijozning tajribasini (SLI/SLO) aks ettiradigan narsalarni o’lchang, CI/CD’da kuzatish va «geytalar» ni saqlang, stress/spike/soak-progonlarni o’tkazing va knee point-ni qayd qiling. Shunda eng yuqori darajadagi voqealar va «qora oqqushlar» boshqariladigan stsenariylarga, ishlab chiqarish esa platformaning oldindan aytib bo’ladigan va o’lchanadigan parametriga aylanadi.