GH GambleHub

Тұрақтылықты тестілеу

1) Базалық ұғымдар мен мақсаттар

Сенімділік (reliability) - жұмысқа қабілеттілік ықтималдығы; тұрақтылық (resilience) - істен шығу кезіндегі және одан кейінгі мінез-құлық.
SLO/қате бюджет: деградацияның «қолайлылық» критерийлері.
Steady-state hypothesis: тұрақты метриктерді ресми күту (мысалы, p95 <200 мс) error rate <0. 5%). Егер гипотеза сақталса, эксперимент сәтті болып саналады.
Істен шығу түрлері: желілік (жасырындылық, жоғалту/дубль, үзіліс), есептеу (CPU, жады), сторидж (I/O, дискінің таусылуы), тәуелділік (5xx, timeouts, rate-limit), логикалық (ішінара инциденттер, «баяу деградация»), операциялық (релиз, эпизод)), «қараңғы» (split-brain, сағаттық ауысымдар).

2) Орнықтылық пирамидасы

1. Логика істен шығуының юнит-тестілері (ретрайлер, идемпотенттілік, таймауттар).
2. fault-inject адаптері бар компоненттік (Testcontainers/tc-netem).
3. Желімен/ДҚ/кэштермен және real-world профильдерімен интеграциялық/жүйелік.
4. Runbook бойынша pre-prod-дағы (содан кейін сынамада шектелген) хаос-эксперименттер.
5. Гейм-дей - команданың сценарийлік жаттығулары (адамдар + құралдар).

3) Негізгі ретінде бақылау

SLI: латенттілік p50/p95/p99, error rate, saturation (CPU/heap/FD/IOPS), drop/timeout, queue depth.
Трассировкалар: істен шыққан «тар жерлерді» іздеу үшін.
Орнықтылықтың семантикалық метрикасы: табысты graceful-degrade үлесі, shed-сұрау үлесі, өзін-өзі қалпына келтіру жылдамдығы (MTTR).
Эксперименттерді таңбалау: 'chaos. experiment_id', 'phase = inject/recover' оқиғаларда/логдарда.

4) Бас тарту инъекцияларының каталогы (faults)

Желі: кідіріс/джиттер, жоғалту/телнұсқалар/реордеринг, өткізу қабілетінің шектелуі, пакеттік «дауылдар», TLS-үзіктер.
Хост: CPU шектеуі, есте сақтау/сақтау шектері, GC үзілістері, дескрипторлардың таусылуы, «clock skew».
Сақтау орны: жасырындылықтың өсуі, EROFS, ENOSPC, репликаның нашарлауы, көшбасшыны жоғалту.
Тәуелділік: 5xx/429, баяулау, DNS флаппингі, ескірген сертификаттар, rate-limit, «ішінара жауаптар».
Деректер: жазбаның зақымдалуы, ағындардағы «тесіктер», оқиғалар дублдері, нұсқа қайшылықтары.
Операциялар: сәтсіз босату, фича-жалау, -дрейф, қол қатесі (симуляция шеңберінде).

5) Орнықтылық паттерндері (не тексеру керек)

Әрбір RPC-дегі джиттермен ретрайлер және таймауттар.
Circuit Breaker (ашу/жартылай ашу, экспоненциалды қалпына келтіру).
Bulkheads (сыни домендерге пулдарды/кезектерді оқшаулау).
Load Shedding (қаныққан кезде төмен басымдықты сұрауларды тастаймыз).
Backpressure (тізбек бойынша жоғары дабылдар, параллелизм лимиттері).
Idempotency («жанама әсерлердегі» ұқсастық кілттері).
Көздің деградациясы жағдайына кеширлеу және стаб.
Graceful Degradation (жеңілдетілген жауаптар, stale-деректер, фич өшіру).
Timeout-budget (шақырулар тізбегі бойынша жалпы уақыт бюджеті).
Атомарлық/өтемақы (Saga/Outbox/Transactional Inbox).
Кворумдар және репликация (R/W кворумдар, қол жетімділік үшін консистенттіліктің тозуы).
Anti-entropy/реплика (оқиғаның «тесігі» кезінде қалпына келтіру).

6) Инъекциялар мен күтулердің рецептілері (жалған құжат)

Джиттермен және брейкермен ретрай


for attempt in 1..N:
if breaker. open(): return fallback()
res = call(dep, timeout = base 0. 8)
if res. ok: return res sleep(exp_backoff(attempt) jitter(0. 5..1. 5))
if attempt == N: breaker. trip()
return fallback()

Шейдинг және бэкпресер


if queue. depth() > HIGH          cpu. load() > 0. 85:
if request. priority < HIGH: return 503_SHED limiter. acquire () # constrain concurrency

key = hash("payout:"+external_id)
if store. exists(key): return store. get(key)
result = do_side_effect()
store. put(key, result, ttl=30d)
return result

7) Эксперименттер: сценарийлер мен гипотезалар

7. 1 «Баяу тәуелділік»

Инъекция: сыртқы API-ге + 400 мс p95.
Күту: таймауттардың өсуі ≤ X%, брейкердің ашылуы, fallback-жауаптар, p99 <SLA сервисін сақтау, ретрациялар кезінде каскадтың болмауы.

7. 2 «Кэшті ішінара жоғалту»

Инъекция: 50% Redis/Кеш-шарда түйіндерінің істен шығуы.
Күту: ұлғайған miss, бірақ негізге көшкінсіз (request coalescing/иммутабельді TTL), авто жылыту және қалпына келтіру.

7. 3 «БД Split-brain»

Инъекция: көшбасшыдан айрылу, репликаға ауысу.
Күту: қысқа мерзімді deny жазбалар, кворумнан оқу, деректерді жоғалтпау, Outbox хабарларды жоғалтпайды.

7. 4 «ENOSPC/диск толтырылған»

Инъекция: 95-100% дискі.
Күту: логтардың авариялық ротациялары, блоктамайтын фичтердің істен шығуы, сыни журналдардың (WAL), алерталар мен автоликвидтердің сақталуы.

7. 5 «Трафиктің бурсты»

Инъекция: ыстық эндпоинтке 3 RPS × 10 мин.
Күту: төмен басымдықты шейдинг, «ядролық» жолдарда тұрақты p95, лимиттер шегінде кезектердің өсуі, DLQ-дауылдардың болмауы.

7. 6 «Clock Skew»

Инъекция: нод уақытын +/ − 2 минутқа ауыстыру.
Күту: дұрыс TTL/қолтаңбалар (leeway), ретрадағы монотонды таймерлер, жол берілетін дрейфте валидті токендер.

8) Эксперименттердің ортасы және қауіпсіздігі

pre-prod, синтетикалық деректерден бастаңыз, өнімге барынша жақын конфига/топология.
Сынамада - тек бақыланатын терезелер, фича-жалаулар, қадамдық амплитуда, авто-кері қайту, «қызыл түйме».
Guardrails: RPS/қателер лимиттері, SLO күзетшілері, сыни оқиғалар кезінде релиздерді бұғаттау.
Runbook міндетті: қалай сырғыту керек, кімді шақыру керек, қайда қарау керек.

9) Автоматтандыру және CI/CD

Эксперимент каталогы код ретінде (YAML/DSL): мақсаттар, инъекциялар, метриктер, табалдырықтар, қайтару «түймелері».
Әрбір релизде Smoke-chaos: стейждегі қысқа инъекциялар (мысалы, тәуелділікке 2 мин + 200 мс).
Матрицаның түнгі прогондары: сервистер × істен шығу түрлері.
Гейт: егер тұрақтылық шектен төмен болса, деплояға тыйым салу (мысалы, 'fallback coverage <95%' «баяу тәуелділікпен»).

10) Деректер және консистенттілік

Өтемақыны (Saga) тексеріңіз: ішінара орындалған операциялар келісілген күйге дейін жеткізілуі тиіс.
Қайталауларды/оқиғаларды, out-of-order жеткізуді, «тесіктерді» және репликаларды тестілеңіз.
Ақаулардан кейін домен инварианттарын тексеріңіз: теңгерім теріс емес, транзакциялар «тұрып қалмайды», лимиттер бұзылмаған.

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

Тек happy-path және жүктемені істен шықпай тестілеу.
Джиттерсіз ретрациялар → тозған дауыл.
Жаһандық таймаут-бюджеттің жоқтығы → каскадты таймауттар.
Барлық тапсырмалар үшін бірыңғай пул → оқшаулаудың болмауы (bulkheads).
«Шексіз» кезектер → жасырындылықтың өсуі/БШҰ.
Эксперименттердің нөлдік телеметриясы → «соқыр» хаос-практикалар.
Жауапты иесiз/лимитсiз/өнiмдегi хаос.

12) Сәулетшінің чек-парағы

1. steady-state гипотезасы мен SLO анықталды ма?
2. Әрбір RPC-де таймауттар, джиттермен ретрациялар, брейкерлер бар ма?
3. Іске асырылды bulkheads, лимитерлер, backpressure, load-shedding?
4. Кэш төзімді: coalescing, кэш дауылдан қорғау, жылыту?
5. Жанама әсерлер үшін Outbox/Saga, іспеттес кілттер?
6. Кворумдар/репликация/фейловер тестіленді ме?
7. Эксперименттер каталогы, түнгі хаос және CI/CD гейтс бар ма?
8. Өлшемдер/трассировкалар эксперименттерді белгілейді, дашбордтар бар ма?
9. Runbook 'және «қызыл түймешік» дайын, жауапкершілік тағайындалды ма?
10. Dev/SRE/Support қатысуымен тұрақты ойындар?

13) Шағын құралдар және сценарий мысалдары (YAML-скетч)

Желі (tc/netem)

yaml experiment: add-latency target: svc:payments inject:
netem:
delay_ms: 300 jitter_ms: 50 loss: 2%
duration: 10m guardrails:
error_rate: "< 1%"
p95_latency: "< 400ms"

CPU/Heap

yaml inject:
cpu_burn: { cores: 2, duration: 5m }
heap_fill: { mb: 512 }

Тәуелділік

yaml inject:
dependency:
name: currency-api mode: slow p95_add_ms: 500 fallback_expectation: "serve stale rates ≤ 15m old"

Қорытынды

Тұрақтылықты тестілеу - «хаостың амалын» емес, жүйені ақаулардың алдын ала болжауға болатын тәртіп. Нақты гипотезалар, телеметрия, басқарылатын эксперименттер каталогы және архитектураға кіріктірілген паттерндер (таймауттар, брейкерлер, оқшаулау, идемпотенттілік) әлеуетті тосын оқиғаларды бақыланатын сценарийлерге айналдырады. Команда релиздерге сенімділік алады, ал пайдаланушылар істен шыққан жағдайда да тұрақты қызмет көрсетеді.

Contact

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

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

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

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

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

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