Zərif deqradasiya
1) Yanaşmanın mahiyyəti
Zərif deqradasiya sistemin resursların çatışmazlığı, asılılıq uğursuzluqları və ya yükün zirvələri zamanı daha sadə, lakin faydalı bir rejimə idarə olunan keçididir. Məqsəd, ikinci dərəcəli imkanlar və keyfiyyətləri qurban verməklə istifadəçi üçün dəyər nüvəsini və platformanın sabitliyini qorumaqdır.
Əsas xüsusiyyətləri:- Proqnozlaşdırıla bilər: əvvəlcədən müəyyən edilmiş ssenarilər və deqradasiya «pilləkənləri».
- Məhvetmə radiusunun məhdudlaşdırılması: fich və asılılıqların izolyasiyası.
- Müşahidə: metriklər, log və izlər «hansı deqradasiya səviyyəsi aktivdir və niyə».
- Geri dönüş: normala sürətli qayıdış.
2) Prinsiplər və sərhədlər
1. Əsas şeyi saxlayın: əsas SLA/SLO (məsələn, «alış», «giriş», «axtarış») - ikinci dərəcəli (avatarlar, tövsiyələr, animasiyalar).
2. Fail-open vs fail-closed:- Təhlükəsizlik, ödənişlər, hüquqlar - fail-closed (pozuntudan daha yaxşı imtina).
- Cashable content, ipuçları, avatarlar - folback ilə fail-open.
- 3. Müvəqqəti büdcələr: yuxarıdan aşağıya (müştəri <şlz
- 4. Dəyər nəzarəti: deqradasiya yalnız səhvləri «gizlətmək» deyil, CPU/IO/şəbəkə istehlakını azaltmalıdır.
3) Deqradasiya səviyyələri
3. 1 Müştəri/UX
Skeletons/playsholders və «tənbəl» kiçik widget yükləmə.
Partial UI: kritik bloklar yüklənir, ikincili bloklar gizlənir/sadələşdirilir.
Cache müştərinin tərəfindədir: last-known-good (LKG) «məlumatlar köhnəlmiş ola bilər».
Offline rejimi: daha sonra təkrarlanan komandaların növbəsi (idempotentlik!).
3. 2 Edge/CDN/WAF/API-şlyuz
stale-while-revalidate: cache veririk, fon yenilənir.
Rate limiting & load shedding: həddindən artıq yükləmə zamanı arxa/anonim trafiki sıfırlayırıq.
Geofence/balanslı marşrutlaşdırma: trafik ən yaxın sağlam bölgəyə aparılır.
3. 3 Xidmət təbəqəsi
Partial response: + 'warnings' məlumatlarının bir hissəsini qaytarırıq.
Read-only rejimi: mutasiyalar (bayraqlar) müvəqqəti qadağa.
Brownout: resurs tələb edən xüsusiyyətlərin müvəqqəti bağlanması (tövsiyələr, zənginləşdirmə).
Adaptive concurrency: dinamik paralelliyi azaldır.
3. 4 Məlumat/axın
TTL ilə həqiqət mənbəyi kimi cache (müvəqqəti): «heç bir şey haqqında daha yaxşı».
Modellərin/alqoritmlərin aşağı dəqiqliyi (fast path vs accurate path).
Defer/queue: ağır tapşırıqların arxa plana köçürülməsi (outbox/job queue).
Prioritet növbələr: kritik hadisələr - ayrı bir sinifdə.
4) «Pilləkənlər» deqradasiya (playbooks)
Axtarış API üçün nümunə:- L0 (norma) → L1: fərdiləşdirmə və bannerləri gizlətmək → L2: sinonimləri/faszi axtarışını söndürmək → L3: cavab ölçüsünü və vaxtını 300 ms → L4-ə qədər məhdudlaşdırmaq: 5 dəqiqə → L5 cache-dən nəticələr vermək: «read-only & cached only» + yenidən hesablama sorğularının növbəsi.
- Triggers: CPU həddindən artıq yükləmə> 85% p95> hədəf, səhvlər> eşik, laq Kafka> eşik, asılılıq flap.
- Tədbirlər: X bayrağını yandırın, N-ə qədər concurrency azaldın, Y mənbəyini cache-ə keçirin.
- Çıxış meyarları: 10 dəqiqə yaşıl metrlər, resurs ehtiyatı.
5) Qərar vermək siyasəti
5. 1 Səhv büdcə və SLO
brownout/shedding tetikleyici kimi error-budget burn rate istifadə edin.
Siyasət: «burn-rate> 4 × 15 dəqiqə ərzində - L2 deqradasiya daxil edin».
5. 2 Admission control
P99-a zəmanət vermək və növbələrin çökməsinin qarşısını almaq üçün kritik yollarda daxil olan RPS-i məhdudlaşdırırıq.
5. 3 Prioritetləşdirmə
Siniflər: interactive> system> background.
Per-tenant prioritetlər (Gold/Silver/Bronze) və ədalət (fair share).
6) Pattern və satış
6. 1 Load shedding (server)
Bütün resursları tutmadan sorğuları sıfırlayın.
Qaytarın '429 '/' 503' s 'Retry-After' və siyasət izahı (müştərilər üçün).
Envoy (adaptive concurrency + circuit breaking)
yaml typed_extension_protocol_options:
envoy. filters. http. adaptive_concurrency:
"@type": type. googleapis. com/envoy. extensions. filters. http. adaptive_concurrency. v3. AdaptiveConcurrency gradient_controller_config:
sample_aggregate_percentile: 90 circuit_breakers:
thresholds:
- max_requests: 2000 max_pending_requests: 500 max_connections: 1000
6. 2 Brownout (müvəqqəti sadələşdirmə)
Fikir: resurslar tükəndikdə «parlaqlığı» (dəyəri) phich azaltmaq.
kotlin class Brownout(val level: Int) { // 0..3 fun recommendationsEnabled() = level < 2 fun imagesQuality() = if (level >= 2) "low" else "high"
fun timeoutMs() = if (level >= 1) 150 else 300
}
6. 3 Partial response və xəbərdarlıqlar
'warnings '/' degradation' cavabı:json
{
"items": [...],
"degradation": {
"level": 2,
"applied": ["cache_only", "no_personalization"],
"expiresAt": "2025-10-31T14:20:00Z"
}
}
6. Kənarda 4 Stale-while-revalidate (Nginx)
nginx proxy_cache_valid 200 10m;
proxy_cache_use_stale error timeout http_500 http_502 http_504 updating;
proxy_cache_background_update on;
6. 5 Read-only keçid (Kubernetes + bayraq)
yaml apiVersion: v1 kind: ConfigMap data:
MODE: "read_only"
The code should check MODE and block mutations with a friendly message.
6. 6 Kafka: backpressure və növbə sinifləri
Heavy-konsumerləri daha kiçik 'max-a keçirin. poll. records ', istehsal batch-i məhdudlaşdırın.
«Kritik» və «bulk» hadisələrini topiklər/kvotalar üzrə bölün.
6. 7 UI: graceful fallback
«Ağır» widgetları gizlədin, cache/skelet göstərin və köhnəlmiş məlumatları dəqiq qeyd edin.
7) Konfiqurasiya nümunələri
7. 1 Istio: outlier + prioritet hovuzlar
yaml outlierDetection:
consecutive5xx: 5 interval: 10s baseEjectionTime: 30s maxEjectionPercent: 50
7. 2 Nginx: ilk bıçaq altında fon trafiki
nginx map $http_x_priority $bucket { default low; high high; }
limit_req_zone $binary_remote_addr zone=perip:10m rate=20r/s;
limit_req_status 429;
server {
location /api/critical/ { limit_req zone=perip burst=40 nodelay; }
location /api/background/ {
limit_req zone = perip burst = 5 nodelay; # stricter
}
}
7. 3 Feature flags / kill-switches
Dinamik konfiqurasiyada saxlayın (ConfigMap/Consul), yeniləmə buraxılmadan.
Per-fich və qlobal bayraqları bölüşün, aktivləşdirmələrin loqosunu edin.
8) Müşahidə
8. 1 Metrika
'degradation _ level {service}' - cari səviyyə.
'shed _ requests _ total {route, reason}' - nə qədər və niyə sıfırlandı.
'stale _ responses _ total' - nə qədər keş verilib.
`read_only_mode_seconds_total`.
`brownout_activations_total{feature}`.
Səhv büdcə: burn-rate, SLO pozuntularının payı.
8. 2 Treysinq
Span atributları: 'degraded = true', 'level = 2', 'reason = upstream _ timeout'.
retras/hedged-sorğular arasında Links quyruqları töhfə görmək üçün.
8. 3 Log/Alert
Deqradasiya səviyyələrinin dəyişmə səbəbləri və sahibi ilə keçid hadisələri.
Alertlər səviyyənin «yapışmasına» (deqradasiya çox uzun müddət davam edir).
9) Risklərin idarə edilməsi və təhlükəsizlik
Məlumatların autentifikasiyasını/avtorizasiyasını/bütövlüyünü deqradasiya etməyin: daha yaxşı imtina.
PII maskalanması hər hansı bir rejimdə saxlanılır.
Maliyyə/ödənişlər: yalnız idempotent əməliyyatları, ciddi taymautlar və geri qaytarmalar; şübhə ilə - read-only/hold.
10) Anti-nümunələr
İstifadəçi və telemetriya olmadan sakit deqradasiya.
load shedding və qısa vaxt əvəzinə retray fırtınalar.
Qlobal «kəsicilər» seqmentasiya olmadan - böyük blast radius.
Bir cache/növbə ilə prod və «yüngül» yolları qarışdırın.
Əbədi deqradasiya: «yeni norma» kimi brownout, unudulmuş çıxış meyarları.
Stale-write: köhnəlmiş məlumatlara əsaslanaraq yazmaq cəhdləri.
11) Giriş çek siyahısı
- Əsas dəyərlər və kritik istifadəçi ssenariləri müəyyən edilmişdir.
- Tetik və çıxışları olan xidmətlər/evlər üzrə deqradasiya pilləkənləri tərtib edilmişdir.
- Vaxt/məhdudiyyətlər və server-side load shedding tətbiq edilmişdir.
- rate limits və prioritet trafik sinifləri konfiqurasiya.
- həyata partial response, read-only, stale-while-revalidate.
- Audit ilə feature flags/kill-switches inteqrasiya.
- Deqradasiya səviyyələri və səbəbləri üçün metriklər/treysinq/alertlər.
- Həddindən artıq yükləmə/uğursuzluqların simulyasiyası ilə müntəzəm oyun günü təlimləri.
- SLO və error-budget → deqradasiya siyasəti sənədləşdirilmişdir.
12) FAQ
Q: brownout seçmək və nə zaman - shedding?
A: Məqsəd imtinasız sorğuların dəyərini azaltmaqdırsa - brownout. Məqsəd sistemi qorumaqdırsa, hətta sadələşdirmə kömək etmirsə - giriş.
Q: Deqradasiya barədə istifadəçiyə məlumat vermək?
A: Kritik ssenarilər üçün - bəli (nişan «məhdud rejim»). Şəffaflıq dəstək və narazılığı azaldır.
Q: Cache həqiqət mənbəyi edə bilərmi?
A: Müvəqqəti - bəli, açıq SLA və köhnəlmə nişanları ilə. Mutasiyalar üçün - qadağandır.
S: Retrajları necə «qırılmamalıdır»?
A: Qısa vaxtlar, jitter ilə eksponensial backoff, idempotentlik və cəhd limiti; retrait yalnız təhlükəsiz əməliyyatlar.
13) Nəticələr
Zərif deqradasiya - memarlıq müqaviləsi və metrik və səhv büdcə siqnalları ilə daxil olan idarə olunan iş rejimləri dəsti. Düzgün dizayn edilmiş pilləkənlər, ciddi taymautlar və şeddinq, cash-folback və brownout, üstəgəl güclü müşahidə - və platforma fırtınada belə faydalı və qənaətcil olaraq qalır.