ÖZET VE TEKNİK CEVAP
Devre Kesici (Circuit Breaker), çöken alt servisleri korumak için Kapalı durumdan Açık duruma geçerek hızlı hata verir; kritik Yarı-Açık (Half-Open) durumu ise iyileşmeyi test etmek için yıkıcı bir sürü istilası yaratmadan yalnızca az sayıda kontrollü deneme isteğine izin verir.
Mühendislik El Kitabı & Mekanizma
1. Temel Çalışma Mekanizması
Harici bir API veya veritabanı çökmeye başladığında ona istek ve yeniden deneme yağdırmaya devam etmek iyileşmesini imkansız kılar. Devre Kesici `OPEN` (Açık) konumuna geçerek istekleri hızlıca reddeder. Soğuma süresinden sonra `HALF-OPEN` (Yarı-Açık) durumuna geçer. O anda bekleyen binlerce istek aynı anda salınırsa toparlanan servis anında tekrar çöker (Sürü İstilası). Gelişmiş devre kesiciler yarı-açık durumda katı bir test kotası uygular.
2. Doğru Kullanım Senaryosu
Yarı-Açık (Half-Open) durumu, çöken alt bağımlılığın sağlığına kavuşup kavuşmadığını değerlendirmek amacıyla sisteme yalnızca sınırlı sayıda deneme isteğinin geçişine izin verilen test aşamasıdır.
3. Prodüksiyon Arıza Modları
Sınırlı bir YARI-AÇIK test aşaması olmadan doğrudan AÇIK'tan KAPALI'ya geçip anında sürü istilası çöküşünü tetiklemek. AÇIK durumda bekleme süresini 500 ms gibi çok kısa tutarak devrenin sürekli açık-kapalı arasında makineli tüfek gibi salınmasına yol açmak. Zarif bir geri dönüş (fallback) işleyicisi yazmayıp devre kesici retlerinin kullanıcılara ham HTTP 500 hatası olarak yansımasına sebep olmak.
4. Teşhis ve Telemetri Sinyalleri
iyileşmekte olan veritabanının devre sıfırlandığı an binlerce birikmiş istekle tekrar çökmesi, devre kesicinin açık ve kapalı arasında çılgınca salınım yapması, sağlıklı servise giden devrenin açık takılı kalıp trafiği kesmesi
5. Önleme ve Mimari Bariyerler
Toparlanan alt servisleri korumak için `permittedNumberOfCallsInHalfOpenState` değerini 5-10 gibi küçük bir sabit değere ayarlayın. Arka arkaya başarısız olan yarı-açık denemelerinde açık kalma bekleme süresine (`waitDurationInOpenState`) üstel geri çekilme çarpanı uygulayın. Salınım yapan servisleri anında yakalamak için devre geçişlerini Prometheus metrikleriyle (`resilience4j_circuitbreaker_state`) izleyin.
6. Mimari Ödünleşimler (Trade-offs)
Kısıtlanmış Yarı-Açık denemeleri olmadan, toparlanmaya çalışan veritabanları ve servisler ertelenmiş trafik tsunamisiyle tekrar tekrar öldürülür ve sistem sonsuz bir çöküş-açılış salınımına hapsolur.
Vaka İncelemesi (TinyCTO Örneği)
Üretim sınıfı bir Devre Kesici (Resilience4j veya Envoy) üç farklı durum makinesi aşamasında çalışır: 1. **CLOSED (Kapalı - Normal):** Tüm istekler geçer. Kayan bir pencerede (son 100 çağrı) hata oranı izlenir. Hata oranı eşiği (örn. >%50) veya yavaş çağrı oranı %70'i aşarsa devre `OPEN` durumuna geçer. 2. **OPEN (Açık - Hızlı Hata):** Ağ bağlantısına dokunulmadan tüm çağrılar `CallNotPermittedException` ile 0 ms'de hızlıca reddedilir ve geri dönüş (fallback) kodları çalışır. 3. **HALF-OPEN (Yarı-Açık - Sınırlı Deneme):** Bekleme süresi (15 saniye) dolunca devre `HALF-OPEN` olur. `permittedNumberOfCallsInHalfOpenState = 10` ayarlanır. Gelen binlerce istekten yalnızca 10 tanesine izin verilir, diğerleri hızlı hata almaya devam eder. 10 istek de başarılıysa devre `CLOSED` durumuna döner; biri bile başarısız olursa tekrar `OPEN` durumuna geçer.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaBir Devre Kesicide Yarı-Açık (Half-Open) durumunun birincil işlevi nedir?
Devre Kesici Yarı-Açık durumdayken deneme isteklerinden biri başarısız olursa ne olur?
Devre Kesici Yarı-Açık Durumu ve Sürü İstilası Koruması — Sıkça Sorulan Sorular
Bir ödeme ağ geçidi aşırı yük altında çöküyor. 30 saniyelik AÇIK durumdan sonra API'niz `permittedCalls = 5` ile YARI-AÇIK duruma geçiyor. Tam o saniyede gelen 500 eşzamanlı müşteri isteğine ne olur?
Sağlığı test etmek için ödeme ağ geçidine tam olarak 5 istek iletilirken, kalan 495 istek anında geri dönüş (fallback) yanıtı alır. Yarı-açık trafiğini küçük bir test kotasıyla sınırlamak, toparlanan servisin birikmiş müşteri yüküyle tekrar ezilmesini engeller.
Sürekli salınım yapan bir devre kesici (her 2 saniyede bir Açık ve Kapalı arasında gidip gelen) dağıtık sistemler için neden tehlikelidir?
Zorlanan alt servise aralıklı olarak ani trafik dalgaları göndererek toparlanmasını engeller ve kullanıcılara öngörülemez gecikme dalgalanmaları yaşatır. Salınım, alt servis önbelleklerinin ve bağlantılarının stabil şekilde ısınmasını engeller. Başarısız denemelerde açık kalma süresi üstel artırılmalıdır.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸Devre Kesici (Circuit Breaker), çöken alt servisleri korumak için Kapalı durumdan Açık duruma geçerek hızlı hata verir; kritik Yarı-Açık (Half-Open) durumu ise iyileşmeyi test etmek için yıkıcı bir sürü istilası yaratmadan yalnızca az sayıda kontrollü deneme isteğine izin verir.
- ▸Yarı-Açık (Half-Open) durumu, çöken alt bağımlılığın sağlığına kavuşup kavuşmadığını değerlendirmek amacıyla sisteme yalnızca sınırlı sayıda deneme isteğinin geçişine izin verilen test aşamasıdır.
Yaygın Yanılgılar
- ✗Sınırlı bir YARI-AÇIK test aşaması olmadan doğrudan AÇIK'tan KAPALI'ya geçip anında sürü istilası çöküşünü tetiklemek.
Karar Kılavuzu & Önceliklendirme
Kısıtlanmış Yarı-Açık denemeleri olmadan, toparlanmaya çalışan veritabanları ve servisler ertelenmiş trafik tsunamisiyle tekrar tekrar öldürülür ve sistem sonsuz bir çöküş-açılış salınımına hapsolur.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL-DOC]Circuit Breaker Half-Open State & Thundering Herd Probing Specification— TinyCTO Architectural Standards
