Жүк тестирлөө жана стресс профилдери
Кыскача резюме
Жүктөө тестирлөө - бул реалдуу жана экстремалдык сценарийлер боюнча аткарууну жана туруктуулукту системалуу текшерүү. Ийгиликтин негизи: туура трафик модели (open vs closed), жазылган SLO, таза метрика (latency/throughput/каталар/каныгуу), өкүлчүлүк маалыматтары, автоматташтыруу жана кайталануу. Жыйынтык "RPS саны" эмес, чечим: тар жерлер кайда, өндүрүмдүүлүк канча турат, мүчүлүштүктүн босогосу кайда жана аны кантип жылдыруу керек.
SLO/SLI жана максаттуу метриктер
SLO (мисал): p95 API ≤ 250 мс, p99 ≤ 600 мс; ката ≤ 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 - жалгыз кызмат/эндпойнт, "идеалдуу" шарттар.
2. Load - реалдуу "жумуш күнү" + рамп-up/рамп-down.
3. Стресс - деградация жана breakpoint бекитүү чейин жүктү жогорулатуу.
4. Spike - кескин секирик (секундасына x2-x10).
5. Soak/Endurance - узакка созулган прогон (8-72 саат): эстутумдун агып кетиши, латенттүүлүктүн жылышы.
6. Capacity - аткаруу ийри куруу жана кубаттуулукту пландаштыруу үчүн баскычтуу жүк.
7. Degradation/Chaos-mix - жүк + жарым-жартылай мүчүлүштүктөр (жай DD, кэштин кулашы, "кыйраган" аплинк).
Трафик моделдери: Open vs Closed
Open модели (Интернет үчүн реалдуу): колдонуучулар λ интенсивдүүлүгү менен келет (Poisson сыяктуу агым). Эгерде система жайласа, суроо-талаптар топтолуп, "тоңдурулбайт".
Closed модели: жасалма колдонуучулардын белгиленген саны (VU) think-time менен. кечигүү өсүшү менен RPS жасалма түшөт - корутундулары менен сак.
Сунуш: алдыңкы API үчүн ачык моделди (k6 'arrival-rate'), ички синхрондуу сценарийлер үчүн - closed менен айкалыштырыңыз.
Жүктөө профилдери (үлгүлөр)
"Кадимки күн": негизги фон + күндүзгү термелүүлөр.
"Пик-event": башталганга чейин 10-30 мүнөт (жылытуу), башында курч spike, плато, куйрук.
"Турнир/агым": тепкич тепкичтер, аралыкта кайталанган чокулары.
"Инфраструктуранын деградациясы": кэштин жарымы бош, бир аймак өчүрүлгөн, PSP латенттүүлүгүн жогорулатуу.
"Failover": трафик 1-5 мүнөттө запастагы агып; авто скейлди/HPA/Retry бороондорун текшерип жатабыз.
Маалыматтар жана айлана-чөйрөнү даярдоо
Тесттик маалыматтар: реалдуу кардиналитет (провайдерлер, валюталар, өлкөлөр), "кир" талаалар, суроо-талаптарды бөлүштүрүү (Pareto/Zipf).
Сырлар/PII: анонимдештирүү; ачкычтар/PSP - sandbox.
Айлана-чөйрө: атайын perf-стенд, интеграциялардан обочолонуу (mock/stabs), белгиленген версиялар.
Байкоо: метрика (Prometheus), Loki (Loki/ELK), жолдор (OTel). Жоопторго build-id жазыңыз.
Антишторма ретрайлер жана идемпотенттүүлүк
Ретраи гана idempotent бүтүмдөр үчүн; retry-budget (мисалы, ≤ 10% жол).
Exponential backoff + jitter; "collapsing" окшош GET.
Төлөмдөр үчүн - демпотенттик ачкычтар жана айкын статустар.
thundering herd коргоо: кэш-локи, SWR, жергиликтүү семафор.
Аспаптар жана үлгүлөр
k6 (script, open-model, жакшы отчеттор), Locust (Python-Scripts), Gatling (Scala), JMeter (протоколдордун бир катар).
Протоколдор: HTTP/1. 1/2/3, gRPC, WebSocket, TCP/UDP; Server-push "GET сыяктуу".
Трафиктин генерациясы: генераторлорду горизонталдуу масштабдоо, тармактык тар жерди көзөмөлдөө.
Профилдерди алуу: pprof/async-profiler/ebpf жүктөмдө, OTel жолдору.
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, DD, кэш, тармак, TLS, GC).
2. Профиль → сценарийлер/маршруттар, трафик үлүштөрү, моделдер (ачык/жабык), маалыматтар.
3. Жылытуу → кэш/коннектилер/TLS/интерпретаторлор.
4. Максаттуу интенсивдүүлүккө чейин → этап өсүү.
5. Plato → туруктуу метр жана жолдорду чогултуу.
6. Стресс/төмөндөө → сынык чекитин издөө, авто скейлди көзөмөлдөө.
7. талдоо → корреляция метрика, flamegraph, отчет жана өзгөртүү планы.
8. Репруф → paypline CI (Regression Perf) аркылуу кайталоо.
Натыйжаларды талдоо
ийри "жүк → кечигүү/ката": тизе издеп (capacity).
Breakdown жашыруун: тармак (DNS/TLS/connect), прокси, колдонмо, DD, тышкы чалуулар.
Каныккандык: CPU> 75-85%, GC пауза> p95, I/O-күтүү, тапшырмалар кезеги.
Ийкемдүүлүк: Автоскейлдин жооп убактысы (HPA/KEDA), "муздак баштоо", кэш жылытуу.
Баасы: $/1000 RPS максаттуу SLO менен, жогорку бюджет болжолу.
Инженердик практикалар
Деградациянын көрсөткүчтөрү: "куйруктар" p99, кезектердин өсүшү, хит-ратионун төмөндөшү, ретрансляторлордун аракеттеринин өсүшү.
Эсептешүүлөрдү жокко чыгарыңыз: файлдык дескрипторлордун лимиттери, sysctl, conn-pool, 'reuseport', TLS чынжырлары, OCSP.
BD: индекстер/пландар/кэш суроо, байланыш бассейни, батч-операциялар, өндүрүүчүлөр боюнча backpressure.
Кэш: көлөмү/eviction саясаты, ысык ачкычтар, репликациялар.
Network/edge: HTTP/2/3, resumption ≥ 70%, Brotli, CDN-кэш ачкычы, tiered-cache.
Жүктүн астында байкоо
Метриктер: системалык (CPU/mem/IO), runtime (GC/heap), тармактык (RTT/loss/ECN), L7 (p95/99, 5xx/429), кезек, DD/кэш кластерлери.
Tracks: "куйруктары" (tail-based), белгилөө build-id/канарейка боюнча семплирлөө кирет.
Логи: көлөмүн чектөө менен каталарды топтоо ("үчүнDOSже" лог-пайплайн).
Эксперименттер: feature-flags жана конфиги отчетто белгилениши керек.
Автоматташтыруу жана CI/CD
Perf-jobs CI (smoke 3-5 мин, nightly 30-60 мин, weekly soak).
Кирүү чектери: жашыруун/каталар/ресурстар → регрессия учурунда "билд сындырат".
Артефакттар: графиктер, flamegraphs, профилдер, JSON отчеттору (k6/jtl).
Маалыматтарды жана сценарийлерди версиялоо, перф-сценарийлердин PR-ревю.
iGaming/Fintech үчүн өзгөчөлүктөрү
Турнир/дан: spike + plateau; жылытуу TLS/DNS/CDN, жогорулаган бассейн чеги, боттор үчүн "боз" маршруттар.
Төлөмдөр/PSP: sandbox-лимиттер, демпотенттик, катуу таймауттар; degrade-mode текшерүү (маалымдама кэш, кезек).
Jackpots/иш-чаралар: атомдук жана ырааттуулук, дубль жок, RNG/leadboard боюнча жүк.
Антифрод/AML: эрежелерге жүктөө/ML-эсеби, backpressure, окуялардын дедупликациясы.
Жөнгө салуучу: чокуларда метриканы жана версияларды логикалоо, аудит үчүн отчеттор.
Чек тизмеси ишке киргизүү
- жазылган SLO/SLI жана "кызыл сызыктар" (ката/жашыруун/каныккандык).
- Сценарийлер жана жүктөө профилдери бекитилген (open/closed, spike/soak/stress).
- Маалыматтар реалдуу, PII жашырылган, интеграция - sandbox/mock.
- Көрүү даяр: метрика/соода/логи, релиз теги.
- Config системалары (ulimit/sysctl/pools) документтештирилген.
- Авто скейлинг/жылытуу кэш планы жана rollback критерийлери.
- Чек ара жана байланыш командаларынын планы (on-call).
- Отчеттук шаблон (графиктер, корутундулар, иш-аракеттер) даярдалган.
Типтүү каталар
Сыноо closed-модель "жашыл" натыйжасын берет, жана продукт түшүп (Open-моделин эске албайт).
Репрезентативдик эмес маалыматтар (бир валюта/бир провайдер) → жалган корутундулар.
нөл даярдоо: муздак кэш/TLS/коннектилер → баштоо боюнча жогорулатылган жашыруун.
чектери жок Retrais → бороон жана каскаддык күзүндө.
Бардык кызматтар үчүн бирдей профилдер → чыныгы "ысык чекиттерди" өткөрүп жиберүү.
Жок soak-прогондор → эстутум агуусу жана дрейф көрүнбөйт.
Ачык эмес натыйжалар: эч кандай трасса/флеймграфтар → тар жерди локалдаштыруу мүмкүн эмес.
Mini Playbook
Максималдуу өткөрүү жөндөмдүүлүгүн аныктоо (breakpoint)
1. 10-20% ар бир 5-10 мүнөт жүктөө баскычтары. 2) p95 кескин өсүп жана каталар> SLO. 3) CPU/DB/кэш профилдерин алып салуу. 4) Оптималдаштыруу планы жана кайталоо.
Бороон-чапкындарды ооздуктоо
1. retry-budget чектөө жана backoff + jitter күйгүзүү. 2) request-collapsing/SWR киргизүү. 3) "Деград-режимге" уруксат берүү (чектелген функционалдык). 4) Демпотенттикти кайра текшерүү.
Пик-ивент (турнир) - алдын ала план
1. CDN/DNS/TLS/пулдарды жылытуу. 2) HPA максаттуу жогорулатуу, камдык даярдоо. 3) боттор үчүн өзүнчө rate-лимиттер. 4) Dashbord "пик-режими", on-call байланыш көпүрө.
Soak Night
1. 8-12 саат туруктуу жүктөө. 2) Мониторинг heap/FD/conn/GC-pauses. 3) Delta p95 жана hit-ratio салыштыруу. 4) агып жана дрейф чечүү.
Жыйынтык
Жүк тестирлөө - бул "RPS үчүн жарыш" эмес, инженердик чечимдерди кабыл алуу процесси. Чыныгы профилдерди (өзгөчө ачык модель) моделдөө, SLOну бекитүү, метрикаларды жана жолдорду алып салуу, өндүрүмдүүлүктүн тизесин издөө жана өндүрүмдүүлүктүн баасын эсептөө. Автоматташтырылган прогондор, анти-бороон retrains кармап жана жогорку иш-чараларды пландаштырып - платформа абдан оор учурларда алдын ала жана туруктуу болот.