CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

index.js
// CircuitBreaker sınıfını tanımla
// buraya yaz

// "Breaker hazır" yazdır
// buraya yaz

Örnek çözüm

index.js
class CircuitBreaker {
  constructor() {
    this.failures = 0;
    this.state = "closed";
  }
  recordFailure() {
    this.failures++;
    if (this.failures >= 5) this.state = "open";
  }
}
console.log("Breaker hazır");

Beklenen çıktı

Breaker hazır

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Breaker durumunu tamamla

Soru
if (failures >= 5) this.state = "____";
Cevap
if (failures >= 5) this.state = "open";

Açıklama: 5 hata sonrası breaker open olur.

2 Durumu anlamına eşle

Kavram Anlamı
closed Normal, çağrılar gider
open Çağrılar engellenir
half-open Tek deneme yapılır
threshold Hata eşiği

3 Circuit breaker neden kullanılır?

index.js
if (failures >= threshold) open()
  • Hatalı servisi izole edip sistemi korur Doğru cevap
  • Daha hızlı yanıt verir
  • Veritabanı yedeğini sıkıştırır
  • Günlük kayıtlarını siler

Açıklama: Breaker hatalı servisi izole eder.

İleri seviye bölümündeki tüm dersler