Iş ýüki we stres synagy
1) Adalgalar we maksatlar
Load test - SLO garşy iş zolagynda (maksat RPS/bäsdeşlik) barlag (mysal üçin, p95 <200 ms, error rate <0. 5%).
Stress test - çäklerden çykmak (CPU/DB/toruň doýgunlygyna çenli/artykmaç), zaýalanma we dikeldiş mehanikasyna syn etmek.
Spike test - ýüküň ýiti partlamalary (minutlaryň dowamynda N ×).
Soak/Endurance - syzmak, GC süýşmek, bölmek, nobatlaryň köpelmegi üçin uzak aralyk (sagat/gün).
Capacity test - geçiriş kuwwatynyň platosyny (saturation point) we ätiýaçlyklary hasaplamak.
Maksatlar: SLO-ny tassyklamak, platony düzmek, päsgelçiliklere düşünmek, awto-masştaby we çäkleri kalibrlemek.
2) Traffik modeli: açyk vs ýapyk
Ýapyk model (concurrency-driven): wirtual ulanyjylaryň (VUs) kesgitlenen sany, jogapdan soň her biri think time edýär.
Açyk model (arrival-rate): jogaplara garamazdan haýyşlaryň (RPS) alynmagynyň kesgitlenen intensiwligi.
Little’s Law: `L = λ W`
'L' - bir wagtyň özünde hyzmat edilýän haýyşlaryň ortaça sany,
'λ' - intensiwlik (RPS),
'W' - ortaça jogap wagty.
Şonuň üçin "concurrency ≈ target_RPS p95_latency'.
3) Metrikler: nämäni ölçeýäris
SLI gijikdirmeler: p50/p90/p95/p99 we p99 guýrugy. 9; "gyzgyn" we "sowuk" ýollar üçin aýratyn.
Hatalar: '5xx', '4xx' (dogry/dogry däl), timeouts, aborted.
Geçirijilik ukyby: durnukly RPS, throughput akymlary/baýt.
Çeşmeler: CPU, RAM/heap, GC-arakesmeler, disk IOPS/lat, tor bandwidth, birikmeleriň sany/FD.
Nobatlar we beklemek: çuňlugy, garaşmak wagty, soraglaryň sany/çäkli.
Keshiň netijeliligi: hit/miss, ýyladyş tupanlary.
BD/nagt pullar/nobatlar: p95 soraglar, blokirlemeler, gapma-garşylyklar, pool utilization.
4) Stendler we maglumatlar
Konfigurasiýa ekwiwalentligi: programma üpjünçiliginiň wersiýalary, çäkleri (uLimit, conntrack), JVM/GC konfigurasiýasy, pool's.
Topologiýa: LBs, CDN, WAF, TLS, şol bir tor "hoplary".
Maglumatlar: hakyky paýlanmalar (obýektleriň ölçegleri, "gyzgyn "/" sowuk "açarlar, sebitlilik).
Sowuk/ýyly/gyzgyn başlangyç: aýry-aýry geçişler; "sowuk" keşleri synagdan geçirmeli.
Fon izolýasiýasy: degişli däl joblary/kronlary öçürmek ýa-da olaryň täsirini göz öňünde tutmak.
5) Ssenariler (ýüküň profilleri)
1. Baseline: maksatly RPS-e tizlenmek, saklamak 10-30 minut.
2. Ramp & Hold: nyşandan ýokary X% -e çenli tekiz ösüş, saklamak → guýruk derňewi.
3. Spike: derrew × 2- × 5 1-5 minutda bökmek, soň bolsa gaýdyp gelmek.
4. Stress to Failure: şowsuzlyga çenli basgançaklar; SLO-nyň ýerine ýetirilmedik ilkinji nokadyny we "döwülen" nokady ýazýarys.
5. Soak: traffigiň üýtgemegi bilen 6-24 sagat (gije/gije), ýüzlere/süýşmä gözegçilik edýäris.
6. Mixed: hakyky paýlanyş boýunça endpointleriň garyndysy (Zipf/pareto), dürli agramlar.
6) Ädimme-ädim iş
SLO we maksatly traffik profillerini kesgitlemek.
Ýük modelini saýlaň (açyk/ýapyk), arrival-rate ýa-da VUs goýuň.
Maglumatlary we "gyzgyn "/" sowuk "reimesimleri taýýarla.
Telemetriýany (treýsler/metrikler/loglar), synag ýarasy bilen korelýasiýany sazla.
Gyzdyrmak we geçmek, artefaktlary ýygnamak (CPU/heap, flame graphs, explain/slow-logs DB profilleri).
Dar ýerleri seljermek, action items.
Fikslerden soň reprogon, bazline we capacity playbook täzelenýär.
7) Dar ýerler we adaty fiksler
CPU-bound hyzmaty: profillemek → gyzgyn funksiýalary, allokasiýalary, şahalary ýok etmek; wektorizasiýa, friendly gurluşlar.
Tor/TLS: keep-alive, HTTP/2/3, connection pooling, dogry wagtlar, söhbetdeşligiň azalmagy.
DB: indeksler, batchingler, taýýarlanan soraglar, konnektler howzy, R/W-bölmek, netijeleri kesmek, soraglary duplikasiýa etmek.
Nagt pullar: ululygy, TTL, request coalescing, tupan goragy, warming, sebit toplary.
Nobatlar/dellallar: ýakymly/paralellik çäkleri, batçlaryň ululygy, idempotent consumers, DLQ-potoloklar.
Garbatage/arakesmeler: GC sazlamak, buferleri kärendesine almak, object pooling akylly çäklerde.
I/O/disk: asinxron giriş/çykyş, gysyş, jogaplary akylly dereje bilen gysmak.
8) Çäkler we gorag
Wagtlaryň býudjeti: kaskadlardan gaça durmak üçin ýokardan aşak.
Rate limit/token-bakets: "uzak ölümiň" ýerine öňünden aýdyp boljak zaýalanma.
Circuit breaker we doýanda pes ileri tutulýan shading.
Backpressure: signallar we paralellik çäkleri.
Bulkheads: howuzlary möhüm endpointlere izolirlemek.
Idempotency: retralaryň aşagyndaky howpsuz gaýtalanmalar üçin açarlar.
9) Gurallar we olary haçan saýlamaly
k6 - JS lakoniki, arrival-rate, integrasiýa we grafalar üçin ajaýyp goldaw.
Gatling - Scala DSL, ýokary öndürijilikli generator.
JMeter - çeýe, ekosistemalara baý; Teswirnamalar/pluginler üçin amatly.
Locust - ulanyjy flowunyň çylşyrymly logikasy üçin amatly Python ssenarileri.
Vegeta/hey/wrk - HTTP-de mikrobençi we nokat aralyklary.
tc/netem, toxiproxy - tor zaýalanmalarynyň sanjymydyr.
Flamegraph/profiler - CPU/heap "gyzgyn ýerleri" gözlemek.
10) Mysallar (eskizler)
k6 (açyk 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 (ädimler we 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"))
Ýük meýilnamasy (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) Awtomatlaşdyryş we durmuş aýlawy
Her PR-de perf-smoke (esasy endpointleriň gysga geçmegi).
Hasabatlar we profil artefaktlary bilen gijeki "capacity" geçişleri.
C/CD-de geýtlar: p95/p99 regressinde feýl bild> X bazline ýa-da error rate ýokarlananda%.
Bazlinleri wersiýalaşdyrmak we artefaktlar hökmünde profilleri/flemgraflary saklamak.
Degişli bellikler: haýsy hyzmat/endpoint örtülendir, haýsy traffik profili ulanylýar.
12) Anti-patternler
Bir maşynda generator we synag edilýän hyzmat → ýoýulan netijeler.
API-bellikler üçin diňe ýapyk model (VUs) → guýruklara kembaha garamak we nädogry baha bermek.
Sowuk başlamazdan boş DB/kesh boýunça geçişler.
Hakyky paýlamalaryň ýoklugy (ähli haýyşlar birmeňzeş).
Telemetriýa ýok (diňe RPS/latency generator tarapyndan).
Durnukly bazlinler we daşky gurşaw gözegçiligi bolmazdan deňeşdirme.
Sebäbini düzetmegiň ýerine uzaldylan wagt arkaly "optimizasiýa".
13) Arhitektoryň çek-sanawy
1. SLO we adaty/iň ýokary ýük kesgitlenildi?
2. Dogry model (open/closed) saýlandy we traffik profili boýaldyňyzmy?
3. Stend konfigurasiýa we topologiýa boýunça deňdir, sowuk/gyzgyn re regimeim barmy?
4. Telemetriýa we profiller goşuldy, synag ýarasynyň bellikleri goýulýarmy?
5. Purs: baseline/ramp/spike/stress/soak - örtülen?
6. Doýma nokatlary kesgitlenýärmi we ätiýaçlyk (safety margin) meýilleşdirilýärmi?
7. Çäklendirmeler, breýkerler, bekpreşer, idempotency, şeýding polisleri sazlandyňyzmy?
8. Regress p95/p99 we error rate üçin CI-geýtleri barmy?
9. Fikslerden soň - kuwwaty boýunça playbook reprogony we täzelenmesi?
10. Awto-masştabyň we adatdan daşary ýagdaýlaryň meýilnamasy resminamalaşdyryldymy?
Netije
Ýüklemek we stres-synag etmek bir gezeklik "ýaryş" däl-de, üznüksiz in engineeringenerçilik tejribesidir. CI/CD-de hakyky traffik modeli, dogry stendler, telemetriýa we awtomatlaşdyryş öndürijiligi "gizlin jadydan" metrikler tarapyndan dolandyrylýan ukyba öwürýär: potolokyňyzyň nirededigini, ätiýaçlygyň näderejede howpsuzdygyny we haýsy üýtgeşmeleriň ulanyjy tejribesini hakykatdanam gowulaşdyrýandygyny bilýärsiňiz.