GH GambleHub

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.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.