Ana içeriğe geç

Circuit Breaker Deseni

İngilizcesi
Circuit Breaker Pattern
Türkçe karşılığı
devre kesici
Okunuşu
sörkit breykır petırn

Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/circuit-breaker

Kısaca

Circuit breaker deseni, arızalı bir bağımlılığa yapılan çağrıları bir süre durdurarak ve zaman aşımlarını beklemek yerine hızlıca hata vererek sistemi korur.

Circuit breaker deseni nedir?

Dağıtık sistemlerde bir servis çoğunlukla ağ üzerinden başkalarına bağımlıdır. Bir bağımlılık yavaşladığında ya da erişilemez olduğunda, istek göndermeyi sürdüren çağıranlar zaman aşımlarını beklerken iş parçacıklarını ve bağlantıları boşa harcar; sorun tüm sistem yavaşlayana kadar yayılabilir, buna kademeli arıza (cascading failure) denir. Circuit breaker deseni, bu uzak çağrıları tekrarlayan hataları fark edip bir süre çağırmayı bırakan bir korumayla sarar.

Bir circuit breaker'ın üç durumu vardır. Kapalı (closed) durumda istekler normal şekilde geçer ve breaker hataları sayar. Hatalar art arda 5 ya da son çağrıların yarısı gibi bir eşiği aştığında açık (open) duruma geçer ve her çağrı, zorlanan servise dokunmadan anında hata verir ya da önbellekteki veri gibi bir yedek yanıt (fallback) döndürür. Bir soğuma süresinden sonra yarı açık (half-open) duruma geçer ve birkaç deneme isteğinin geçmesine izin verir: başarılı olurlarsa yeniden kapanır, başarısız olurlarsa tekrar açılır.

Ad, evinizdeki elektrik sigortasından gelir: çok fazla akım aktığında devreyi keser ve kablolamayı korumak için elektriği kapatır; sorun giderildikten sonra siz onu sıfırlarsınız. Yazılım circuit breaker'ları mikroservislerde, API istemcilerinde ve service mesh'lerde yaygındır ve genellikle sıfırdan yazılmak yerine dayanıklılık kütüphaneleri ya da proxy'ler tarafından sağlanır.

Circuit breaker'lar sıklıkla yeniden denemeler (retry) ve hız sınırlamayla (rate limiting) karıştırılır. Yeniden deneme, başarısız bir çağrıyı başarılı olur umuduyla tekrarlar; bu da aşırı yüklü bir servisi daha da kötüleştirebilir. Circuit breaker ise çağırmayı bilerek durdurur; ikisi birlikte en iyi çalışır: kısa aksaklıklar için yeniden denemeler, daha uzun kesintiler için breaker. Hız sınırlama ise bir servisi çok fazla gelen istekten korurken, circuit breaker çağıranı arızalı bir bağımlılıktan korur.

Bir bakışta

Bir circuit breaker'ın üç durumu vardır. Kapalı: istekler geçer ve hatalar sayılır. Hatalar bir eşiğe ulaştığında açılır: çağrılar zorlanan servise hiç ulaşmadan anında başarısız olur. Bir süre sonra yarı açık duruma geçer ve tek bir deneme isteğini geçirir; o başarılı olursa yeniden kapanır, başarısız olursa yeniden açılır.Kapalıistekler geçerAçıkçağrılar anında başarısızYarı açıktek bir deneme isteğihatalar eşiğe ulaşırbir süre sonradeneme başarısızdeneme başarılı
Evdeki sigorta gibi: bir servis sürekli hata verdiğinde devre kesici ona trafik göndermeyi durdurur, toparlanması için zaman tanır, sonra dikkatlice yeniden dener.

Önemli noktalar

  • Circuit breaker uzak çağrıları sarar ve tekrarlanan hatalardan sonra durdurur.
  • Kapalı çağrıları geçirir, açık hızlıca hata verir, yarı açık ise servisin düzelip düzelmediğini dener.
  • Hızlı hata vermek kademeli arızaları önler ve iş parçacıklarını ile bağlantıları serbest bırakır.
  • Önbellekteki veri ya da varsayılan yanıt gibi yedekler kullanıcı deneyimini kullanılabilir tutar.
  • Yeniden denemelerin ve zaman aşımlarının yerini almaz, onları tamamlar.

Örnek

TypeScript'te minimal bir circuit breakertypescript
let failures = 0;
let openedAt = 0; // when the circuit last tripped open

async function withBreaker<T>(fn: () => Promise<T>): Promise<T> {
  // Open: after 5 failures, fail fast for 30 seconds without calling the service
  if (failures >= 5 && Date.now() - openedAt < 30_000) throw new Error("Circuit open");
  try {
    const result = await fn(); // closed, or a half-open trial after the cooldown
    failures = 0; // success closes the circuit
    return result;
  } catch (err) {
    if (++failures >= 5) openedAt = Date.now(); // trip (or re-trip) to open
    throw err;
  }
}

Sık sorulan sorular

Circuit breaker'ın üç durumu nelerdir?

Kapalı, hatalar sayılırken çağrıların normal aktığı anlamına gelir. Açık, çağrıların servise ulaşmadan anında başarısız olduğu anlamına gelir. Yarı açık ise servisin düzelip düzelmediğini kontrol etmek için soğuma süresinden sonra birkaç deneme çağrısına izin verildiği anlamına gelir.

Circuit breaker ile yeniden deneme (retry) arasındaki fark nedir?

Yeniden deneme, sorun geçici olabilir diye başarısız bir çağrıyı tekrarlar. Circuit breaker ise zorlanan bir servise toparlanma zamanı vermek için tekrarlanan hatalardan sonra çağırmayı bırakır; yeniden denemeler genellikle breaker'ın içinde, denemeler arasında artan bir gecikmeyle çalışır.

Devre açıkken istekler ne olur?

Hızlıca başarısız olurlar; genellikle çağıranın ele alabileceği bir hata verirler ya da önbellekteki veri, varsayılan bir değer veya kullanıcı dostu bir mesaj gibi bir yedek yanıt döndürürler. Bu, çağıranı zaman aşımlarında takılıp kalmak yerine duyarlı tutar.

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar