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.