GH GambleHub

Stabilite testi

1) Temel kavramlar ve hedefler

Güvenilirlik - performans olasılığı; Esneklik - Bir başarısızlık sırasında ve sonrasında davranış.
SLO/hatalı bütçe: bozulma'kabul edilebilirlik "kriterleri.
Kararlı durum hipotezi: kararlı metriklerin resmi beklentisi (örn. P95 <200 ms, hata oranı <0. 5%). Hipotez sürdürülürse deney başarılı kabul edilir.
Hata türleri: ağ (gecikme, kayıp/kopyalar, kesmeler), hesaplama (CPU, bellek), depolama (I/O, disk tükenmesi), bağımlılıklar (5xx, zaman aşımları, hız sınırı), mantıksal (kısmi olaylar, "yavaş bozulma"), operasyonel (serbest bırakma, yapılandırma), "karanlık" (bölünmüş beyin, saat vardiyaları).

2) Sürdürülebilirlik Piramidi

1. Mantık hatalarının birim testleri (retrays, idempotency, timeouts).
2. Arıza enjeksiyonlu bileşen adaptörleri (Testcontainers/tc-netem).
3. Ağ/veritabanı/önbellekler ve gerçek dünya profilleri ile entegrasyon/sistem.
4. Runbook'larda pre-prod (ve daha sonra prod'da sınırlı) kaos deneyleri.
5. Oyun günü - takımın senaryo egzersizleri (insanlar + araçlar).

3) Temel olarak gözlemlenebilirlik

SLI: p50/p95/p99 gecikme, hata oranı, doygunluk (CPU/heap/FD/IOPS), düşme/zaman aşımı, kuyruk derinliği.
İzler: başarısızlık altında darboğazlar bulmak için.
Anlamsal esneklik ölçümleri: zarif-bozunmuş başarı oranı, dökülme isteği oranı, kendi kendini iyileştirme oranı (MTTR).
Etiketleme deneyleri: "kaos. experiment_id', 'phase = inject/recover' olaylar/günlükler.

4) Arıza enjeksiyon kataloğu

Ağ: gecikme/titreme, kayıp/kopyalar/yeniden sıralama, bant genişliği sınırlaması, patlama fırtınaları, TLS sonları.
Ana bilgisayar: CPU sınırı, bellek sızıntıları/sınırları, GC duraklatır, tanımlayıcı tükenmesi, "saat eğrilmesi".
Depolama: artan gecikme, EROFS, ENOSPC, çoğaltma bozulması, lider kaybı.
Bağımlılıklar: 5xx/429, yavaşlama, DNS çırpma, eski sertifikalar, oran sınırı, "kısmi yanıtlar".
Veri: yazma yolsuzluğu, akışlardaki "delikler", olay kopyaları, sürüm çakışmaları.
İşlemler: başarısız sürüm, özellik bayrağı, yapılandırma sürüklenmesi, manuel hata (simülasyonun bir parçası olarak).

5) Stabilite kalıpları (kontrol edilmesi gerekenler)

Jitter, her RPC'de geri çekilir ve zaman aşımına uğrar.
Devre Kesici (açılış/yarı açılış, üstel kurtarma).
Bulkheads (havuzların/kuyrukların kritik alanlara izolasyonu).
Yük Boşaltma (doygun olduğunda düşük öncelikli istekleri sıfırlayın).
Geri basınç (zincir yukarı sinyaller, eşzamanlılık sınırları).
Idempotency ("yan etkiler" üzerine idempotency tuşları).
Kaynağın bozulması durumunda önbelleğe alma ve yığınlar.
Zarif Bozulma (hafif yanıtlar, eski veriler, devre dışı bırakma özellikleri).
Zaman aşımı-bütçe.
Atomicity/compensation (Saga/Outbox/Transactional Inbox).
Quorum ve çoğaltma (R/W quorum, kullanılabilirlik için tutarlılık bozulması).
Anti-entropi/yeniden oynatma (olay deliklerinden kurtarma).

6) Enjeksiyonlar ve beklentiler için reçeteler (pseudocode)

Jitter ve kırıcı ile 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()

Gölgelendirme ve Backprescher


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

Idempotency


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) Deneyler: Senaryolar ve Hipotezler

7. 1 "Yavaş bağımlılık"

Enjeksiyon: Harici API'ye + 400 ms p95.
Bekleme: zaman aşımı artışı ≤ % X, kırıcı açma, geri dönüş yanıtları, p99 servisini <SLA kaydetme, geri alma sırasında kaskad yok.

7. 2 "Kısmi önbellek kaybı"

Enjeksiyon: Redis/Cache parça düğümlerinin %50'sinin başarısız olması.
Bekleme: artan özledim, ancak kaynağa çığ olmadan (istek birleştirme/değişmez TTL), otomatik ısınma ve kurtarma.

7. 3 "Veritabanında bölünmüş beyin"

Enjeksiyon: Lider kaybı, çoğaltmaya geçin.
Bekleme: kayıtların kısa süreli reddedilmesi, nisaptan okunması, veri kaybı olmaması, Giden Kutusu mesajları kaybetmez.

7. 4 "ENOSPC/disk dolu"

Enjeksiyon: %95-100 disk.
Bekleme: günlüklerin acil rotasyonu, engelleyici olmayan özelliklerin arızalanması, kritik günlüklerin güvenliği (WAL), uyarılar ve autoliquids.

7. 5 "Trafik patlaması"

Enjeksiyon: Sıcak son noktaya 3 RPS × 10 dakika.
Beklenti: düşük öncelikli gölgelendirme, "nükleer" yollar için kararlı p95, sınırlar içinde kuyruk büyümesi, DLQ fırtınası yok.

7. 6 "Saat eğriltme"

Enjeksiyon: Düğüm zamanının +/ − 2 dakika kaydırılması.
Bekleme: doğru TTL/imzalar (boşluk), retraylerde monotonik zamanlayıcılar, kabul edilebilir sürüklenme ile geçerli belirteçler.

8) Ortamlar ve deneylerin güvenliği

Ön prod, sentetik veri, configurs/topology ürüne mümkün olduğunca yakın ile başlayın.
Satışlarda - sadece kontrollü pencereler, özellik bayrakları, adım adım genlik, otomatik geri alma, "kırmızı düğme".
Korkuluklar: RPS/hata sınırları, SLO korumaları, kritik olaylar sırasında bültenleri engelleme.
Bir runbook gereklidir: nasıl geri dönülür, kim aranır, nereye bakılır.

9) Otomasyon ve CI/CD

Deneylerin kod olarak kataloğu (YAML/DSL): hedefler, enjeksiyonlar, metrikler, eşikler, geri alma "düğmeleri".
Her sürümde duman kaosu: kısa enjeksiyonlar (örn. 2 dakika + 200 ms bağımlılık) aşamada.

Matrix Night Runs - Hizmetler × Arıza Modları

Serbest bırakma kapısı: kararlılık eşiğin altındaysa dağıtımın yasaklanması (örneğin, "yavaş bağımlılık" altındaki "geri dönüş kapsamı <%95").

10) Veri ve tutarlılık

Tazminat kontrolü (Saga): Kısmen gerçekleştirilen işlemler kararlaştırılan bir duruma getirilmelidir.
Test tekrarları/olay kopyaları, sipariş dışı teslimat, delikler ve tekrarlar.
Arızalardan sonra etki alanı değişmezlerini doğrulayın: denge negatif değildir, işlemler sıkışmaz, sınırlar ihlal edilmez.

11) Anti-desenler

Sadece mutlu yolu test edin ve arızasız yükleyin.
Jitter olmadan Retrai - bozulma altında bir fırtına.
Genel zaman aşımı bütçesi yok - basamaklı zaman aşımları.
Tüm görevler için tek bir havuz - izolasyon yok (bölmeler).
"Sonsuz" kuyruklar - gecikme/PDE bir artış.
Deneylerin sıfır telemetrisi - "kör" kaos uygulamaları.
Geri alma/sınırlar/sorumlu sahibi olmadan satışta kaos.

12) Mimar kontrol listesi

1. Kararlı durum hipotezi ve SLO tanımlanmış mı?
2. Her RPC'nin zaman aşımı, titreme, geri çekilme, kırıcılar var mı?
3. Uygulanan bölmeler, sınırlayıcılar, geri basınç, yük-atma?
4. Önbellek sabit: birleştirme, önbellek fırtına koruması, ısınma?
5. Yan etkiler için Outbox/Saga, idempotent anahtarlar?
6. Quorum/replication/feilover test edildi mi?
7. CI/CD'de bir deney kataloğu, gece kaosu ve kapılar var mı?
8. Metrikler/izler deneyleri işaretler, gösterge panoları var mı?
9. Runbook've "kırmızı düğme" hazır, sorumluluk atanmış mı?
10. Dev/SRE/Destek özelliğine sahip normal oyun günleri?

13) Mini Araçlar ve Örnek Senaryolar (YAML Sketches)

Ağ (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 }

Bağımlılık

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

Sonuç

Esneklik testi bir "kaos hilesi'değil, sistemi aksaklıklar altında öngörülebilir kılan bir disiplindir. Açık hipotezler, telemetri, kontrollü deneylerin bir kataloğu ve mimarideki gömülü desenler (zaman aşımları, kesiciler, izolasyon, idempotans) potansiyel olayları kontrollü senaryolara dönüştürür. Ekip sürümlere güvenir ve kullanıcılar arıza koşullarında bile istikrarlı bir hizmet alırlar.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.