← Bütün Patternlər
🚢

Bulkhead

Gəminin sualtı bölmələri kimi, Thread Pool-ları ayırmaq — bir servis çöksə belə digərlərini təsirlənməyə qoymamaq.

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

Bir servisə gedən istəklər bütün Thread Pool-u tutarsa, digər yaxşı işləyən servislər üçün thread qalmaz — Cascading Failure olur.

🏊
Necə işləyir?

Hər downstream servisi üçün ayrıca izolə olunmuş Thread Pool / Semaphore yaradılır. Birinin bitməsi digərinə təsir etmir.

🛠️
Populyar alətlər

Resilience4j Bulkhead, Hystrix (Thread Pool Isolation), Kubernetes Resource Limits.

İNTERAKTİV

Vizual İzah

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

{{ pool.name }}
{{ pool.used }}/{{ pool.total }} thread
{{ pool.service }}
JAVA

Kod Nümunəsi — Resilience4j Bulkhead

ProductService.java
@Service
public class ProductService {

    // Payment üçün maks 5 paralel thread
    @Bulkhead(name = "paymentPool", fallbackMethod = "paymentBusy")
    public String callPaymentService(Long orderId) {
        return paymentClient.process(orderId);
    }

    // Inventory üçün maks 10 paralel thread
    @Bulkhead(name = "inventoryPool", fallbackMethod = "inventoryBusy")
    public String callInventoryService(Long productId) {
        return inventoryClient.checkStock(productId);
    }

    // Thread bitəndə burası çağırılır
    public String paymentBusy(Long orderId, Throwable t) {
        return "Payment servisi məşğuldur. Sifariş növbəyə alındı.";
    }
}
application.yml
resilience4j:
  bulkhead:
    instances:
      paymentPool:
        maxConcurrentCalls: 5       # Maks 5 paralel zəng
        maxWaitDuration: 500ms       # 500ms gözlər, sonra rədd edər
      inventoryPool:
        maxConcurrentCalls: 10
        maxWaitDuration: 1s
✅ Üstünlükləri
  • Xəta izolyasiyası — bir pool yansa digəri yanmaz
  • Thread resurslarının effektiv idarəsi
  • Circuit Breaker ilə birlikdə güclü izolyasiya
⚠️ Riskləri
  • Thread Pool ölçüsünü düzgün seçmək çətindir
  • Artıq pool yaratmaq resurs israfına yol açar
  • Debug etmək bir az mürəkkəbləşir