Բեռի փորձարկումը և սթրեսը
Բեռի փորձարկումը և սթրեսը
1) Ինչո՞ ւ է դա անհրաժեշտ
Նպատակները
Հաստատել հզորությունը (որքան RPS/մրցակցային նստաշրջանները դիմակայեն համակարգը SLO-ի նշանակված)։
Գտնել շիշ բլշեր (CPU/IO/BD/ցանցեր/փամփուշտներ)։
Տեղադրել պերֆորանսային բյուջեները և «խաղացողները» CI/CD-ում։
Նվազեցնել ածխաջրածինների ռիսկը (p95/p99 ռեգրեսիա, պիկի ժամանակ սխալների աճը)։
Ծրագրավորել հզորությունը/արժեքը (skail-aut և պահուստներ)։
2) Պերմի թեստերի տեսակները
Load (աշխատանքային կոմպոզիցիա) 'իրատեսական կարգավորումը պիկի մոտ։ SLO-ի ղեկավարումը։
Stress (սթրեսը) 'մինչև/ավելի բարձր, ռուսական վարքագիծը քայքայվում է, որտեղ կոտրվում է։
Spike (իմպուլս) 'արագ բեռնման ցատկ, որն իրականացվում է առաձգականության/ավտոսկեյլ։
Soak/Endurance (երկար): ժամացույց/օր ռուսական արտահոսք, բեկորներ, latency։
Capacity/Scalability: Ինչպես է փոխվում throughput/latency scale-out; Ամդալա/Գուստաֆսոնի օրենքը։
Smoke perf: կարճ «ծխի» պրոգոնը յուրաքանչյուր ենթախմբում (peroce-saniti)։
3) Windows մոդելներ
Փակված մոդելը (fixed VUs/concurrency) '"N' օգտագործողներ, յուրաքանչյուր ոք դիմումներ է անում կլիենտում։ Ծանրաբեռնվածության վտանգը։
Բաց մոդել (arrival rate) 'շարժիչների հոսքը շարժիչի ինտենսիվությամբ (req/s), ինչպես իրական կյանքում։ Ավելի ճիշտ է հանրային API-ի համար։
Լիթլի օրենքը '«L = now.W»։
Փամփուշտի համար/105: Նվազագույն զուգահեռականությունը 108 '108 108 W "(ավելացրեք 20-50 տոկոսը)։
Որտեղ '07 "- throughput," W "- միջին ժամանակը։
4) Բեռի և սցենարի պրոֆիլները
User journey mix: login, browse, deposit, www.kout...)։
Think-time: Օգտագործողի դադարները (բաշխումը 'էքսպոնենցիալ/լոգոնորմ)։
Direprofile: Պատասխանների չափը, payload, փոփոխականությունն է։
Հարաբերակցություն 'կապեք քայլերը (կտորներ/հոսանքներ/ID) ինչպես իրական ֆլոուում։
Սառը/տաք/տաք կեսը 'առանձին պրոգոններ։
Read vs Write: Ընթերցումների/գրառումների հավասարակշռություն, ռետրերի համադրելիություն։
Մուլտֆիլմի տարածքը ՝ RTT, բաշխումը POP/ASN-ով։
5) Փորձարկման միջավայր
Մեկուսացում 'պատը մոտ է երկարացմանը' համաձայն տեղաբանության/պարամետրերի (բայց ոչ «բեյ»)։
Տվյալները 'PII դիմակավորում, ծավալներ, ինդեքսներ, ինչպես վաճառքում։
Բեռի գեներատորներ 'չեն հենվում CPU/ցանցում։ բաշխված վերքերը, ժամանակի համաժամացումը։
Դիտարկումը 'չափումներ/թրեյսներ/լոգներ, սինթեզիկա պարագծի վրա, CPU/heap։
6) Մետրիկի և SLI
Throughput: RPS/գործարքներ վայրկյանում։
Latency: p50/p95/p99, TTFB, server time vs network.
Errors '5x/4x/ստացիոնար սխալների մասը։
Saturation: CPU, load avg, GC, սկավառակի IOps/լատենտ, network, pool wait։
Բիզնես-SLI-ն 'ավանդի հաջողությունը 5s-ը, 652s-ի ապացույցը։
Շեմի արժեքները վերցրեք SLO-ից (օրինակ ՝ "99։ 95% 35300 ռուբլիներ"), վերահսկեք burn-rate-ը գետնի ժամանակ։
7) Փնտրել նեղ տեղեր (մեթոդաբանություն)
1. Կայուն տաքացրեք համակարգը 60-80 տոկոսով ռուսական բեռի վրա։
2. Ավելացրեք քայլերը (ramp) ամրացրեք որտեղ աճում է p95/p99 և error-rate։
3. Համեմատեք p99 աճի հետ
փամփուշտներում (DB/HTTP),
WAIT/loks (BD),
GC դադար/heap,
retransmits/packet loss,
սկավառակի լատենտ/cash propachi։
4. Լոկոմոտիվ 'երկուական որոնում հարցման ճանապարհին, ավելացողները (CPU/alloc/wwww.k-profile)։
5. Գրեք «շիշը» թյունինգը։
8) Սթրեսի տակ պահվածքը
Graceful degradation: limits, circuit-breakers, backpressure գծեր, ռեժիմը «ընդունվել է մշակման մեջ»։
Retrai 'առավելագույնը 1, միայն idempotent; ջիտթեր; գետերի բյուջեն կազմում է RPS-ի 10 տոկոսը։
Fail-op/Fail-closed: Ոչ կրիտիկական կախվածության համար թույլ տվեք fail-open (kash/Fail-closed)։
Cascading failure 'փամփուշտների/քվոտաների մեկուսացում (bulkhead), արագ թայմաուտներ, գործառույթների «սահուն» անջատումը (feature flags)։
9) Գործիքներ (ընտրություն առաջադրանքի համար)
k6 (System Script, բաց/բաց-մոդելը, արագ, հարմար CI-ում)։
JMeter (հարուստ էկոհամակարգ, GUI/CLI, պլագիններ, բայց ավելի դժվար)։
Gatling (Scala DSL, բարձր արտադրողականություն)։
Delust (Python, շարժիչների ճկունություն)։
Vegeta/hey/wrk (միկրո-բենչի և արագ ստուգում)։
Կանոն 'մեկ «հիմնական» գործիք + թեթև CLI-ի համար smoke-պերֆի համար PR-ում։
10) Օրինակներ (նեպետներ)
10. 1 k6 (բաց մոդել arrival rate)
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 (մրցույթի գաղափարը)
Thread Group + Stepping Thread или Concurrency Thread (open-like).
HTTP Request Defaults, Cookie Manager, CSV Data Set.
Backend Listener → InfluxDB/Grafana; 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) Տվյալները, հարաբերակցությունը, պատրաստումը
Seed տվյալները ՝ կոդեր, օգտագործողներ, հավասարակշռություններ, հոսանքներ, ինչպես վաճառքում։
PII-ի դիմակավորում/անանունացում; սինթեզի գեներացիան իրական բաշխումների վերևում։
Հարաբերակցություն 'հանեք ID/հոսանքները պատասխաններից (RegExp/JSONPath) և օգտագործեք հաջորդ քայլերում։
12) Գռեհիկների ժամանակ նկատվում է տեսողությունը
RED-dashbords (Rate, Errors, Duration) երթուղիներով։
Exemplars: մետրից անցում դեպի հետքեր (trace _ id)։
Սխալների լոգներ 'sampling + ագրեգացիա, կրկնօրինակներ/idempotention։
Մոսկվա: CPU/GC/heap, սկավառակներ/ցանց, pool wait։
ԲԴ ՝ Լավագույն հարցումները, արգելափակումները, սկանների ինդեքսը, բլոատը։
13) Ավտոմատիզացիա և պերֆորմացիա-գեյթ
CI 'կարճ անցումներ merge-ում (օրինակ, k6 2-3 րոպե) շեմերով։
Nightly/Weekly: երկար soak/stress առանձին միջավայրում; հաշվետվություններ և միտումներ։
Կանարեքային ֆորումները 'SLO վերլուծություն (error-rate, p95) որպես «գեյթ» առաջընթաց։
Ռեգրեսիա 'baseline vs ընթացիկ տոմս; ալտերտները, երբ վատանում են> X%։
14) Տարաների պլանավորումը և արժեքը
Կորած throughput www.latency: www.knee point (ծնկի) - դրանից հետո p99 կտրուկ աճում է։
Skeil-aut: Չափեք մեծացման արդյունավետությունը (RPS/porta հանգույցներ)։
Արժեքը ՝ «RPS դոլար/ժամ», պինդ իրադարձությունների պահուստ + DR-պահուստ։
15) Anti-patterna
Ծեծել առանց վերահսկելու կամ փորձարկել «դատարկ» միջավայրում, որը նման չէ անցմանը։
Փակված մոդել ֆիքսված VU-ով, որը թաքցնում է ծանրաբեռնվածությունը։
Think-time/տվյալների բացակայությունը բացատրում է քեշի ոչ ռեալիստական հիթերը կամ հակառակը 'փոթորիկը դեպի ելքերը։
Մեկ սցենար «/ping »օգտագործողի ֆլոուի փոխարեն։
Դիտարկման բացակայությունը. <<տեսնում ենք միայն RPS-ը և միջին ուշացումը>>։
Անվերահսկելի վերափոխումները ինքնին DDoS-ն են։
Թեստի և օպտիմիզացման խառնուրդը առանց հիպոթեզների/փոփոխության։
16) Չեք Թիթերը (0-30 օր)
0-7 օր
SLI/SLO և ռուսական պրոֆիլները (mix, think-time, տվյալները)։
Ընտրեք գործիք (k6/JMeter/Mastust), բարձրացրեք RED-ի dashbords։
Պատրաստեք ստենդը և seed տվյալները, անջատեք երրորդ կողմի լիմիտները/գլխարկները։
8-20 օր
Կառուցեք սցենարներ 'բաց-մոդել (arrival rate), սառը/տաք/տաք կեշ։
Spload www.stress ww.spike; տեղադրեք knee point և նեղ տեղեր։
Ներդրեք CI (միկրո-պրոգոն)։
21-30 օր
Soak-թեստը 4-24 ժամ 'արտահոսք/dreaf GC, կայունացում։
Փաստարկեք սահմանները, տարաների պլանը, «RPS 24p95/սխալները»։
Պատրաստեք runbook «Ինչպե՞ ս ավելացնել սահմանները/սկեյլը» և «ինչպես քայքայել»։
17) Հասունության մետրերը
Կան իրական պրոֆիլներ (mix, think-time, տվյալները), որոնք ծածկում են 2480 տոկոսը։
RED-dashbords + ճանապարհը միացված է բոլոր թեստերի համար։
Պերֆորանսը գեյտերը արգելափակում են ֆորումները ռ95/սխալների ռեգրեսիայի ժամանակ։
Հզորությունը և knee point-ը փաստաթղթավորված են հիմնական ծառայություններով։
Ամսական soak/stress-pross և դինամիկայի հաշվետվությունները։
«Spike» -ի դիմադրությունը ապացուցված է ավտո սկեյլի և cascade-fail-ի բացակայությամբ։
18) Եզրակացություն
Բեռի փորձարկումը կառուցվածքային ինժեներական պրակտիկա է, ոչ թե վարակիչ «չափիչ»։ Մոդելավորեք իրական օգտագործողներին (բաց-մոդելը), չափեք այն, ինչ արտահայտում է հաճախորդի փորձը (SLI/SLO), պահեք CI/CD-ում դիտողությունն ու «խաղացողները», իրականացրեք stress/spike/soak-progone և ամրագրեք knee point։ Այդ ժամանակ գագաթնակետային իրադարձությունները և սև կարապները վերածվում են կառավարվող սցենարների, իսկ արտադրողականությունը 'ձեր պլատֆորմի կանխատեսելի և չափելի պարամետրերի։