Zarif bozunma
1) Yaklaşımın özü
Zarif bozulma, kaynaklar kıt olduğunda, bağımlılıklar başarısız olduğunda veya yük zirveleri olduğunda bir sistemin daha basit ancak kullanışlı bir moda yönetilen geçişidir. Amaç, ikincil yetenekleri ve kaliteyi feda ederek kullanıcı değerinin ve platform esnekliğinin özünü korumaktır.
Temel özellikler:- Öngörülebilirlik: önceden tanımlanmış senaryolar ve bozulma "merdivenler".
- Isabet yarıçapını sınırla: Özellikleri ve kısıtlamaları ayır.
- Gözlemlenebilirlik: metrikler, günlükler ve izler'hangi düzeyde bozulma aktif ve neden ".
- Tersinirlik: Normale hızlı dönüş.
2) İlkeler ve sınırlar
1. Ana şeyi kaydedin: ana SLA/SLO'nuz (örn. "Satın alma", "giriş", "arama") - öncelik ikincil (avatarlar, öneriler, animasyonlar) daha yüksektir.
2. Fail-open vs fail-closed:- Güvenlik, ödemeler, haklar - başarısızlık-kapalı (ihlalden daha iyi reddetme).
- Önbelleğe alınmış içerik, ipuçları, avatarlar - folback ile başarısız açık.
- 3. Zaman bütçeleri: yukarıdan aşağıya zaman aşımları (istemci
- 4. Maliyet kontrolü: Bozulma sadece hataları "gizlemek'değil, CPU/IO/ağ tüketimini azaltmalıdır.
3) Bozulma seviyeleri
3. 1 Müşteri/UX
İskeletler/yer tutucular ve ikincil widget'ların "tembel" yüklenmesi.
Kısmi UI: kritik bloklar yüklenir, ikincil bloklar gizlenir/basitleştirilir.
İstemci tarafı önbellek: Son bilinen-iyi (LKG) işaretli "veri eskimiş olabilir".
Çevrimdışı mod: Daha sonra tekrarlama ile komut kuyruğu (idempotence!).
3. 2 Kenar/CDN/WAF/API Ağ Geçidi
Stale-while-revalidate: önbelleği veriyoruz, arka planı güncelliyoruz.
Hız sınırlama ve yük azaltma: aşırı yükleme yaparken, arka plan/anonim trafiği sıfırlayın.
Geofence/ağırlıklı yönlendirme: Trafik en yakın sağlıklı bölgeye yönlendirilir.
3. 3 Servis katmanı
Kısmi yanıt: + 'uyarılar' verilerinin bir kısmını döndürür.
Salt okunur mod: Mutasyonları geçici olarak yasaklar (bayraklar).
Brownout: Kaynak yoğun özelliklerin geçici olarak devre dışı bırakılması (öneriler, zenginleştirme).
Uyarlanabilir eşzamanlılık: eşzamanlılığı dinamik olarak azaltır.
3. 4 Veri/Akış
TTL ile doğruluk kaynağı olarak önbellek (geçici olarak): "Yaklaşık olarak hiç yoktan iyidir".
Modellerin/algoritmaların azaltılmış doğruluğu (hızlı yol ve doğru yol).
Erteleme/kuyruk - ağır görevleri arka plana aktarın (giden kutusu/iş kuyruğu).
Öncelik kuyrukları: kritik olaylar - ayrı bir sınıfta.
4) Bozulma "merdivenler" (playbooks)
Arama API'si için örnek:- L0 (normal) - L1: kişiselleştirmeyi ve afişleri gizle - L2: eş anlamlıları/bulanık aramayı devre dışı bırak - L3: yanıt boyutunu ve zaman aşımını 300 ms ile sınırla - L4: önbellekten sonuç ver 5 dakika - L5: "salt okunur ve yalnızca önbelleğe alınmış" + yeniden hesaplama istekleri kuyruğu.
- Tetikleyiciler: CPU aşırı yüklemesi> 85 % p95> hedef, hatalar> eşik, Kafka> eşik bayrağı, bağımlılık bayrağı.
- Eylemler: X bayrağını açın, eşzamanlılığı N'ye düşürün, Y kaynağını önbelleğe geçirin.
- Çıkış kriterleri: 10 dakikalık yeşil metrikler, kaynak boşluğu.
5) Karar verme politikaları
5. 1 Hatalı bütçe ve SLO
Hata bütçesi yakma oranını bir brownout/dökülme tetikleyicisi olarak kullanın.
Politika: "15 dakika içinde yanma oranı> 4 × - L2 bozulmasını açın".
5. 2 Giriş kontrolü
P99'u garanti etmek ve kuyruk çökmesini önlemek için gelen RPS'yi kritik yollarda kısıtlıyoruz.
5. 3 Önceliklendirme
Sınıflar: etkileşimli> sistem> arka plan.
Kiracı başına öncelikler (Altın/Gümüş/Bronz) ve adalet (adil paylaşım).
6) Desenler ve uygulamalar
6. 1 Yük boşaltma
Tüm kaynakları kullanmadan önce istekleri bırakın.
'429'/' 503'ü' Retry-After've politika açıklaması (müşteriler için) ile iade edin.
Elçi (uyarlanabilir eşzamanlılık + devre kesme)
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 (geçici basitleştirme)
Fikir: kaynaklar tükenirken özelliğin "parlaklığını" (maliyetini) azaltmak.
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 Kısmi yanıt ve uyarılar
Yanıt olarak 'uyarılar'/' bozunma' alanı:json
{
"items": [...],
"degradation": {
"level": 2,
"applied": ["cache_only", "no_personalization"],
"expiresAt": "2025-10-31T14:20:00Z"
}
}
6. 4 Kenardaki bayat-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 Salt okunur anahtar (Kubernetes + bayrak)
yaml apiVersion: v1 kind: ConfigMap data:
MODE: "read_only"
The code should check MODE and block mutations with a friendly message.
6. 6 Kafka: geri basınç ve kuyruk sınıfları
Ağır tüketicileri daha küçük 'max'a geçirin. anket. Kayıtlar, sınırlı üretim toplu-ve.
"Kritik've" toplu "olayları konuya/kotaya göre ayırın.
6. 7 UI: zarif geri dönüş
"Ağır" widget'ları gizleyin, önbellek/iskelet gösterin ve güncel olmayan verileri açıkça etiketleyin.
7) Yapılandırma örnekleri
7. 1 Istio aykırı + öncelikli havuzlar
yaml outlierDetection:
consecutive5xx: 5 interval: 10s baseEjectionTime: 30s maxEjectionPercent: 50
7. 2 Nginx: Önce bıçak altındaki arka plan trafiği
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 Özellik bayrakları/kill-switch'ler
Dinamik yapılandırmada saklayın (ConfigMap/Consul), serbest bırakılmadan güncelleyin.
Ayrı özellik başına ve genel bayraklar, günlük aktivasyonları.
8) Gözlemlenebilirlik
8. 1 Metrikler
'degradation _ level {service}' geçerli seviyedir.
'shed _ requests _ total {route, reason}' - ne kadar sıfırlanır ve neden.
'bayat _ yanıtlar _ toplam' - ne kadar önbellek verildi.
'read _ only _ mode _ seconds _ total'.
'brownout _ activations _ total {feature}'.
Hatalı bütçe: yanma oranı, SLO ihlallerinin oranı.
8. 2 İzleme
Açıklıkların nitelikleri: 'degraded = true', 'level = 2', 'reason = upstream _ timeout'.
Kuyruklara katkıyı görmek için retrays/hedged sorgular arasındaki bağlantılar.
8. 3 Günlükler/Uyarılar
Bozunma seviyesi değişim nedenleri ve sahibi ile olayları değiştirir.
"Yapışma" seviyesi için uyarılar (bozulma çok uzun sürer).
9) Risk yönetimi ve güvenlik
Kimlik doğrulama/yetkilendirme/veri bütünlüğünü bozmayın: daha iyi hata.
PII maskeleme herhangi bir modda korunur.
Finans/ödemeler: sadece idempotent işlemler, sıkı zaman aşımları ve geri dönüşler; Şüphede - salt okunur/bekletme.
10) Anti-desenler
Kullanıcıya sormadan ve telemetri olmadan sessiz bozulma.
Yük atma ve kısa zaman aşımları yerine fırtınaları geri çekin.
Segmentasyon olmadan küresel "anahtarlar" - büyük bir patlama yarıçapı.
Aynı önbellekte/kuyrukta prod ve hafif yolları karıştırın.
Sonsuz bozulma:'yeni normal'olarak kahverengileşme, unutulmuş çıkış kriterleri.
Bayat yazma: Bayat verilere dayanarak yazmaya çalışır.
11) Uygulama kontrol listesi
- Temel değer ve kritik kullanıcı senaryoları tanımlanmıştır.
- Tetikleyiciler ve çıkışlarla servis/domaine göre bozunma merdivenleri derlenir.
- Zaman aşımları/kısıtlamalar ve sunucu tarafı yük azaltma girilir.
- Hız sınırları ve öncelikli trafik sınıfları yapılandırılmıştır.
- Uygulanan kısmi yanıt, salt okunur, bayat iken yeniden değerleme.
- Denetimli entegre özellik bayrakları/kill-switch'ler.
- Bozulma seviyeleri ve nedenleri için metrikler/izleme/uyarılar.
- Simüle edilmiş aşırı yük/arızalarla düzenli oyun günü egzersizleri.
- SLO belgelenmiş ve hata-bütçe - bozulma politikası.
12) SSS
S: Brownout ne zaman seçilir ve ne zaman dökülür?
C: Amaç, hatasız isteklerin maliyetini azaltmaksa - brownout. Amaç, basitleştirmenin bile yardımcı olmadığı durumlarda sistemi korumaksa, girişin dökülmesi.
S: Kullanıcıya bozulma bildiriyor muyum?
C: Kritik senaryolar için - evet ("sınırlı mod" rozeti). Şeffaflık desteği ve hoşnutsuzluğu azaltır.
S: Bir önbellek gerçeğin kaynağı haline getirilebilir mi?
C: Geçici olarak - evet, açık SLA'lar ve eskiyen etiketlerle. Mutasyonlar için - yasak.
S: Retrai "kırık" nasıl yapılmaz?
C: Kısa zaman aşımları, jitter ile üstel geri dönüş, idempotency ve girişim sınırı; Sadece güvenli işlemleri retrait.
13) Toplam
Zarif bozulma, bir mimari sözleşme ve metriklerin ve hatalı bütçenin sinyalleriyle açılan bir dizi kontrollü çalışma şeklidir. Düzgün tasarlanmış merdivenler, sıkı zaman aşımları ve dökülme, cashback ve brownout, artı güçlü gözlemlenebilirlik - ve platformunuz bir fırtınada bile kullanışlı ve ekonomik kalır.