Dayanıqlıq testi
1) Əsas anlayışlar və məqsədlər
Etibarlılıq (reliability) - işləmə ehtimalı; sabitlik (resilience) - uğursuzluq zamanı və sonra davranış.
SLO/səhv büdcə: deqradasiyanın «məqbul» meyarları.
Steady-state hipotezis: sabit metriklərin formal gözlənilməsi (məsələn, p95 <200 ms, error rate <0. 5%). Hipotez davam edərsə, təcrübə uğurlu hesab olunur.
Uğursuzluq növləri: şəbəkə (latentlik, itkilər/dubllar, boşluqlar), hesablama (CPU, yaddaş), hekayə (I/O, disk tükənməsi), asılılıqlar (5xx, timeouts, rate-limit), məntiqi (qismən insidentlər, «yavaş deqradasiya»), əməliyyat (reliz, ), «qaranlıq» (split-brain, saat növbələri).
2) Davamlı piramida
1. Vahid məntiq uğursuzluq testləri (retralar, idempotentlik, taymautlar).
2. fault-inject adapterləri ilə komponent (Testcontainers/tc-netem).
3. Şəbəkə/DB/caches və real-world profilləri ilə inteqrasiya/sistem.
4. Runbook pre-prod (və sonra prod məhdud) xaos təcrübələr.
5. Oyun-gün - komandanın ssenari təlimləri (insanlar + alətlər).
3) Əsas kimi müşahidə
SLI: gecikmə p50/p95/p99, error rate, saturation (CPU/heap/FD/IOPS), drop/timeout, queue depth.
Tracking: uğursuzluq altında «dar yerlər» axtarmaq üçün.
Semantik sabitlik metrikası: uğurlu graceful-degrade payı, shed-sorğuların payı, özünü bərpa sürəti (MTTR).
Təcrübələrin etiketlənməsi: 'chaos. experiment_id', 'phase = inject/recover'.
4) Uğursuzluq inyeksiya kataloqu (faults)
Şəbəkə: gecikmə/jitter, itki/dublikat/recordering, bant genişliyi məhdudiyyəti, paket «fırtınalar», TLS qırılmaları.
Host: CPU məhdudiyyəti, sızma/yaddaş limitləri, GC fasilələri, deskriptorların tükənməsi, «clock skew».
Saxlama: gecikmə artımı, EROFS, ENOSPC, replika deqradasiyası, lider itkisi.
Asılılıqlar: 5xx/429, yavaşlama, DNS flapping, köhnəlmiş sertifikatlar, rate-limit, «qismən cavablar».
Verilənlər: yazıya ziyan vurma, axınlarda «deşiklər», hadisələrin dublları, versiya münaqişələri.
Əməliyyatlar: uğursuz buraxılış, fiça bayrağı, sürüklənmə, əl səhvləri (simulyasiya çərçivəsində).
5) Dayanıqlılıq nümunələri (nə yoxlanılır)
Hər RPC-də jitter və taymaut ilə retrailer.
Circuit Breaker (açılış/yarı açılış, eksponensial bərpa).
Bulkheads (kritik domenlər üçün hovuz/növbə izolyasiyası).
Load Shedding (doyma zamanı aşağı prioritet sorğuları sıfırlayın).
Backpressure (zəncir yuxarı siqnallar, paralellik limitləri).
Idempotency («yan təsirlərdə» idempotentlik açarları).
Mənbəyin deqradasiyası halında caching və stabs.
Graceful Degradation (yüngül cavablar, stale-data, phic off).
Timeout-budget (zəng zənciri üzrə ümumi vaxt büdcəsi).
Atom/kompensasiya (Saga/Outbox/Transactional Inbox).
Kvorumlar və replikasiya (R/W kvorumları, mövcudluq naminə konsistentliyin deqradasiyası).
Anti-entropy/replay (hadisələrin «dəlikləri» zamanı bərpa).
6) Enjeksiyon və gözləntilər üçün reseptlər (psevdokod)
Jitter və breyker ilə 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 və Backpresher
if queue. depth() > HIGH cpu. load() > 0. 85:
if request. priority < HIGH: return 503_SHED limiter. acquire () # constrain concurrency
İdempotentlik
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) Təcrübələr: ssenarilər və fərziyyələr
7. 1 «Yavaş asılılıq»
Enjeksiyon: + 400 ms p95 xarici API.
Gözləmə: X% ≤ vaxt artımı, breyker açılması, fallback cavabları, p99 <SLA xidmətinin saxlanması, retrajlar zamanı kaskadın olmaması.
7. 2 «Qismən cache itkisi»
Enjeksiyon: Redis/Cash-shard düyünlərinin 50% -ni itirir.
Gözləmə: artan miss, lakin mənbəyə uçqun olmadan (request coalescing/immutable TTL), avtomatik istiləşmə və bərpa.
7. 3 «DB-də Split-brain»
Enjeksiyon: lider itkisi, replikaya keçid.
Gözləmə: qısamüddətli deny qeydlər, kvorum oxumaq, məlumat itkisi yoxdur, Outbox mesajları itirmir.
7. 4 «ENOSPC/disk dolu»
Enjeksiyon: 95-100% disk.
Gözləmə: Təcili log rotasiyaları, bloklanmayan fiqurların iflası, kritik jurnalların təhlükəsizliyi (WAL), alertlər və avtolikvidlər.
7. 5 «Burst Trafik»
Enjeksiyon: 10 dəqiqə isti end nöqtəsinə 3 RPS ×.
Gözləmə: aşağı prioritet, sabit p95 «nüvə» yolları, limitlər daxilində növbələrin artması, DLQ fırtınalarının olmaması.
7. 6 «Clock Skew»
Enjeksiyon: +/ − 2 dəq.
Gözləmə: düzgün TTL/imzalar (leeway), retralarda monotonik zamanlayıcılar, icazə verilən sürüklənmə zamanı valid tokenlər.
8) Mühit və təhlükəsizlik təcrübələri
Pre-prod, sintetik məlumatlar, məhsula mümkün qədər yaxın konfiqa/topologiya ilə başlayın.
Prodda - yalnız nəzarət olunan pəncərələr, fiça bayraqları, addım-addım amplituda, avtomatik geri dönüş, «qırmızı düymə».
Guardrails: RPS/səhv limitləri, SLO mühafizəçiləri, kritik hadisələr zamanı relizlərin bloklanması.
Runbook tələb olunur: necə yuvarlanmaq, kimə zəng etmək, harada baxmaq.
9) Avtomatlaşdırma və CI/CD
Kod kimi eksperimentlər kataloqu (YAML/DSL): hədəflər, enjeksiyonlar, metriklər, eşiklər, geri qaytarma «düymələri».
Smoke-chaos hər buraxılışda: qısa enjeksiyonlar (məsələn, 2 dəq + 200 ms asılılıq).
Matrisin gecə qaçışları: xidmətlər × nasazlıq növləri.
Buraxılış qapısı: davamlılıq həddindən aşağıdırsa deploinin qadağan edilməsi (məsələn, «yavaş asılılıq» altında 'fallback coverage <95%').
10) Məlumatlar və uyğunluq
Kompensasiyanı (Saga) yoxlayın: qismən yerinə yetirilən əməliyyatlar razılaşdırılmış vəziyyətə gətirilməlidir.
Hadisələrin təkrarlarını/dubllarını, out-of-order çatdırılmasını, «dəliklərini» və replikalarını sınayın.
Uğursuzluqlardan sonra domen invariantlarını yoxlayın: balans mənfi deyil, əməliyyatlar «ilişmir», limitlər pozulmur.
11) Anti-nümunələr
Yalnız happy-path və nasazlıqlar olmadan yük test edin.
Jittersiz retrailer → deqradasiya altında fırtına.
Qlobal taymaut büdcəsinin olmaması → kaskad taymautları.
Bütün məsələlər üçün vahid hovuz → izolyasiyanın olmaması (bulkheads).
«Sonsuz» növbələr → gecikmə artımı/MTM.
Sıfır telemetri eksperimentləri → «kor» xaos təcrübələri.
Geri qaytarılmadan/limitsiz/məsuliyyətli sahiblə birlikdə xaos.
12) Memarın yoxlama siyahısı
1. müəyyən steady-state hipotezi və SLO?
2. Hər RPC-də vaxtlar, jitter retrausları, brakerlər varmı?
3. Satılır bulkheads, limiters, backpressure, load-shedding?
4. Cache davamlı: coalescing, cache fırtına qorunması, istilik?
5. Yan təsirlər üçün Outbox/Saga, idempotent açarları?
6. Kvorumlar/replikasiya/feylover sınaqdan keçirildi?
7. CI/CD-də təcrübələr, nightly xaos və geytalar kataloqu var?
8. Metrik/izləmə təcrübələri qeyd edir, daşbordlar varmı?
9. Runbook 'və «qırmızı düyməsi» hazırdır, məsuliyyət təyin?
10. Dev/SRE/Support ilə müntəzəm oyun?
13) Mini alətlər və ssenari nümunələri (YAML eskizləri)
Şəbəkə (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 }
Asılılıq
yaml inject:
dependency:
name: currency-api mode: slow p95_add_ms: 500 fallback_expectation: "serve stale rates ≤ 15m old"
Nəticə
Sabitlik testi «xaos hiyləsi» deyil, sistemi uğursuzluqlar altında proqnozlaşdırıla bilən bir nizam-intizamdır. Aydın fərziyyələr, telemetriya, idarə olunan təcrübələr kataloqu və memarlığa daxil edilmiş nümunələr (taymaut, breaker, təcrid, idempotent) potensial hadisələri nəzarət olunan ssenarilərə çevirir. Komanda buraxılışlara inam qazanır, istifadəçilər isə uğursuzluq şəraitində belə sabit xidmət əldə edirlər.