Circuit Breaker — dağınık sistemlerde hataların zincirleme yayılmasını ve kötüleşmesini önlemek için bir mimari desendir. Temel prensibi şudur: harici bir sisteme çağrılardan sorumlu olan bileşen, işlemlerin başarısını kontrol eder. Eğer başarısız denemeler çok fazla olursa, Circuit Breaker otomatik olarak "açılır" ve sonraki çağrılar geçmez, sistem iyileşmeye başlamadan önce.
Örnek: Eğer Auth mikroservisi yanıt vermezse, Order servisi, Circuit Breaker kullanarak, geçici olarak istekleri göndermeyip hemen bir hata döner, böylece bağımlı sisteme yüksek bir yüklenme önlenir.
Python'da bir kod örneği (pybreaker kütüphanesini kullanarak):
import pybreaker import requests breaker = pybreaker.CircuitBreaker(fail_max=3, reset_timeout=30) @breaker def call_service(): return requests.get("https://api.service.com/data") try: response = call_service() except pybreaker.CircuitBreakerError: print("Hizmet geçici olarak kullanılamıyor. Lütfen daha sonra deneyin.")
Anahtar özellikler:
Circuit Breaker, Retry ile aynı şey midir?
Hayır. Retry — başarısız olan işlemleri tekrar dener, Circuit Breaker ise çok sayıda hata durumunda çağrı zincirini keser ve sisteme dinlenme fırsatı verir. Bu desenler genellikle birleştirilir: retry içinde, circuit breaker dışarıda.
Kendi mikroservislerim arasında Circuit Breaker uygulamak gerekli mi, aynı anda dağıtılanlar için?
Evet, eğer servisler hata toleranslı veya ağ hataları yaşayabiliyorsa. Hiç kimse yapılandırma hatalarından veya yükten sigortalı değildir, sizin mikroservisleriniz bile.
Circuit Breaker sadece harici API entegrasyonlarında mı gereklidir?
Hayır, bu desen herhangi bir güvenilmez etkileşim için kullanılabilir, iç yapınızda da dahil: veritabanları, önbellek, mesaj kuyrukları.