Skip to main content

> devre_kesici_yarı-açık_durumu_ve_sürü_i̇stilası_koruması

Devre Kesici Yarı-Açık Durumu ve Sürü İstilası Koruması

Yüksek verimli canlı mimarilerde Devre Kesici Yarı-Açık Durumu ve Sürü İstilası Koruması yapısını nasıl doğru kurar ve yönetirsiniz?

Ö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ırma
Q1

Bir Devre Kesicide Yarı-Açık (Half-Open) durumunun birincil işlevi nedir?

Çöken alt servisin toparlanıp toparlanmadığını yıkıcı bir sürü istilası yaratmadan test etmek için sisteme yalnızca sınırlı sayıda deneme isteğinin geçişine izin vermek.
Q2

Devre Kesici Yarı-Açık durumdayken deneme isteklerinden biri başarısız olursa ne olur?

Devre anında tekrar AÇIK (OPEN) durumuna geçer, soğuma süresini baştan başlatır ve hızlı hata vermeye devam eder.

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