← Bütün Patternlər

Circuit Breaker

Xəta verən servisə davamlı zəng etməyib, dövrəni "qırmaqla" sistemin çökməsinin qarşısını alır — evin elektrik sigortası kimi.

🎯
Nə üçün lazımdır?

Bir servis çökəndə ona davamlı zəng etmək Thread Pool-u bitirər və bütün sistemi "zəhərləyər" (Cascading Failure).

🔌
3 Vəziyyəti

CLOSED: Normal işləyir. OPEN: Zəng etmir, dərhal fallback verir. HALF-OPEN: Bəlkə düzəlib? — test edir.

🛠️
Populyar alətlər

Resilience4j, Hystrix (deprecated), Spring Cloud Circuit Breaker, Polly (.NET).

İNTERAKTİV

Vizual İzah

Mərhələ {{ currentStep + 1 }}: {{ steps[currentStep].title }}

A
Service A
{{ cbIcon }}
{{ cbState }}
Circuit Breaker
B
Service B 💥
KONSEPT

3 Vəziyyət (State Machine)

01
🟢 CLOSED (Normal)

Bütün istəklər keçir. Xəta sayğacı tutulur. Xəta həddi keçsə → OPEN-ə keçir.

02
🔴 OPEN (Qırıq)

Heç bir istək keçmir. Dərhal Fallback cavab qaytarılır. Müəyyən müddət gözlənilir.

03
🟡 HALF-OPEN (Test)

Gözləmə bitsə, bir neçə test istəyi göndərilir. Uğurlu olsa → CLOSED. Xəta olsa → OPEN.

JAVA

Kod Nümunəsi — Resilience4j

OrderService.java
@Service
public class OrderService {

    private final PaymentClient paymentClient;

    // Circuit Breaker konfiqurasiyası:
    // failureRateThreshold=50 → 50% xəta olsa OPEN olur
    // waitDurationInOpenState=10s → 10 san gözlər, sonra HALF-OPEN
    // slidingWindowSize=10 → Son 10 istəyə baxır

    @CircuitBreaker(name = "paymentCB", fallbackMethod = "paymentFallback")
    public PaymentResponse processPayment(OrderRequest order) {
        // Normal gediş → Payment Service-ə zəng
        return paymentClient.charge(order.getAmount());
    }

    // Circuit OPEN olduqda bu çağırılır
    public PaymentResponse paymentFallback(OrderRequest order, Throwable t) {
        return new PaymentResponse("PENDING",
            "Payment servisi hazırda əlçatmazdır. Sifariş gözləmədə.");
    }
}
application.yml
resilience4j:
  circuitbreaker:
    instances:
      paymentCB:
        failureRateThreshold: 50        # 50%-dən çox xəta
        waitDurationInOpenState: 10s    # OPEN-də 10 san gözlə
        slidingWindowSize: 10           # Son 10 istəyə görə qərar ver
        permittedNumberOfCallsInHalfOpenState: 3  # HALF-OPEN-da 3 test
✅ Üstünlükləri
  • Cascading Failure-ın qarşısını alır
  • Xətalı servisi "rahat burax" — thread israfını azaldır
  • Fallback ilə user experience qorunur
  • Avtomatik bərpa (Self-Healing)
⚠️ Riskləri
  • Threshold parametrlərini düzgün seçmək çətindir
  • Fallback məntiqinin ciddi test edilməsi lazımdır
  • Həddən artıq tez OPEN olmaq yaramaz (false positive)