GH GambleHub

Բեռի և սթրեսի փորձարկում

1) Տերմիններ և նպատակներ

Load test-ը աշխատանքային միջակայքում (target RPS/մրցակցություն) SLO-ի դեմ (օրինակ, p95 <200 ms, error rate <0։ 5%).

Stress test-ը դուրս է գալիս (CPU/BD/ցանցից), դեգրադացիայի և վերականգնման մեխանիկայի դիտարկումը։

Spike test-ը ծանրության կտրուկ բարձրացումն է (N- ը րոպեում)։

Soak/Endurance-ը երկար պրոգոն է (ժամացույց/օր) արտահոսք գտնելու, GC dreaft, բեկորներ, հերթերի եղջյուրներ գտնելու համար։

Capacity test-ը էլեկտրականության սարահարթի հաշվարկն է (saturation point) և պաշարները։

Նպատակները 'հաստատել SLO-ն, արձանագրել սարահարթը, հասկանալ նեղ տեղերը, հեռացնել մեքենայի մասշտաբները և սահմանները։

2) Կոդավորման մոդելը 'բաց vs փակված

Փակված մոդել (concurrency-driven) 'վիրտուալ օգտագործողների ֆիքսված թիվը (VUs), յուրաքանչյուր պատասխան հետո անում է think time։

Բաց մոդել (arrival-rate) 'հարցումների ընդունման ֆիքսված ինտենսիվությունը (RPS), անկախ պատասխաններից։

💡 Վաճառքում ավելի հաճախ «բաց» աշխարհը (օգտագործողները գալիս են ինչպես գալիս են), քանի որ API/վեբ բեկների համար գերակա կերպով մոդելավորել arrival rate-ը։

Little’s Law: `L = λ W`

"L '-ը միաժամանակ սպասվող հարցումների միջին թիվն է,

'ը ինտենսիվությունն է (RPS),

«W» -ը պատասխանելու միջին ժամանակն է։

Այսպիսով, գեներատորի ճիշտ մրցակցության գնահատումը '«concurrency nottarget _ RPS p95 _ latency»։

3) Metriki: Ինչ չափում ենք

SLI ուշացումներ ՝ p50/p90/p95/p99 և պոչը p99։ 9; առանձին «տաք» և «սառը» ճանապարհների համար։

Սխալները ՝ «5xx», «4xx» (վիդային/ոչ որակավոր), timeouts, aborted։

Թողունակություն 'կայուն RPS, throughput հոսքեր/բայթ։

Ռեսուրսներ ՝ CPU, RAM/heap, GC դադար, IOPS/lat, ցանցային bandwidth, կոդերի/FD։

Հերթերը և backpresser 'խորությունը, սպասման ժամանակը, շեդ/limited հարցումների քանակը։

Քեշի արդյունավետությունը 'hit/miss, փոթորիկներ։

BD/kashi/հերթեր 'p95 հարցումներ, արգելափակումներ, հակամարտություններ, pool utilization։

4) Սթենդները և տվյալները

Միգրացիոն համարժեք ՝ ծրագրավորման, լիմիտների (uLimit, conntrack), JVM/GC, pool 'a։

Տեղաբանությունը ՝ LBs, CDN, WAF, TLS, նույն ցանցային «հոփները»։

Տվյալները ՝ իրական բաշխումներ (օբյեկտների չափսեր, «տաք «/» սառը »բանալիներ, օբյեկտիվություն)։

Սառը/տաք/տաք մեկնարկը 'առանձին անցքեր; պետք է փորձարկել «սառը» քեշները։

Ֆոնի մեկուսացումը 'անջատել ոչ ռեզլանտային ջոբները/նապաստակները կամ հաշվի առնել դրանց ազդեցությունը։

5) Սցենարներ (բեռի պրոֆիլներ)

1. Baseline: Քայլային արագացում մինչև RPS, 10-30 ռուբլիներ

2. Ramp & Hold: Լողացող աճը մինչև X տոկոսը ավելի բարձր է նպատակից, պահպանում է պոչերի վերլուծությունը։

3. Spike: ակնթարթային No. 2- 355 աճը 1-5 րոպե, ապա ՝ 108։

4. Stress to Failure 'քայլերը մինչև ձախողումները։ մենք արձանագրում ենք SLO-ի ձախողման առաջին կետը և «կոտրման» կետը։

5. Soak: 6-24 ժամ փոփոխականության հետ (օր/գիշեր), հետևում ենք դեմքերին/դրեյֆին։

6. Mixed 'էնդպոինտների խառնուրդը իրական բաշխման վրա (Zipf/pareto), տարբեր քաշներ։

6) Գայթակղիչ գործընթաց

Հայտնաբերել SLO-ը և ռուսական պրոֆիլները։

Ընտրել բեռի մոդել (բաց/փակ), տալ arrival-rate կամ VUs։

Պատրաստել տվյալները և «տաք «/» սառը »ռեժիմները։

Միացրեք հեռաչափությունը (treiss/metriks/loga), կորլացիա թեստային վերքի հետ։

Տաքացնելով և պրոգոնը, արտեֆակտների հավաքումը (CPU/heap, flame graphs, intain/slow-logs BD)։

Նեղ տեղերի վերլուծություն, action items ձևավորումը։

Reprogon-ից հետո, բազալինի նորարարությունը և capacity playbook-ը։

7) Նեղ վայրեր և տիպիկ ֆիքսներ

CPU-bound ծառայությւնը 'ավելացնելը տաք ֆունկցիաների, ալոկացիաների, ճյուղերի կոդավորումն է։ վեկտորիզացիա, քաշ-ֆրիդլի կառուցվածք։

Ցանցը/TMS: keep-alive, HTTP/2/3, connational pooling, ճիշտ թայմաուտներ, չաթվության նվազում։

ԲԴ ՝ ինդեքսներ, բատչինգներ, որոնք պատրաստվել են հարցումների, ձիերի փամփուշտների, R/W բաժանման, արդյունքների հավաքման, հարցումների դեդկլիկացիայի։

Քեշի 'չափը, TTL, request coalescing, պաշտպանություն փոթորիկներից, warming, տարածաշրջանային գնդակներից։

Հերթերը/բրոկերները 'լիմիտները' պրիմիտիվ/զուգահեռ, մարտերի չափը, idempotent consumers, DLQ առաստաղները։

Հարբաթ/դադար 'GC թյունինգը, ածխաջրածինների վարձույթը, խելացի սահմաններում object pooling։

I/O/սկավառակը 'ասինխրոն մուտքագրումը/եզրակացությունը, ագրեսիան, պատասխանների սեղմումը խելացի մակարդակի հետ։

8) Լիմիտներ և պաշտպանություն

Budget timauts 'վերևից ներքև, որպեսզի խուսափեն կասկադներից։

Rate limit/tocen-butets: կանխատեսելի դեգրադացիա «երկար մահվան» փոխարեն։

Circuit breaker-ը և ցածր գերակայությունը հագնելու ժամանակ։

Backpressure: ազդանշաններ և զուգահեռականության սահմանափակում շղթայի խորքում։

Bulkheads 'փամփուշտների մեկուսացումը կրիտիկական էնդպոինտների տակ։

Idempotency: բանալիներ անվտանգ խոհարարների համար ռելսերի տակ։

9) Գործիքներ և երբ ընտրել դրանք

K6 - laconical JS, հիանալի աջակցություն arrival-rate, կոմպոզիցիաներ և գրաֆիկներ։

Gatling-ը Scala DSL-ն է, բարձր արտադրողական գեներատոր։

JMeter-ը ճկուն, հարուստ էկոհամակարգ է։ հարմար է պարամետրերի/պլագինների համար։

Delust-ը Python-սցենարն է, հարմար է օգտագործողի ֆլոուի բարդ տրամաբանության համար։

Vegeta/hey/wrk - միկրոբենկներ և կետային բացիկներ HTTP-ում։

tc/netem, toxiproxy - ցանցային քայքայման միգրացիա։

Flamegraph/profiler-ը CPU/heap-ի «տաք տեղերի» որոնումն է։

10) Օրինակներ (սկետչիներ)

k6 (բաց մոդել, mix endpoints)

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 (աստիճաններ և սպայկ)

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"))

Բեռի պլանը (YAML կմախք)

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) Ավտոմատիզացիա և կյանքի ցիկլ

Perf-smoke-ը յուրաքանչյուր PR-ում (կարճ շեղում հիմնական էնդպոինտների)։

Գիշերային «capacity» -ը սայթաքում է զեկույցներով և արտեֆակտներով։

CI/CD խաղացողները 'p95/p99> X-ի ռեգրեսիայի տոմսերը կամ error rate-ի աճը։

Բազլայնների տարբերակումը և կոդավորման/ֆլեյմոգրաֆների պահպանումը որպես արտեֆակտներ։

Ռելեվանտության թեգերը 'ինչպիսի ծառայություն/էնդպոինտ ծածկված է, թե որ պրոֆիլն է օգտագործվում։

12) Anti-patterna

Գեներատորը և փորձարկվող ծառայությունը մեկ մեքենայի վրա աղավաղված արդյունքներ են տալիս։

Միայն փակված մոդել (VUs) API-back-ի համար պոչի թերագնահատումը և սխալ գնահատումը։

Դատարկ BD/kasha առանց սառը մեկնարկի։

Իրական բաշխումների բացակայությունը (բոլոր հարցումները նույնն են)։

Հեռուստատեսություն չկա (միայն RPS/latency գեներատորից)։

Համեմատություն առանց կայուն բազլինների և միջավայրի վերահսկման։

«Օպտիմիզացիան» ավելացված թայմաուտի միջոցով 'պատճառները շտկելու փոխարեն։

13) Ճարտարապետի չեկի թերթիկը

1. Որոշե՞ լ են SLO-ը և տիպիկ/պիցցա լուծումը։

2. Ընտրվել է ճիշտ մոդել (բաց/closed) և նկարված է պրոֆիլով։

3. Պատը համարժեք է գենդերային և տեղաբանությանը, կա սառը/տաք ռեժիմ։

4. Հեռուստաչափությունը և պրոֆիլները ներառում են, ռուսական թեստային վերքը տեղադրվում են։

5. Progons: baseline/ramp/spike/stress/soak - ծածկված։

6. Ամրագրված են հագեցման կետերը և պահեստները (safety margin)։

7. Լիմիտները, բրեյքերները, բեքսպրեսերը, idempotency, շեյդինգի պոլիսները։

8. Կան CI-գեյտներ p95/p99 և error rate-ի վրա, որոնք տարբերակված են։

9. Ֆիքսներից հետո 'reprogon և playbook հզորության նորարարություն։

10. Փաստարկվել է մեքենայի մեծացման և արտակարգ ռեժիմների պլանը։

Եզրակացություն

Բեռի և սթրեսի փորձարկումը տարբեր «մրցավազք» չէ, այլ շարունակական ինժեներական պրակտիկա։ Իրական մոդելը, ճիշտ ստենդները, հեռաչափությունը և ավտոմատացումը CI/CD-ում վերածում են «գաղտնի մոգության» արտադրողականության դեպի կառավարվող մեթոդ 'գիտեք, թե որտեղ է ձեր առաստաղը, որքան անվտանգ է պահուստը, և որ փոփոխությունները իրականում բարելավում են օգտագործողների փորձը։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։