Туруктуулукту тестирлөө
1) Негизги түшүнүктөр жана максаттар
Ишенимдүүлүк - иштөө жөндөмдүүлүгүнүн ыктымалдыгы; туруктуулук (resilience) - ката учурунда жана кийин жүрүм-туруму.
SLO/жаңылыш бюджет: деградациянын "алгылыктуулугунун" критерийлери.
Steady-state hypothesis: туруктуу метриктер расмий күтүү (мисалы, p95 <200 ms, error rate <0. 5%). эксперимент гипотеза сакталган болсо, ийгиликтүү болуп эсептелет.
Үзгүлтүктөрдүн түрлөрү: тармактык (латенттүүлүк, жоготуулар/дубль, ажырымдар), эсептөө (CPU, эс тутум), сторидж (I/O, дисктин түгөнүшү), көз карандылык (5xx, timeouts, rate-limit), логикалык (жарым-жартылай инциденттер, "жай деградация"), операциялык (релиз, релиз)), "караңгы" (split-brain, сааттык сменалар).
2) Туруктуулук пирамидасы
1. логиканын Unit сыноолордун ийгиликсиз (Retray, idempotentity, тайм).
2. fault-inject адаптерлер менен компоненттүү (Testcontainers/tc-netem).
3. Тармак/DD/кэш жана реалдуу дүйнө профилдери менен интеграцияланган/системалуу.
4. pre-prod башаламандык эксперименттер (жана андан кийин runbook менен чектелген).
5. Гейм-дей - команда (адамдар + аспаптар).
3) негизги катары байкоо
SLI: жашыруун p50/p95/p99, error rate, saturation (CPU/heap/FD/IOPS), drop/timeout, queue depth.
Tracking: издөө үчүн "тар" баш тартуу.
Семантикалык туруктуулук метрикасы: ийгиликтүү graceful-degrade үлүшү, shed-суроо үлүшү, өзүн-өзү калыбына келтирүү ылдамдыгы (MTTR).
эксперименттер белгилөө: 'chaos. experiment_id', 'phase = inject/recover'.
4) Injection ката каталогу (faults)
Тармак: кечигүү/JITS, жоготуу/кайталоо/recordering, кубаттуулугун чектөө, пакеттик "бороон-чапкын", TLS-жарака.
Хост: CPU чектөө, агып/эс чектери, GC тыныгуу, дескриптордун түгөнүшү, "clock skew".
Сактоо: латенттүүлүктүн өсүшү, EROFS, ENOSPC, репликанын начарлашы, лидерди жоготуу.
Көз карандылык: 5xx/429, жайлоо, DNS, эскирген күбөлүктөр, rate-limit, "жарым-жартылай жооптор".
Маалыматтар: жазуунун бузулушу, агымдардагы "тешиктер", окуялар, версиялардын чыр-чатактары.
Операциялар: ийгиликсиз релиз, фича-желек, -дрейф, кол ката (симуляциянын алкагында).
5) Туруктуулук үлгүлөрү (эмне текшерүү)
Ар бир RPC боюнча Jitter жана тайм менен Retray.
Circuit Breaker (ачуу/жарым ачуу, экспоненциалдык калыбына келтирүү).
Bulkheads (критикалык домендердин көлмө/кезек изоляция).
Load Shedding (каныкканда төмөнкү артыкчылыктуу суроо-талаптарды жокко чыгаруу).
Backpressure (чынжыр боюнча сигналдар, параллелизм чектери).
Idempotency ("терс таасирлери" боюнча жол ачкычтары).
Башат деградацияланган учурда кэш жана стаб.
Graceful Degradation (жеңил жооптор, stale-маалыматтар, өчүрүү fich).
Timeout-budget (чалуулар тизмеги боюнча жалпы убакыт бюджети).
атомдук/ордун толтуруу (Saga/Outbox/Transactional Inbox).
Кворумдар жана репликация (R/W кворумдары, жеткиликтүүлүк үчүн консистенттүүлүктүн бузулушу).
Анти-entropy/реплика ("тешик" окуялар калыбына келтирүү).
6) Инъекция жана күтүү Recipes (psevdocode)
Життер жана брейкер менен Retray
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()
Shading жана Backpresher
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 "Жай көз карандылык"
Injection: + 400 ms p95 тышкы API.
Күтүү: X% ≤ убакыттын өсүшү, брейкердин ачылышы, fallback жооптору, p99 кызматын сактоо <SLA, ретраддарда каскаддын жоктугу.
7. 2 "Жарым-жартылай кэш жоготуу"
Инъекция: Redis түйүндөрүнүн 50 %/Кэш-шарда.
Күтүү: чоңойтулган мисс, бирок анын келип чыгышына көчкү жок (request coalescing/immutable TTL), авто жылытуу жана калыбына келтирүү.
7. 3 "DD Split-brain"
Инъекция: лидерди жоготуу, репликага өтүү.
күтүү: кыска мөөнөттүү deny жазуулар, Биз кворумдан окуп, маалыматтарды жоготуу жок, Outbox билдирүүлөрдү жоготпойт.
7. 4 "ENOSPC/диск толгон"
Инъекция: 95-100% диск.
Күтүү: шашылыш ийне айлануу, сынчыл журналдар (WAL), Алерта жана Autolicvides, кулпу жок ийгиликсиз.
7. 5 "Бурст жол"
Injection: × 3 RPS ысык 10 мүнөт.
Күтүү: төмөн артыкчылыктуу shading, туруктуу p95 "ядролук" жолдордо, чек ичинде кезек өсүшү, DLQ-бороон жок.
7. 6 «Clock Skew»
Injection: +/ − 2 мүнөт ноддор убакыт жылышы.
Күтүү: Туура TTL/кол тамгалар (leeway), ретрадагы монотондук таймерлер, жол берилген дрейфте валиддик токендер.
8) Чөйрө жана коопсуздук эксперименттер
pre-prod, синтетикалык маалыматтар, мүмкүн болушунча жакын config/топология менен башталат.
Продада - бир гана контролдонуучу терезелер, фича-желектер, кадам амплитудасы, авто-артка кайтуу, "кызыл баскычы".
Guardrails: RPS/ката чектери, SLO күзөтчүлөр, оор окуялар учурунда релиздерди бөгөт коюу.
Runbook милдеттүү: кантип тебүү керек, кимге чакыруу керек, кайда көрүү керек.
9) Automation жана CI/CD
Код катары эксперименттердин каталогу (YAML/DSL): максаттар, инъекциялар, метриктер, босоголор, "баскычтар" кайтаруу.
Smoke-chaos ар бир релизинде: кыска инъекциялар (мисалы, 2 мин + 200 ms көз карандылыкка).
Түнкү жүрүү матрицалары: кызмат көрсөтүүлөр × мүчүлүштүктөрдүн түрлөрү.
Gate Release: Эгерде туруктуулук босогодон төмөн болсо, деплойго тыюу салуу (мисалы, 'fallback coverage <95%' "жай көз карандылык" астында).
10) Маалыматтар жана консистенттүүлүк
Компенсацияларды текшериңиз (Saga): жарым-жартылай аткарылган операциялар макулдашылган абалга жеткирилиши керек.
сыноо кайталоо/иш-чаралардын дубль, out-of-order жеткирүү, "тешиктер" жана реплика.
Домендик инварианттарды мүчүлүштүктөрдөн кийин текшериңиз: баланс терс эмес, транзакциялар "тыгылып калбайт", лимиттер бузулбайт.
11) Анти-үлгүлөрү
сыноо гана бактылуу-жол жана эч кандай ийгиликсиз жүк.
Життерсиз ретрайлер → бузулган бороон.
Дүйнөлүк таймаут бюджетинин жоктугу → каскаддык таймауттар.
Бардык тапшырмалар үчүн бирдиктүү бассейн → изоляциянын жоктугу (bulkheads).
"Чексиз" кезек → жашыруун өсүш/МКБ.
нөл телеметрия эксперименттер → "сокур" башаламандык-практикасы.
Кайтарымсыз/лимиттерсиз/жооптуу ээсинин тукумундагы башаламандык.
12) Архитектордун чек тизмеси
1. Туруктуу мамлекеттик гипотеза жана SLO аныкталган?
2. Ар бир RPC бир тайм бар, Життер менен Retrais, брейкер?
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"
Корутунду
Туруктуулукту тестирлөө - бул "башаламандык менен айла-амал" эмес, системаны мүчүлүштүктөр алдында алдын ала айтууга боло турган тартип. Так гипотезалар, телеметрия, башкарылуучу эксперименттердин каталогу жана архитектурага орнотулган үлгүлөр (таймауттар, брейкерлер, изоляция, идемпотенттүүлүк) потенциалдуу инциденттерди башкарылуучу сценарийлерге айландырат. Команда релиздерге ишеним алат, ал эми колдонуучулар - ийгиликсиз шарттарда да туруктуу кызмат.