GH GambleHub

Жүктемелік тестілеу және стресс

Жүктемелік тестілеу және стресс

1) Бұл не үшін қажет

Мақсаттары:
  • Сыйымдылықты растау (SLO берілген кезде жүйе қанша RPS/бәсекелес сессияны көтереді).
  • Шөлмек мойындарын табу (CPU/IO/DD/желілер/блоктау/пулдар).
  • CI/CD көрініс бюджеттері мен «гейттерді» баптау.
  • Релиздер тәуекелін төмендету (регрессия p95/p99, пик кезінде қателердің өсуі).
  • Сыйымдылықты/құнды жоспарлау (скейл-аут және резервтер).

2) Перф-тесттердің түрлері

Load (жұмыс жүктемесі): шыңға жақын шынайы трафик; SLO валидациясы.
Стресс (стресс): шектен жоғары/дейін өсу → бұзылған кездегі мінез-құлық.
Spike (импульс): жүктеменің тез секіруі → икемділік/автоскейл.
Soak/Endurance (ұзақ): сағат/тәулік → ағып кету, фрагментация, latency дрейфі.
Capacity/Scalability: scale-out кезінде throughput/latency қалай өзгереді; Амдал/Густафсон заңы.
Smoke perf: әрбір релизде қысқа «түтінді» жүгіру (спектакль-санитарлар).


3) Трафикті генерациялау модельдері

Жабық модель (fixed VUs/concurrency): 'N' пайдаланушылар, әрқайсысы сұрау салады → клиентке кезек. Артық жүктемені жасыру қаупі.
Ашық модель (arrival rate): нақты өмірдегі сияқты λ қарқындылығымен (req/s) өтінімдер ағыны. Көпшілік API үшін дұрыс.

Литтл заңы: 'L = λ × W'.
Пул/сервис үшін: ең аз параллелизм ≈ 'λ × W' (қордың 20-50% қосыңыз).
Мұнда 'λ' - throughput, 'W' - орташа қызмет көрсету уақыты.


4) Жүктеме профильдері және сценарийлер

User journey mix: сценарий үлестері (login, browse, deposit, checkout...).
Think-time: пайдаланушының үзілісі (бөлу: экспоненциалдық/логнормалдық).
Data profile: жауап өлшемі, payload, параметрлердің вариативтілігі.
Корреляция: қадамдарды (cookie/токендер/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: 5хх/4хх/домендік қателердің үлесі.
Saturation: CPU, load avg, GC, дискілік IOps/жасырындылық, network, pool wait.
Бизнес-SLI: 5s ≤ депозитінің табысы, 2s ≤ тапсырысты растау.

Шекті мәндерді SLO-дан алыңыз (мысалы, "99. 95% ≤ 300 ms"), айдап өту кезінде burn-rate-ті бақылаңыз.


7) Тар жерлерді іздеу (әдістеме)

1. Жүйені мақсатты жүктеменің 60-80% -ға тұрақты жылытыңыз.
2. (ramp) → p95/p99 және error-rate өсетін жерді белгілеңіз.

3. p99 жарылыстарын келесімен салыстыру:
  • пулдағы кезектермен (DB/HTTP),
  • WAIT/lock (ДБ) өсуімен
  • GC-үзілістер/heap,
  • желілік retransmits/packet loss,
  • дискілік латенттілік/кэш-қателер.
  • 4. Мыналарды оқшаулаңыз: сұрау жолы бойынша бинарлық іздеу, профильдер (CPU/alloc/lock-profile).
  • 5. «Бөтелкені» бекітіңіз → тюнинг → қайталау.

8) Стресстегі мінез-құлық

Graceful degradation: лимиттер, circuit-breakers, backpressure кезектері, «өңдеуге қабылданды» режимі.
Ретраялар: ең көп дегенде 1, тек демпотентті; джиттер; ретрайлардың бюджеті RPS-тен 10% ≤.
Fail-open/Fail-closed: сыни емес тәуелділіктер үшін fail-open (кэш/бітеуіштер) рұқсат етіңіз.
Cascading failure: пулдарды/квоталарды оқшаулау (bulkhead), жылдам таймауттар, функцияларды «бірқалыпты» ажырату (feature flags).


9) Құралдар (тапсырманы таңдау)

k6 (JavaScript, ашық/ашық-модель, жылдам, CI үшін ыңғайлы).
JMeter (экожүйеге бай, GUI/CLI, плагиндер, бірақ ауыр).
Gatling (Scala DSL, жоғары өнімділік).
Locust (Python, сценарий икемділігі).
Vegeta/hey/wrk (микро-бенчілер және жылдам тексеру).

Ереже: бір «негізгі» құрал + PR-дағы smoke-перф үшін жеңіл CLI.


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-дашбордтар (Rate, Errors, Duration).
Exemplars: метрикадан трассаға өту (trace_id).
Қате логтары: сэмплинг + агрегация, телнұсқалар/сәйкестілік.
Жүйелік: CPU/GC/heap, дискілер/желі, pool wait.
БД: топ-сұраулар, блоктау, индекс-сканерлер, bloat.


13) Автоматтандыру және перформанс-гейттер

CI: табалдырықтармен merge (мысалы, k6 2-3 минут) қысқа аралықтар.
Nightly/Weekly: жеке ортада ұзын soak/стресс; есептер мен трендтер.
Канареялық релиздер: SLO (error-rate, p95) промоушеннің «гейт» ретінде талдау.
Регрессия: baseline vs ағымдағы билд; нашарлаған кездегі аллергия> X%.


14) Сыйымдылықты жоспарлау және құн

throughput → latency қисықтары: knee point (тізе) анықтаңыз - одан кейін p99 күрт өседі.
Скейл-аут: масштабтау тиімділігін өлшеңіз (RPS дельтасы/дельта түйіндері).
Құны: «$/сағатқа RPS», ең жоғары оқиғаларға арналған резерв + DR-резерв.


15) Қарсы үлгілер

Сынаманы бақылаусыз ұру немесе сынамаға ұқсамайтын «бос» ортада тестілеу.
Шамадан тыс жүктемені жасыратын VU тіркелген жабық модель.
think-time/деректердің жоқтығы → кэштің шындыққа жанаспайтын хиттері немесе керісінше - бастапқы деректерге дауыл.
Теңшелетін флоулардың орнына «/ping »скрипті.
Бақылаудың жоқтығы: «тек RPS және орташа кідірісті көреміз».
Бақылаусыз ретрациялар → өзі-DDoS.
Гипотезаларды/өзгерістерді бекітпей қамыр мен оңтайландыруды араластыру.


16) Чек-парақ (0-30 күн)

0-7 күн

SLI/SLO және мақсатты трафик профильдерін (mix, think-time, деректер) анықтаңыз.
Құралды таңдаңыз (k6/JMeter/Locust), RED дашбордтарын көтеріңіз.
Стенд пен seed-деректерді дайындаңыз, бөгде лимиттерді/каптчтарды өшіріңіз.

8-20 күн

Сценарийлер жасаңыз: open-model (arrival rate), суық/жылы/ыстық кэш.
load → stress → spike; knee point және тар жерлерді бекітіңіз.
CI (микро-прогон) бағдарламасына перформанс-гейттерді енгізіңіз.

21-30 күн

Soak-тест 4-24 сағ: ағу/дрейф GC, тұрақтандыру.
Шектерді, сыйымдылық жоспарын, «RPS → p95/қателер» иллюстрацияларын құжаттаңыз.
Runbook бағдарламасын «лимиттерді/скейлді қалай ұлғайтуға» және «деградациялауға» дайындаңыз.


17) Жетілу метрикасы

Трафиктің 80% ≥ қамтитын шынайы профильдер (mix, think-time, деректер) бар.
RED-дашбордтар + трассировка барлық тестілер үшін қосылған.
Перформанс-гейттер р95/қателер регрессиясы кезінде релиздерді бұғаттайды.
Сыйымдылық және knee point негізгі сервистер бойынша құжатталған.
Ай сайынғы soak/stress-прогондар және динамика бойынша есептер.
«spike» -ге төзімділік автоскейлмен және cascade-fail жоқтығымен расталған.


18) Қорытынды

Жүктемелік тестілеу - бұл бір реттік «өлшеу» емес, тұрақты инженерлік практика. Нақты пайдаланушыларды (open-model) моделдеңіз, клиенттің тәжірибесін көрсететін (SLI/SLO) өлшеңіз, бақылау мен «гейттерді» CI/CD-де ұстаңыз, stress/spike/soak-прогондарын жүргізіңіз және knee point-ті белгілеңіз. Сонда ең жоғары оқиғалар мен «қара аққулар» басқарылатын сценарийлерге, ал өнімділік - платформаңыздың болжамды және өлшемді параметріне айналады.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.