Circuit Breaker və deqradasiya
Circuit Breaker (CB) uğursuzluğu lokallaşdırmaq və axın xidmətlərini və istifadəçini qorumaq üçün pozulmuş asılılığa qarşı çağırışları kəsən qoruyucu bir nümunədir. Deqradasiya (graceful degradation) - resursların çatışmazlığı və ya uğursuzluqlar zamanı funksionallığın qəsdən sadələşdirilməsi (məsələn, cached/natamam məlumatların qaytarılması, «bahalı» fiqurların bağlanması).
Əsas məqsəd: SLO və istifadəçi təcrübəsini kaskad düşmə əvəzinə nəzarət edilən uğursuzluqlarla saxlamaq.
1) Nə zaman tətbiq olunur
Asılılıq qeyri-sabitdir: böyümə p95/p99, vaxtlar, səhv cavablar.
Sərt limitlər/penalti ilə xarici API.
Retrajların fırtınanı gücləndirdiyi «ağır» arxalar (axtarış, tövsiyələr, hesabatlar).
Hovuzların tükənməsi riski olan yüksək yüklü sahələr (birləşmələr, tredlər).
2) CB halları və keçidlər
Klassik üçlük:1. Closed - trafik gedir, səhv/gecikmə metrikası sayılır.
2. Open - zənglər dərhal rədd edilir (fail-fast) və/və ya fallback-ə tərcümə olunur.
3. Half-Open - məhdud sayda «sınaq» sorğuları açarın bağlanıb bağlanmayacağını müəyyən edir.
Açılış tetikləyiciləri
Pəncərə arxasında xəta/vaxt həddi (məsələn, N son 50% -dən ≥).
Gecikmə həddi (məsələn, p95> hədəf dəyəri).
Kombinə edilmiş siyasətlər (səhvlər ∧ vaxtın aşılması).
Saxlama vaxtı (cool-down)
Sabit (məsələn, 10-60 san) və ya adaptiv (təkrar işlənmə zamanı eksponensial artım).
3) Taymaut, retraj və jitter
Taymautlar həmişə SLO axınından qısadır və zəncirlə razılaşdırılır (deadline propagation).
Retrai yalnız idempotent əməliyyatlar üçün; 1-2 cəhdlər əksər hallarda kifayətdir.
Backoff + jitter (full jitter) sinxron təkrarlama dalğalarının qarşısını alır.
Hedging (ehtiyat sorğular) - qənaətli və yalnız çox tənqidi oxunmalar üçün.
4) Bulkhead-izolyasiya və «qoruyucular»
Qoşulma/worker/növbə hovuzlarını domenlərə və trafik növlərinə (VIP, fon tapşırıqları, ictimai API) görə bölün.
«bahalı» əməliyyatlar üçün concurrency Caps.
Admission control: növbə aşırıldıqda yerinə yetirilməzdən əvvəl yüngül imtina.
5) Fallback və deqradasiya ssenariləri
Variantlar
Cache/Stail cavabları: 'stale-while-revalidate', L2/L3 cache-dən məlumatların qaytarılması.
Read-only: blok yazmaq/əmrlər, təhlükəsiz oxu imkan.
Surroqat cavablar: natamam məlumatlar (məsələn, tövsiyələr/avatarlar olmadan).
Funksional bağlantı: kritik olmayan widget/fich 'i müvəqqəti gizlətmək.
Feature flags: azad olmadan sürətli davranış dəyişikliyi.
Qaydalar
Fallback məlumatlara görə determinant, sürətli və təhlükəsiz olmalıdır.
Log/Trace/metriklərdə deqradasiyaya uğramış yolu açıq şəkildə qeyd edin.
6) Prioritetləşdirmə və trafik
VIP/ödənişli planlar - kəsir zamanı daha böyük prioritet/kvota.
Rate limits və throttling deqradasiyaya məruz qalan asılılıqların yükünü azaldır.
Shed load: stabilizasiyaya qədər keyfiyyətin yumşaq azalması (məsələn, daha az nəticə, kəsilmiş görüntülər).
7) Müşahidə və siqnalizasiya
CB metrikası
State (closed/open/half-open) və müddəti vəziyyətdədir.
Səbəblərə görə uğursuzluqların nisbəti: CB-open, timeout, 5xx, retry-exhausted.
p95/p99 gecikmə açarı «əvvəl» və «sonra».
fallback vasitəsilə sorğuların sayı/payı.
Treysinq
Span şərhləri: 'circuit = opened', 'fallback = cache', 'admission = denied'.
Limitlərlə korrelyasiya (429/RateLimit-), növbələr və birləşmə güllələri.
Qeydlər/Audit
Açılış/bağlanış səbəbi, eşiklər, asılılıq identifikatorları.
8) Müqavilələr və protokol
HTTP
Fail-fast: '503 Service Unavailable' ilə 'Retry-After' (və ya limitlər ilə '429').
Partial content/stail: '200 '/' 206' deqradasiya meta məlumatları ilə (məsələn, 'X-Degraded: true').
Cache-Control: stale-if-error, stale-while-revalidate '.
gRPC
'UNAVAILABLE', 'DEADLINE _ EXCEEDED', müştəri/proxy siyasəti retray semantikası.
Sorğu kontekstində Deadline/timeout; zəncir aşağı dövr yayılması.
İdempotentlik
POST əməliyyatları üçün «Idempotency-Key», sərhəddə deduplikasiya.
9) Standart icra (psevdokod)
pseudo onRequest(req):
if circuit. isOpen(dep):
return fallbackOrFail(req)
with timeout(T):
try:
resp = call(dep, req)
circuit. recordSuccess(dep, latency=resp. latency)
return resp except TimeoutError or 5xx as e:
circuit. recordFailure(dep)
if circuit. shouldOpen(dep):
circuit. open(dep, coolDown=adaptive())
return fallbackOrFail(req)
Half-Open test
pseudo onTimer():
if circuit. state(dep) == OPEN and coolDownExpired():
circuit. toHalfOpen(dep)
onRequestHalfOpen(req):
if circuit. allowTrial (dep): # e.g. 1 try: call -> success => close catch: reopen with longer coolDown else:
return fallbackOrFail(req)
10) Eşik konfiqurasiya
Müşahidə pəncərəsi: sürüşən N saniyə/sorğu.
Xəta həddi: pəncərədə 20-50% (profildən asılıdır).
Gecikmə həddi: p95 ≤ hədəf SLO (məsələn, 300-500 ms); artıq CB üçün «səhv» kimi nəzərə alınır.
Adaptiv cool-down: 10s → 30s → 60s təkrar işə salındıqda.
11) Test və xaos təcrübələri
Chaos: enjeksiyon gecikmə/səhvlər, DNS qırılması, drop paketləri.
Game days: döyüş kimi mühit açar «açma» başlamaq, fallback yoxlama.
Canary: 1-5% trafik üçün əvvəlcə SV/deqradasiya siyasətlərini daxil edin.
SLO-büdcə: error-budget tükənənə qədər təcrübələrə icazə verin.
12) Multitenantlıq ilə inteqrasiya
CB vəziyyəti per-dependency per-tenant (səs-küylü kirayəçilər üçün) və ya qlobal - yükləmə profilindən asılı olaraq saxlanıla bilər.
Fallback məlumatları və caches 'tenant _ id' ilə seqmentləşdirin.
Prioritetlər/kvotalar - planlara uyğun olaraq (VIP Starter davranışından əziyyət çəkməməlidir).
13) Satış öncəsi yoxlama siyahısı
- Zaman keçidləri və müddətlər keçidlidir və razılaşdırılmışdır.
- Retrajlar məhduddur, yalnız idempotent əməliyyatlar üçün, backoff + jitter ilə.
- CB eşik qiymətləri yük testi məlumatları ilə əsaslandırılır.
- Fallback yolları mövcuddur, sürətli və təhlükəsiz; cache siyasətləri müəyyən edilmişdir.
- Bulkhead-izolyasiya: ayrı hovuzlar/növbələr/limitlər.
- Metriklər/treys/loqlar CB deqradasiyasını və vəziyyətini qeyd edir.
- Başlıq/kod nümunələri ilə cavab müqavilələrinin sənədləşdirilməsi (HTTP/gRPC).
- Xaos ssenariləri və oyun günləri müntəzəm olaraq keçirilir; runbook var.
14) Tipik səhvlər
Heç bir zaman kəsimi yoxdur → retrai «durmadan» və kaskad düşmə.
Seçki əvəzinə vahid qlobal CB (end-point/metod üzrə) - əlavə imtinalar.
Deqradasiya UX əvəzinə fallback → «boş» ekranlar olmadan açıq açar.
Jitter olmadan retrailer → sinxron istək fırtınaları.
Qısamüddətli nasazlıqlarda uzun cool-down və ya sabit vəziyyətlərdə çox qısa - «flip-flop» halları.
Bulkhead olmaması - ümumi hovuzların tükənməsi və «head-of-line blocking».
15) Sürətli strategiya seçimi
Yüksək əhəmiyyət: CB + Cache Stail Cavablar + hedging (qənaətlə).
Qeydlər/ödənişlər: ciddi vaxtlar, minimum retrains, idempotency keys, heç bir «çirkli» fallback.
Xarici API: CB aqressiv eşik, adaptiv cool-down, ciddi throttling.
Mikroservis pulsasiya yükü: bulkheads, concurrency caps, VIP prioritetləşdirilməsi.
Nəticə
Circuit Breaker və idarə olunan deqradasiya memarlığın "sığortası 'dır: onlar xaotik uğursuzluqları proqnozlaşdırıla bilən davranışa çevirirlər. Aydın vaxt, məhdudlaşdırılmış retrajlar, təcrid olunmuş hovuzlar, düşünülmüş fallback yolları və telemetriya sistemi asılılıq pozğunluğuna davamlı edir və SLO-nu hətta pik və qəza dövrlərində də saxlayır.