Devre Kesici ve Bozulması
Devre Kesici (CB), arızayı yerelleştirmek ve yukarı akış hizmetlerini ve kullanıcıyı korumak için çağrıları bozulmuş bir bağımlılığa kesen bir güvenlik modelidir. Bozulma (zarif bozulma) - kaynak eksikliği veya arızalar durumunda (örneğin, önbelleğe alınmış/eksik verilerin döndürülmesi, "pahalı" özelliklerin devre dışı bırakılması) tam kesinti olmadan işlevselliğin kasıtlı olarak basitleştirilmesi.
Ana amaç: SLO ve kullanıcı deneyimini basamaklı damlalar yerine kontrollü arızalarla korumak.
1) Ne zaman başvurulur
Bağımlılık kararsızdır: p95/p99 büyüme, zaman aşımları, hatalı cevaplar.
Katı sınırlara/cezalara sahip harici API'ler.
Retray'lerin fırtınayı yoğunlaştırdığı'ağır "arka uçlar (arama, öneriler, raporlar).
Havuzların tükenme riski olan yüksek yüklü alanlar (bağlantılar, iplikler).
2) CB durumları ve geçişleri
Klasik üçlü:1. Kapalı - trafik gider, hata/gecikme metrikleri sayılır.
2. Açık - çağrılar anında reddedilir (fail-fast) ve/veya fallback'e aktarılır.
3. Yarı Açık - Sınırlı sayıda "deneme" isteği, anahtarın kapatılıp kapatılmayacağını belirler.
Açma tetikleyicileri
Pencere başına hata/zaman aşımı eşiği (örneğin, son N değerinin ≥ %50'si).
Gecikme eşiği (örn. p95> hedef).
Birleştirilmiş ilkeler (hatalar ∧ zaman aşımı aşıldı).
Bekleme süresi (soğuma)
Sabit (örneğin, 10-60 saniye) veya uyarlanabilir (tekrarlanan etkinleştirmelerle üstel artış).
3) Zaman aşımları, geri çekilmeler ve titreme
Zaman aşımları her zaman yukarı akış SLO'larından daha kısadır ve son tarih yayılımıdır.
Retrai sadece idempotent işlemler için; Çoğu durumda 1-2 deneme yeterlidir.
Backoff + jitter (tam jitter) eşzamanlı tekrarlama dalgalarını önler.
Hedging (yedek istekler) - ekonomik ve sadece çok kritik okumalar için.
4) Bulkhead-izolasyon ve "sigortalar"
Etki alanına ve trafik türüne göre ayrı bağlantı/işçi/kuyruk havuzları (VIP, arka plan görevleri, genel API'ler).
"Pahalı" işlemler için eşzamanlılık üzerindeki kapaklar.
Kabul kontrolü: kuyruk dolduğunda yürütülmeden önce kolay arıza.
5) Geri dönüş ve bozulma senaryoları
Seçenekler
Önbellek/stil yanıtları: 'stale-while-revalidate', L2/L3 önbellekten veri döndürme.
Salt okunur: yazma/komut bloğu, güvenli okumaya izin ver.
Vekil yanıtlar: eksik veriler (örneğin, öneri/avatar yok).
İşlevsel devre dışı bırakma: kritik olmayan widget'ları/özellikleri geçici olarak gizler.
Özellik bayrakları: serbest bırakılmadan hızlı davranış değişikliği.
Kurallar
Fallback deterministik, hızlı ve verilerden güvenli olmalıdır.
Günlüklerde/izlerde/metriklerde bozulmuş yolu açıkça işaretleyin.
6) Önceliklendirme ve trafik şekillendirme
VIP/ücretli planlar - eksiklik durumunda daha yüksek öncelik/kotalar.
Hız sınırları ve azaltma, bozulmuş bağımlılıklar üzerindeki yükü azaltır.
Dökme yükü: Kalitede yumuşak azalma (örn. stabilize olana kadar daha az sonuç, kesilmiş görüntüler).
7) Gözlemlenebilirlik ve sinyalizasyon
CB metrikleri
Durum (kapalı/açık/yarı açık) ve durumdaki süre.
Başarısızlıkların nedenlere göre payı: CB-açık, zaman aşımı, 5xx, yeniden-tükenmiş.
Anahtardan'önce've "sonra" p95/p99 gecikme.
Geri dönüş yoluyla taleplerin sayısı/yüzdesi.
İzleme
Açıklıkların açıklamaları: 'devre = açıldı', 'geri dönüş = önbellek','kabul = reddedildi '.
Sınırlar (429/RateLimit-), kuyruklar ve bağlantı madde işaretleri ile korelasyon.
Günlükler/Denetimler
Açılış/kapanış nedeni, eşikler, bağımlılık kimlikleri.
8) Sözleşmeler ve Protokol
HTTP
Hızlı başarısız olma: '503 Servis Kullanılamıyor', 'Yeniden Deneme-Sonra' (veya sınırlarda '429').
Kısmi içerik/bayat: '200'/' 206', degradasyon meta verileriyle (örneğin, 'X-Degraded: true').
Önbellek ilkeleri: 'Cache-Control: stale-if-error, stale-while-revalidate'.
gRPC
'UNAVAILABLE', 'DEADLINE _ EXCEEDED', müşteri/proxy politikalarına göre semantiği yeniden ayır.
Talep bağlamında son tarih/zaman aşımı; Süreyi zincirin altına yaymak.
Idempotency
POST işlemleri için 'Idempotency-Key', sınırda veri tekilleştirme.
9) Tipik uygulama (sözde kod)
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)
Yarı Açık örnek
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şikleri ayarlama
Gözlem penceresi: N saniye/sorgular kayar.
Hata eşiği: Pencerede %20-50 (profile bağlı olarak).
Gecikme eşiği: p95 ≤ hedef SLO (örneğin, 300-500 ms); fazlalık CB için bir "hata'olarak sayılır.
Uyarlanabilir soğuma: Tekrarlanan harekete geçirmelerle birlikte 10'lar - 30'lar - 60'lar.
11) Test ve kaos uygulamaları
Kaos: gecikme/bağımlılık hatası enjeksiyonu, DNS dökümü, paket düşüşü.
Oyun günleri: Anahtarın "açılmasını" savaş benzeri bir ortamda başlatmak, geri dönüşü kontrol etmek.
Kanarya: Trafiğin %1-5'i için önce POC/bozulma politikalarını etkinleştirin.
SLO bütçesi: hata bütçesi tükenene kadar deneylere izin verin.
12) Çoklu kiracılık ile entegrasyon
CB durumu, kiracı başına bağımlılık başına (gürültülü kiracılar için) veya küresel olarak depolanabilir - yük profiline bağlı olarak.
Geri dönüş verilerini ve önbellekleri 'tenant _ id'ile bölümlere ayırın.
Öncelikler/kotalar - planlara göre (VIP'ler Starter davranışından muzdarip olmamalıdır).
13) Satış öncesi kontrol listesi
- Zaman aşımları ve son tarihler uçtan uca ve tutarlıdır.
- Retrays sınırlıdır, sadece idempotent işlemler için, backoff + jitter ile.
- CB eşikleri yük testi verileri ile doğrulanır.
- Fallback yolları var, hızlı ve güvenli; Politika önbelleği tanımlanmıştır.
- Bulkhead izolasyonu: ayrı havuzlar/kuyruklar/sınırlar.
- Metrikler/yollar/günlükler bayrak bozulması ve CB durumları.
- Örnek başlıklar/kodlar ile yanıt sözleşmesi belgeleri (HTTP/gRPC).
- Kaos senaryoları ve oyun günleri düzenli olarak gerçekleşir; Bir runbook var.
14) Tipik hatalar
Zaman aşımı yok - "sonuna kadar" geri çekiliyor ve basamaklı düşüyor.
Seçici yerine tek global CB (uç nokta/yöntemle) - gereksiz arızalar.
Fallback olmadan anahtarı açın - bozulmuş UX yerine "boş" ekranlar.
Jitter olmadan Retrai - taleplerin senkronize fırtınaları.
Kısa süreli arızalarla uzun soğuma veya stabil - "flip-flop" durumlarıyla çok kısa.
Bölme yokluğu - paylaşılan havuzların tükenmesi ve "hat başı engelleme".
15) Hızlı strateji seçimi
Yüksek öneme sahip okumalar: CB + eski yanıtların önbelleği + riskten korunma (ekonomik).
Kayıtlar/ödemeler: sıkı zaman aşımları, minimum yeniden ödemeler, idempotency anahtarları, kirli geri dönüş yok.
Harici API'ler: Agresif eşiklere sahip CB, uyarlanabilir soğuma, sıkı kısma.
Titreşimli yük mikro servisleri: bölmeler, eşzamanlılık başına büyük harfler, VIP önceliklendirme.
Sonuç
Devre Kesici ve yönetilen bozulma mimari "sigorta'dır: kaotik başarısızlıkları öngörülebilir davranışlara dönüştürürler. Açık zaman aşımları, sınırlı titreme geri çekilmeleri, izole havuzlar, düşünceli geri dönüş yolları ve telemetri, sistemi bağımlılık hatalarına karşı esnek hale getirir ve yoğun ve çarpışma dönemlerinde bile SLO'ları tutar.