Ýük synagy we stres
Ýük synagy we stres
1) Bu näme üçin zerur?
Maksatlar:- Kuwwaty tassyklaň (ulgam berlen SLO-da näçe RPS/bäsdeşlik sessiýasyna çydap biler).
- Çüýşe bokurdagyny tapyň (CPU/IO/DB/tor/blokirleme/howuz).
- CI/CD-de çykyş-býudjetleri we "geýtleri" sazla.
- Relizleriň töwekgelçiligini azaltmak (regressiýa p95/p99, iň ýokary derejedäki ýalňyşlyklaryň köpelmegi).
- Kuwwaty/gymmaty meýilleşdirmek (skeýl-aut we ätiýaçlyklar).
2) Perf synaglarynyň görnüşleri
Ýüklemek (iş ýüki): iň ýokary derejä ýakyn hakyky traffik; SLO tassyklamasy.
Stress (stress): iň ýokary/iň ýokary ösüş → bozulan ýerdäki özüni alyp baryş.
Spike (impuls): ýüküň çalt bökmegi → elastiklik/awtoskeýl.
Soak/Endurance (dowamly): sagat/gün → syzmak, bölmek, latency süýşmesi.
Capacity/Scalability: scale-out-da throughput/latency nähili üýtgeýär; Amdal/Gustafson kanuny.
Smoke perf: Her çykyşda gysga "tüsse" geçişi (çykyş-sanitary).
3) Traffigi döretmegiň modelleri
Ýapyk model (fixed VUs/concurrency): 'N' ulanyjy, her kim haýyş edýär → müşderide nobat. Artykmaç ýüküň gizlenmek töwekgelçiligi.
Açyk model (arrival rate): hakyky durmuşdaky ýaly λ intensiwligi (req/s) bolan arzalaryň akymy. Köpçülige açyk API üçin has dogry.
Little kanuny: 'L = λ × W'.
Howuz/hyzmat üçin: iň az parallellik ≈ 'λ × W' (ätiýaçlygyň 20-50% -ini goşuň).
Nirede 'λ' - throughput, 'W' - ortaça hyzmat wagty.
4) Ýüküň profilleri we ssenariýalary
User journey mix: ssenariýalaryň paýlary (login, browse, deposit, checkout...).
Think-time: Ulanyjynyň arakesmeleri (paýlanyş: eksponensial/lognormal).
Data profile: jogaplaryň ululygy, payload, parametrleriň üýtgemegi.
Baglanyşyk: ädimleri (cookie/token/ID) hakyky ýaýlymdaky ýaly baglanyşdyryň.
Sowuk/ýyly/gyzgyn kesh: aýry-aýry geçişler.
Okamak vs Write: okalyşlaryň/ýazgylaryň deňagramlylygy, retraýalar üçin deňagramlylyk.
Köp sebit: RTT, POP/ASN boýunça paýlanyş.
5) Synag gurşawy
Izolýasiýa: stend topologiýa/sazlamalar boýunça önüme ýakyn (ýöne önümi "urmaýarys").
Maglumatlar: PII maskalanmak, göwrümler, indeksler önümdäki ýaly.
Ýük generatorlary: CPU/tora daýanmaýar; paýlanan rannerler, wagt sinhronizasiýasy.
Syn edilişi: metrikler/söwdalar/loglar, perimetri sintetika, CPU/heap profilleriniň eksporty.
6) Metrikler we SLI
Throughput: sekuntda RPS/amallar.
Latency: p50/p95/p99, TTFB, server time vs network.
Errors: 5xx/4xx/domen ýalňyşlyklarynyň paýy.
Saturation: CPU, load avg, GC, disk IOps/latentlik, network, pool wait.
Business-SLI: 5s ≤ goýumyň üstünligi, sargytyň tassyklanmagy ≤ 2s.
Bosagaly bahalary SLO-dan alyň (mysal üçin "99. 95% ≤ 300 ms"), geçiş wagtynda burn-rate gözegçilik ediň.
7) Dar ýerleri gözlemek (usulyýet)
1. Ulgamy maksatly ýüküň 60-80% -ine yzygiderli gyzdyryň.
2. Ädimler bilen ulalyň (ramp) → p95/p99 we error-rate ösýän ýerinde ýazyň.
- howuzlarda nobatlar (DB/HTTP),
- WAIT/lokow (DB) beýikligi,
- GC arakesmeleri/heap,
- tor retransmits/packet loss,
- disk gizlinligi/keş ýalňyşlyklary.
- 4. Lokallaşdyryň: gözleg ýoly boýunça ikilik gözleg, profil düzüjiler (CPU/alloc/lock-profile).
- 5. "Çüýşäni" düzüň → sazlamak → gaýtalamak.
8) Stres astynda özüni alyp barmak
Graceful degradation: limitler, circuit-breakers, backpressure bilen nobatlar, "gaýtadan işlemek üçin kabul edildi" re modeimi.
Retraýlar: iň köp 1, diňe dempotent; jitler; retraýlaryň býudjeti ≤ RPS-den 10%.
"Fail-open/Fail-closed": kritiki däl endikler üçin "fail-open" -a ýol beriň.
Cascading failure: howuzlaryň/kwotalaryň izolýasiýasy (bulkhead), çalt wagtlar, funksiýalaryň "ýumşak" öçürilmegi (feature flags).
9) Gurallar (wezipe üçin saýlamak)
k6 (JavaScript, açyk/açyk-model, çalt, CI-de amatly).
JMeter (ekosistemalara baý, GUI/CLI, pluginler, ýöne has agyr).
Gatling (Scala DSL, ýokary öndürijilik).
Locust (Python, ssenariýalaryň çeýeligi).
Vegeta/hey/wrk (mikro-bençi we çalt barlamak).
Düzgün: Bir "esasy" gural + PR-da smoke-perf üçin ýeňil CLI.
10) Mysallar (snippetler)
10. 1 k6 (arrival rate bilen açyk 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 pikiri)
Thread Group + Stepping Thread или Concurrency Thread (open-like).
HTTP Request Defaults, Cookie Manager, CSV Data Set.
Backend Listener → InfluxDB/Grafana; Wagt/kod boýunça Assertions.
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) Maglumatlar, korrelýasiýa, taýýarlyk
Seed-data: kataloglar, ulanyjylar, balanslar, tokenler - önümdäki ýaly.
PII-ni gizlemek/anonimleşdirmek; hakyky paýlanyşyň üstünden sintetikanyň öndürilmegi.
Baglanyşyk: Jogaplardan ID/bellikleri alyň (RegExp/JSONPath) we indiki ädimlerde ulanyň.
12) Arakesmelerde syn edilişi
Marşrutlar boýunça RED-daşbordlar (Rate, Errors, Duration).
Exemplars: Metriklerden ýollara geçmek (trace_id).
Ýalňyşlyk ýazgylary: sampling + agregasiýa, dublikatlar/idempotentlik.
Ulgam: CPU/GC/heap, diskler/tor, pool wait.
BD: top-soraglar, blokirlemeler, indeks-skanlar, bloat.
13) Awtomatlaşdyryş we çykyş-geýtleri
CI: merge-de gysga aralyklar (mysal üçin k6 2-3 minut).
Nightly/Weekly: aýratyn gurşawda uzyn soak/stress; hasabatlar we tendensiýalar.
Kanar relizleri: SLO (error-rate, p95) mahabatyň "derwezesi" hökmünde seljermesi.
Regressiýalar: baseline vs häzirki bild; erbetleşende alertler> X%.
14) Kuwwatyň meýilleşdirilmegi we bahasy
throughput → latency: knee point (dyzyňyzy) kesgitläň - ondan soň p99 birden ýokarlanýar.
Skale aut: masştabyň netijeliligini ölçäň (delta RPS/delta düwünleri).
Bahasy: "$/sagat üçin RPS", iň ýokary wakalar üçin ätiýaçlyk + DR-ätiýaçlyk.
15) Anti-patternler
Önümi gözegçiliksiz uruň ýa-da önüme meňzeş bolmadyk "boş" gurşawda synagdan geçiriň.
Artykmaç ýükleri gizleýän, kesgitlenen VU bilen ýapyk model.
Think-time/maglumatlaryň ýoklugy → hakyky däl keş hitleri ýa-da tersine - çeşmelere tupan.
Ulanyjy şöhleleriniň ýerine bir "/ping "ssenarisi.
Syn edilmezlik: "diňe RPS we ortaça gijä galmagy görýäris".
Gözegçiliksiz retralar → öz-DDoS.
Gipotezalary/üýtgeşmeleri düzetmezden synag we optimizasiýalary garyşdyrmak.
16) Çek-sanawy (0-30 gün)
0-7 gün
SLI/SLO we maksatly trafik profillerini (mix, think-time, maglumatlar) kesgitläň.
(k6/JMeter/Locust) guraly saýlaň, RED dashbordlaryny galdyryň.
Stendi we tohum maglumatlary taýýarlaň, üçünji tarap çäklerini/kaptçlaryny öçüriň.
8-20 gün
Ssenarileri guruň: açyk model (arrival rate), sowuk/ýyly/gyzgyn kesh.
Ýükläň → stress → spike; knee point we dar ýerleri düzüň.
CI (mikro-geçiş) ýerine ýetiriş oýunlaryny giriziň.
21-30 gün
Soak-synag 4-24 sagat: syzmak/süýşmek GC, durnuklaşma.
Çäkleri, kuwwat meýilnamasyny, "RPS → p95/ýalňyşlyklar" suratyny resminamalaşdyryň.
Runbook "çäklendirmeleri/skaýllary nädip köpeltmeli" we "nädip peseltmeli".
17) Kämillik ölçegleri
Traffigiň 80% -ine ≥ hakyky profiller (mix, think-time, maglumatlar) bar.
RED-dashboard + tracking ähli synaglar üçin birikdirildi.
Çykyş-geýtleri p95/ýalňyşlyklar regressiýa edilende relizleri petikleýär.
Kuwwat we knee point esasy hyzmatlar boýunça resminamalaşdyryldy.
Aýlyk soak/stress-geçişler we dinamika boýunça hasabatlar.
"Spike" -e garşylygy awtoskeil we cascade-fail ýoklugy bilen tassyklanýar.
18) Netijenama
Ýük synagy bir gezeklik "ölçeg" däl-de, yzygiderli in engineeringenerçilik tejribesidir. Hakyky ulanyjylary simulýasiýa ediň (open-model), müşderiniň tejribesini görkezýän zady ölçäň (SLI/SLO), CI/CD-de gözegçilik we "geýtleri" saklaň, stres/spike/soak-pogonlary geçiriň we knee point belläň. Şonda iň ýokary wakalar we "gara guşlar" dolandyrylýan ssenariýalara, öndürijilik bolsa platformanyzyň öňünden aýdyp boljak we ölçäp boljak parametrine öwrülýär.