Բեռի փորձարկումը և սթրեսի պրոֆիլները
Live ռեզյումե
Բեռի փորձարկումը իրական և ծայրահեղ սցենարների տակ արտադրողականության և կայունության համակարգային ստուգումն է։ Հաջողության հիմքը 'ճիշտ մոդելը (բաց vs closed), որը գրանցվել է SLO-ի, մաքուր մետրիկի (latency/throughput/սխալներ/հագեցում), ռեպրեսենտատիվ տվյալները, ավտոմատիզացումը և կրկնությունը։ Արդյունքը ոչ թե «RPS թվերն» է, այլ լուծումը, որտեղ նեղ տեղերը, որքան արժե արտադրողականությունը, որտեղ մերժման շեմն է և ինչպես այն տեղափոխել։
SLO/SLI և ռուսական մետրերը
SLO (օրինակ): p95 API 24250 ms, p99-600 ms; սխալը 0։ 3 %/30 օր։
SLI: latency (p50/p95/p99), throughput (RPS/CPS/QPS), saturation (CPU/heap/GC/FD/conn), ошибки (5xx, timeouts), очереди (depth/lag), DB (locks, slow queries), кэш (hit-ratio).
Սխալների բուդդետները և Saturation-ձգիչները (օրինակ, CPU> 75% կամ queue depth> X-ը)։
Թեստերի տեսակներ
1. Baseline/Benchmark-ը միայնակ ծառայություն է/endpoint, «կատարյալ» պայմաններ։
2. Load-ը իրական «աշխատանքային օր» է + ramp-up/ramp-down։
3. Սթրեսսը մեծացնում է բեռը մինչև քայքայումը և ամրագրել breakpoint-ը։
4. Spike-ը կտրուկ ցատկ է (x2-x10 վայրկյանում/րոպե)։
5. Soak/Endurance-ը երկար պրոգոն է (8-72 ժամ) 'հիշողության արտահոսքը, լատենտության դրեյֆը։
6. Capacity-ը փուլային ստանդարտ է արտադրողականության կորի և տարաների պլանավորման համար։
7. Degradation/Chaos-mix-2019 + մասնակի ձախողումներ (դանդաղ BD, քեշի անկում, «թեքված» aplink)։
Մոդելի մոդելներ ՝ Open vs Closed
Open model (ավելի իրատեսական ինտերնետի համար), օգտագործողները գալիս են ինտեգրման ինտենսիվությամբ (Poisson-նման հոսք)։ Եթե համակարգը դանդաղեցնում է, հարցումները կուտակվում են, ոչ թե «սառեցնում»։
Closed model: վիրտուալ օգտագործողների ֆիքսված թիվը (VU) think-time-ից։ Երբ RPS-ի ձգձգումը մեծանում է, արհեստականորեն ընկնում է 'զգուշորեն եզրակացություններով։
Առաջարկություն 'առջևի API-ի համար օգտագործեք բաց model (k6' arrival-rate "), ներքին սինխրոն կոդերի համար 'closed։
Բեռի ավելցուկը (ձևանմուշներ)
«Սովորական օր» 'հիմնական ֆոն + ցերեկային տատանումները։
«Pik-ivent»: 10-30 րոպե մինչև սկսելը (progreve), կտրուկ spike սկզբում, սարահարթում, պոչը։
«Մրցույթը/հոսանքը» 'քայլերի անտառը, ընդմիջումներում կրկնվող պիկը։
«Ենթակառուցվածքի քայքայումը» 'կեսը դատարկ է, մեկ տարածաշրջանը անջատված է, PSA-ի լատենտության բարձրացումը։
«Failover» ՝ գյուղը հոսում է արգելոցի վրա 1-5 րոպեի ընթացքում։ ստուգում ենք scail/HPA/Retry փոթորիկները։
Տվյալները և շրջակա միջավայրի պատրաստումը
Թեստային տվյալները 'իրական կարդինալիտը (պրովայդերներ, արժույթներ, երկրներ), «կեղտոտ» դաշտերը, հարցումների բաշխումը (Pareto/Zipf)։
Գաղտնիքները/PII 'անանուն; բանալիներ/PSA - sandbox։
Շրջապատը 'առանձնացված perf-stand, մեկուսացում ինտեգրացիայից (mock/pro), ֆիքսված տարբերակները։
Դիտարկումը 'մետրիկները (Prometheus), լոգները (Loki/ELK), ճանապարհները (OTel)։ Գրեք build-id պատասխաններում։
Antimstorma retrav եւ impotenty
Retrai միայն idempotent վիրահատությունների համար։ տեղադրեք retry-budget (օրինակ, 10 տոկոսը)։
Exponential backoff + jitter; «collapsing» -ը նույնական GET-ն է։
Վճարումների համար 'գաղափարական բանալիներ և ակնհայտ արձաններ։
Պաշտպանություն thundering herd 'kash-loks, SWR, տեղական սեմաֆորներից։
Գործիքներ և արտոնագրեր
K6 (ջութակի, բաց-մոդելի, լավ հաշվետվությունների), Disust (Python-սցենարներ), Gatling (Scala), JMeter (լայն տեսականի)։
Արձանագրությունները ՝ HTTP/1։ 1/2/3, gRPC, WebSocket, TCP/UDP; սերվերը մի փորձարկեք «ինչպես GET»։
Գեներատորների հորիզոնական մեծացումը, ցանցային նեղ վայրի վերահսկումը։
Մենք ուտում ենք կոդերը ՝ www.rof/async-profiler/ebpf ծանրության տակ, OTel մայրուղիները։
K6 (բաց-մոդել + spike) մինի-օրինակ
javascript import http from 'k6/http';
import {check, sleep} from 'k6';
export const options = {
scenarios: {
warmup: { executor: 'ramping-arrival-rate', startRate: 50, timeUnit: '1s',
preAllocatedVUs: 200, stages: [ { target: 200, duration: '5m' } ] },
spike: { executor: 'constant-arrival-rate', rate: 1200, timeUnit: '1s',
preAllocatedVUs: 2000, startTime: '6m', duration: '3m' }
},
thresholds: {
http_req_failed: ['rate<0. 3%'],
http_req_duration: ['p(95)<250', 'p(99)<600']
}
};
export default function () {
const res = http. get(`${__ENV. BASE_URL}/api/v1/catalog? c=${Math. floor(Math. random()1000)}`);
check(res, { 'status is 200': (r) => r. status === 200 });
sleep(Math. random()0. 9) ;//think time (for closed parts of the script)
}
Մեթոդաբանություն
1. Վարկածը, թե որ նեղ տեղերը հավանական են (CPU, BD, kash, ցանցը, TMS, GC)։
2. Ռուսական սցենարի/երթուղիների պրոֆիլը, կոդավորման, մոդելի մասնաբաժինը (բաց/closed), տվյալները։
3. Progrev/connects/TSA/մեկնաբաններ։
4. Սկզբնական քայլի մեծացումը մինչև ինտենսիվության բարձրացումը։
5. Սարահարթը պլանավորվում է կայուն մետրի և հետքերի հավաքումը։
6. Սթրեսը/անկումը ցույց են տալիս ոչնչացման կետերի որոնումը, մեքենա-սկեյլի դիտարկումը։
7. Վերլուծությունը բացատրում է մետրի, flamegraph, զեկույցը և փոփոխության պլանը։
8. Ռեպրուֆը նշանակեց CI-ի (Regression Perf) միջոցով։
Արդյունքների վերլուծություն
Կորի կորը «ռուսական ուշացում/սխալներ» 'փնտրում ենք ծնկի (capacity)։
Breakdown լատինականությունը 'ցանցը (SSA/TSA/connection), ռուսական, ծրագիրը, BD, արտաքին մարտահրավերները։
Սատուրնի ՝ CPU> 75-85 տոկոսը, GC pause> p95, I/O սպասումները, առաջադրանքների հերթը։
Առաձգականություն 'ավտոսկեյլի արձագանքման ժամանակը (HPA/KEDA), սառը սկիզբը, տաքացնելով քեշը։
Արժեքը ՝ $/1000 RPS բուժական SLO-ում, բյուջեի կանխատեսումը գագաթնակետին։
Ինժեներական պրակտիկա
Դեգրադացիայի ցուցիչները ՝ «պոչերը» p99, հերթերի աճը, hit-ratio անկումը, ռետրերի փորձերի աճը։
Բացառեք կոնֆաունդերները 'ածխաջրածնային ձայնագրիչների սահմանները, www.sctl, conn-pool, «reuse.ru», TIM շղթաները, OCSA-ը։
ԲԴ ՝ ինդեքսներ/պլաններ/հարցումներ, փամփուշտներ, բատչային վիրահատություններ, backpressure-ի վրա։
Քեշի 'չափսը/eviction-քաղաքականությունը, տաք բանալիները, կրկնօրինակումները։
Ցանցը/edge: HTTP/2/3, resumption 2470 տոկոսը, Brotli, CDN բանալին, tiered-cache։
Դիտարկումը բեռի տակ
Մետրիկները ՝ 108 (CPU/mem/IO), runtime (GC/heap), ցանցերը (RTT/loss/ECN), L7 (p95/99, 5xx/429), տողերը, BD/kash կլաստերները։
Թրեյզներ 'միացրեք «պոչի» վրա (tail-based), build-id/kanareks նշանները։
Լոգի 'սխալների ագրեգացիան ծավալի սահմանափակումով (որպեսզի ոչ թե «zaDOSկամ» log-pline)։
Փորձարկումները 'feature-flags-ը և եզրերը պետք է գրանցվեն գրանցամատյանում։
Ավտոմատիզացիա և CI/CD/CD
Perf-jobs-ում (smoke 3-5 րոպե, nightly 30-60 րոպե, weekly soak)։
Թույլատրության սահմանները ՝ լատենտ/սխալներ/ռեսուրսներ, ռեգրեսիայի ժամանակ «կոտրում ենք տոմսը»։
Արտեֆակտներ ՝ գրաֆիկներ, flamegraphs, պրոֆիլներ, JSON հաշվետվություններ (k6/jtl)։
Տվյալների և պարամետրերի տարբերակումը, PR-Reve Perf-ը։
Հատուկ iGaming/fintech համար
Դիագրամ/խաղեր ՝ spike + plateau; տաքացնելով TFC/MS/CDN, բարձրացված գնդակներ, «մոխրագույն» երթուղիներ բոտերի համար։
Վճարումները/PSA: sandbox-limits, idempotenty, խիստ թայմաուտներ; degrade-mode (գրացուցակների, հերթերի) ստուգում։
Ջեքպոտներ/ivents: Ատոմականություն և հաջորդականություն, դուբլի բացակայություն, որը տեղադրված է RNG/առաջնորդների վրա։
Անտիֆրոդ/AML 'կանոնների/ML-coring, backpressure, իրադարձությունների կրկնապատկումը։
Կարգավորիչ ՝ մետրի և տարբերակների տրամաբանությունը գագաթների, զեկույցների համար։
Չեկի թուղթ
- Գրանցվել են SLO/SLI և «կարմիր գծեր» (սխալ/լատենտ/սատուրնի)։
- Բեռի սցենարները և պրոֆիլները հաստատված են (բաց/closed, spike/soak/stress)։
- Տվյալները իրատեսական են, PII-ը դիմակավորված է, sandbox/mock-ը։
- Դիտողականությունը պատրաստ է 'չափումներ/թրեյսներ/լոգներ, թեգեր։
- Համակարգերի դելեգները (ulimit/www.sctl/poo.ru) տեղադրված են։
- Avto-skeila/տաքացում և rollback-չափանիշներ։
- Շեմի ալերտները և թիմերի հաղորդակցման պլանը (on-call)։
- System (գրաֆիկա, եզրակացություններ, գործողություններ) 2019։
Տիպիկ սխալներ
Closed-model թեստը տալիս է «կանաչ» արդյունքը, իսկ բացը նվազում է (չի կարելի անտեսել բաց մոդելը)։
Ոչ ներկայացուցչական տվյալները (մեկ արժույթ/մեկ պրովայդեր) կեղծ եզրակացություններ են։
Զրոյական պատրաստություն 'սառը քեշներ/TSA/կոննեկտներ, որոնք սկզբում բարձրացված լատենտ են։
Առանց սահմանների Ռետրաին հաստատեց փոթորիկը և կասկադային ընկճվածությունը։
Բոլոր ծառայությունների համար նույն պրոֆիլները բացատրվում են իրական «տաք կետերի»։
Soak-progons-ի բացակայությունը հիշողության արտահոսքը և dreeft-ը տեսանելի չեն։
Անթույլատրելի արդյունքներ. Ոչ մի հետք/ֆլեյմոգրաֆներ չեն կարող տեղայնացնել նեղ տեղը։
Մինի պլեյբուկները
Սահմանումը առավելագույն աշխատանքային ունակության (breakpoint)
1. Քաշի 10-20 տոկոսը յուրաքանչյուր 5-10-2) Մենք արձանագրում ենք մի պահ, որտեղ p95-ը կտրուկ աճում է և սխալները> SLO-ն։ 3) Մենք նկարում ենք CPU/BD/kash պրոֆիլները։ 4) Օպտիմիզացման պլանը և խոհարարը։
Գետերի փոթորիկների
1. Սահմանափակել retry-budget-ը և ներառել backoff + jitter-ը։ 2) Ներդրել request-colapsing/SWR։ 3) թույլ տալ «դեգրադային ռեժիմը» (սահմանափակ ֆունկցիոնալություն)։ 4) Փոխպատվաստել կուռքը։
Pik-ivent (մրցույթը) - պլան
1. Տաքացնել CDN/CSA/TSA/փամփուշտները։ 2) Ավելացնել target HPA-ն, գնել պահեստը։ 3) Առանձին rate-limits բոտերի համար։ 4) Dashbords «Pik-ռեժիմի», կապի կամուրջը on-call։
Soak-գիշեր
1. 8-12 ժամ կայուն բեռ։ 2) Դիտարկենք heap/FD/conn/GC-pauses։ 3) Ստուգենք p95 և hit-ratio դելտան։ 4) Մենք արձանագրում ենք արտահոսքեր և դրեյֆ։
Արդյունքը
Բեռի փորձարկումը ինժեներական լուծումների կայացման գործընթացն է, ոչ թե RPS-ի մրցավազքը։ Մոդելավորեք իրական պրոֆիլները (հատկապես բաց մոդելը), գրանցեք SLO-ը, նկարեք մետրեր և հետքեր, փնտրեք արտադրողականության ծնկներ և համարեք արտադրողականության արժեքը։ Ավտոմատիզացրեք դրանք, պահեք հակատանկային փոթորիկը և պլանավորեք գագաթնակետային իրադարձություններ, այնպես որ պլատֆորմը կլինի կանխատեսելի և կայուն ամենաբարդ պահերին։