Yuklama va stress-test
1) Atamalar va maqsadlar
Load test - SLO (masalan, p95 <200 ms, error rate <0) ga qarshi ish oralig’ida (target RPS/raqobatbardoshlik) tekshirish. 5%).
Stress test - chegaradan chiqish (CPU/DB/tarmoq to’yinganligiga qadar/undan ortiqcha), degradatsiya va tiklanish mexanikasini kuzatish.
Spike test - yuklamaning keskin portlashlari (daqiqa davomida N ×).
Soak/Endurance - oqish, GC drifti, parchalanish, navbat o’sishini qidirish uchun uzoq vaqt (soat/sutka).
Capacity test - plato o’tkazish qobiliyati (saturation point) va zaxiralarni hisoblash.
Maqsadlar: SLOni tasdiqlash, platoni tuzatish, tor joylarni tushunish, avto-masshtablash va limitlarni kalibrlash.
2) Trafik modeli: ochiq vs yopiq
Yopiq model (concurrency-driven): virtual foydalanuvchilarning belgilangan soni (VUs), har biri javobdan keyin think time qiladi.
Ochiq model (arrival-rate): javoblardan qat’i nazar, so’rovlarning belgilangan intensivligi (RPS).
Little’s Law: `L = λ W`
’L’ - bir vaqtning o’zida xizmat ko’rsatiladigan so’rovlarning o’rtacha soni,
’λ’ - intensivlik (RPS),
’W’ - o’rtacha javob vaqti.
Demak, "concurrency ≈ target_RPS p95_latency'.
3) Metrika: nimani o’lchaymiz
SLI kechikish: p50/p90/p95/p99 va p99 dumi. 9; «issiq» va «sovuq» yo’llar uchun alohida.
Xatolar:’5xx’,’4xx’(valid/nevalid), timeouts, aborted.
O’tkazish qobiliyati: barqaror RPS, throughput/bayt.
Resurslar: CPU, RAM/heap, GC pauzalari, diskli IOPS/lat, tarmoq bandwidth, ulanishlar soni/FD.
Navbatlar va bekorchi: chuqurlik, kutish vaqti, so’rovlar soni.
Kesh samaradorligi: hit/miss, isitish boʻronlari.
BD/kesh/navbatlar: p95 so’rovlar, blokirovka, mojarolar, pool utilization.
4) Stendlar va ma’lumotlar
Konfiguratsiya ekvivalentligi: dasturiy ta’minot versiyalari, limitlar (uLimit, conntrack), JVM/GC konfiguratsiyasi, pool’lar.
Topologiya: LBs, CDN, WAF, TLS, xuddi shu tarmoq «xoplari».
Ma’lumotlar: realistik taqsimotlar (obyektlarning o’lchamlari, «issiq «/» sovuq »kalitlar, hududiylik).
Sovuq/issiq/issiq start: alohida progonlar; «sovuq» keshlarni sinab ko’rish shart.
Orqa fon izolyatsiyasi: ahamiyatsiz joblar/kronomalarni o’chirish yoki ularning ta’sirini hisobga olish.
5) Ssenariylar (yuklama profillari)
1. Baseline: maqsadli RPSgacha bosqichma-bosqich tezlashtirish, ushlab turish 10-30 daqiqa.
2. Ramp & Hold: Maqsaddan yuqori X% gacha silliq o’sish, quyruqlarni ushlab turish → tahlil qilish.
3. Spike: bir zumda × 2- × 1-5 daqiqa davomida 5 ta sakrash, so’ngra qaytish.
4. Stress to Failure: rad etishgacha bo’lgan bosqichlarda; SLO bajarilmasligining birinchi nuqtasi va «sinish» nuqtasini qayd etamiz.
5. Soak: trafikning o’zgaruvchanligi (kun/tun) bilan 6-24 soat, yuzlar/driftni kuzatib boramiz.
6. Mixed: haqiqiy taqsimot bo’yicha endpint aralashmasi (Zipf/pareto), turli og’irliklar.
6) Bosqichma-bosqich jarayon
SLO va maqsadli trafikni aniqlash.
Yuklash modelini tanlash (ochiq/yopiq), arrival-rate yoki VUs.
Maʼlumotlar va «issiq «/» sovuq »rejimlarni tayyorlash.
Telemetriyani (treys/metrika/logi), test-ran bilan korelatsiyani moslash.
Isitish va haydash, artefaktlarni to’plash (CPU/heap, flame graphs, explain/slow-logs DB profillari).
Tor joylarni tahlil qilish, action items shakllantirish.
Fixlardan keyingi reprogon, bazlayn va capacity playbook yangilanmoqda.
7) Tor joylar va tipik fikslar
CPU-bound servis: profillash → issiq funksiyalar, allokatsiyalar, tarmoqlarni bartaraf etish; vektorizatsiya, kesh-friendly tuzilmasi.
Tarmoq/TLS: keep-alive, HTTP/2/3, connection pooling, to’g’ri taymautlar, chatlar soni kamayadi.
DQ: indekslar, batchinglar, tayyorlangan so’rovlar, konnektlar puli, R/W bo’linishi, natijalarni keshlash, so’rovlarni deduplikatsiya qilish.
Keshlar: o’lcham, TTL, request coalescing, bo’ron himoyasi, warming, mintaqaviy sharlar.
Navbatlar/brokerlar: do’stlik/parallellik limitlari, batch o’lchami, idempotent consumers, DLQ-shiftlar.
Garbatedj/pauzalar: GC tyuning, buferlarni ijaraga olish, object pooling.
I/O/disk: asinxron kirish/chiqish, siqish, javoblarni oqilona darajada siqish.
8) Limitlar va himoya
Budget taymautlari: kaskadlardan qochish uchun yuqoridan pastga.
Rate limit/token-baketalar: «uzoq o’lim» o’rniga oldindan aytib bo’ladigan tanazzul.
Circuit breaker va to’yinganlik ustuvorligi past.
Backpressure: signallar va parallellikni zanjirning ichiga cheklash.
Bulkheads: pullarni kritik endpointlar ostida izolyatsiya qilish.
Idempotency: retralar ostida xavfsiz takrorlash uchun kalitlar.
9) Asboblar va ularni qachon tanlash
k6 - lakonik JS, arrival-rate, integratsiya va grafikni juda yaxshi qo’llab-quvvatlash.
Gatling - Scala DSL, yuqori unumli generator.
JMeter - egiluvchan, ekotizimga boy; protokollar/plaginlar uchun qulay.
Locust - foydalanuvchi floularining murakkab mantig’i uchun qulay bo’lgan Python stsenariylari.
Vegeta/hey/wrk - HTTP da mikrobenchi va nuqta progonlari.
tc/netem, toxiproxy - tarmoq degradatsiyalarini in’ektsiya qilish.
Flamegraph/profiler - CPU/heap «issiq joylarni» qidirish.
10) Misollar (eskizlar)
k6 (ochiq model, endpoint mix)
javascript import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
scenarios: {
open_model: {
executor: 'constant-arrival-rate',
rate: 800, timeUnit: '1s', duration: '20m',
preAllocatedVUs: 500, maxVUs: 2000
}
},
thresholds: {
'http_req_duration{kind:hot}': ['p(95)<200'],
'http_req_failed': ['rate<0. 005']
}
};
export default function () {
const r = Math. random();
let res;
if (r < 0. 6) {
res = http. get('https://svc/api/hot', { tags: { kind: 'hot' }});
} else if (r < 0. 9) {
res = http. get('https://svc/api/warm', { tags: { kind: 'warm' }});
} else {
res = http. post('https://svc/api/heavy', JSON. stringify({ n: 1000 }), { headers: { 'Content-Type': 'application/json' }});
}
check(res, { 'status is 2xx': (r) => r. status >= 200 && r. status < 300 });
sleep(0. 2);
}
Gatling (bosqich va spike)
scala setUp(
scn. inject(
rampUsersPerSec(50) to 500 during (10 minutes),
constantUsersPerSec(500) during (20 minutes),
spikeUsers(2000). during(30. seconds)
)
). protocols(http. baseUrl("https://svc"))
Yuklash rejasi (YAML-skelet)
yaml profile: "mix-traffic"
targets:
- endpoint: GET /api/hot weight: 0. 6
- endpoint: GET /api/warm weight: 0. 3
- endpoint: POST /api/heavy weight: 0. 1 schedule:
- step: { rps: 300, hold: 10m }
- step: { rps: 600, hold: 10m }
- step: { rps: 900, hold: 10m }
guardrails:
slo:
p95_ms: 200 error_rate: 0. 5%
abort_if:
- metric: error_rate op: ">"
value: 2%
window: 2m
11) Avtomatlashtirish va hayot sikli
Perf-smoke har bir PRda (kalit endpointlarning qisqa prognozi).
Hisobotlar va profil artefaktlari bilan steyjdagi tungi «capacity» pog’onalari.
SI/CD geytlari: p95/p99> X regressi bazlayn yoki error rate o’sishida.
Bazlinlarni versionlash va profil/fleymgraflarni artefaktlar sifatida saqlash.
Relevantlik teglari: qaysi xizmat/endpoint qoplangan, qaysi trafik profilidan foydalanilgan.
12) Anti-patternlar
Bitta mashinada generator va sinovdan o’tkaziladigan xizmat → buzilgan natijalar.
Faqat yopiq model (VUs) uchun API-beklar → dumlarini kamaytirish va noto’g’ri baholash.
Boʻsh DB/kesh boʻyicha sovuqni boshlamagan progonlar.
Real taqsimotlarning yo’qligi (barcha so’rovlar bir xil).
Telemetriya yoʻq (faqat RPS/latency generator tomonidan).
Barqaror bazlaynlarsiz va muhitni nazorat qilmasdan taqqoslash.
Sababni tuzatish o’rniga ko’paytirilgan vaqt orqali «optimallashtirish».
13) Arxitektorning chek-varaqasi
1. SLO va namunaviy/eng yuqori yuk aniqlanganmi?
2. Toʻgʻri model (open/closed) tanlanganmi?
3. Stend konfiguratsiya va topologiya bo’yicha ekvivalentdir, sovuq/issiq rejim bormi?
4. Telemetriya va profillar yoqilgan, test-yara belgilari qo’yilyaptimi?
5. Dasturlar: baseline/ramp/spike/stress/soak - qoplanganmi?
6. Toʻyinish nuqtalari aniqlanyaptimi va zaxira (safety margin) rejalashtirilyaptimi?
7. Limitlar, breykerlar, bekpresher, idempotency, sheyding polislari oʻrnatilganmi?
8. p95/p99 regress va error rate uchun CI-geytlar bormi?
9. Fixlardan so’ng - quvvati bo’yicha playbook’ni qayta tarqatish va yangilash?
10. Avto-masshtablash va avariya rejimlari rejasi hujjatlashtirilganmi?
Xulosa
Yuklash va stress-test - bu bir martalik poyga emas, balki uzluksiz muhandislik amaliyoti. Haqiqiy trafik modeli, to’g’ri stendlar, telemetriya va CI/CDdagi avtomatlashtirish samaradorlikni «sirli sehr» dan metrik boshqariladigan qobiliyatga aylantiradi: siz shiftingiz qayerda ekanligini, zaxirangiz qanchalik xavfsiz ekanligini va qanday o’zgarishlar foydalanuvchi tajribasini yaxshilashini bilasiz.