Node.js
Circuit breaker
Circuit breaker desenini öğrenirsin.
Circuit breaker
Circuit breaker, çağrılan servis sürekli hata verdiğinde çağrıyı durduran desendir. Üç durum vardır: closed (normal), open (çağrı engelli) ve half-open (deneme). Bu, hatalı servisin tüm sistemi çekmemesini sağlar.
Örnek: sipariş servisi 5 kez üst üste hata verirse breaker open olur ve bir süre çağrı yapmaz. Süre dolunca half-open'a geçer ve bir çağrı dener; başarılı olursa closed'a döner. Bu, hatalı servisi izole ederek sistemin kalan kısmının çalışmaya devam etmesini sağlar. Circuit breaker olmadan, yavaş bir servis tüm caller'ları tıkar ve zincirleme çöküş (cascading failure) olur. Üç durum: closed → open → half-open → closed.
Üç durum
closed: normal durum, çağrılar gider. open: çağrılar engellenir, hemen hata döner. half-open: süre dolunca bir deneme çağrı yapılır; başarılı olursa closed, başarısız olursa open kalır.
Örnek: if (this.state === "open") throw new Error("Breaker açık");. open durumunda çağrı hiç yapılmaz; çağıran kod hata alır. half-open durumunda yalnızca bir çağrı yapılır ve sonuca göre durum güncellenir. Bu mekanizma, hatalı servisi sürekli deneyip sistemi yormak yerine, dinlenme süresi tanır. Breaker'ın eşik değeri (failure threshold) ve dinlenme süresi (timeout) ayarlanabilir; tipik değerler 5 hata ve 30 saniyedir.
Uygulama CircuitBreaker iskeletini yaz
Bir CircuitBreaker sınıfı tanımla. Constructor'da this.failures = 0 ve this.state = "closed" ata. recordFailure metodunda this.failures++ yap ve if (this.failures >= 5) this.state = "open" ekle. console.log ile "Breaker hazır" yaz.
Örnek çözümü göster
class CircuitBreaker {
constructor() {
this.failures = 0;
this.state = "closed";
}
recordFailure() {
this.failures++;
if (this.failures >= 5) this.state = "open";
}
}
console.log("Breaker hazır");
Kendini test et
-
Breaker durumunu tamamla
if (failures >= 5) this.state = "____";
Cevabı göster
if (failures >= 5) this.state = "open";
-
Durumu anlamına eşle
- closed
- Normal, çağrılar gider
- open
- Çağrılar engellenir
- half-open
- Tek deneme yapılır
- threshold
- Hata eşiği
-
Circuit breaker neden kullanılır?
if (failures >= threshold) open()
- Hatalı servisi izole edip sistemi korur
- Daha hızlı yanıt verir
- Veritabanı yedeğini sıkıştırır
- Günlük kayıtlarını siler
Cevabı göster
Hatalı servisi izole edip sistemi korur — Breaker hatalı servisi izole eder.
Sıradaki ders: Özet - Microservice