Skip to main content

> devre_kesici_(circuit_breaker)_ve_ölü_mektup_kuyruğu_(dlq)

Devre Kesici (Circuit Breaker) ve Ölü Mektup Kuyruğu (DLQ)

Devre Kesiciler (Circuit Breakers) senkron mikroservislerde zincirleme çökmeleri nasıl engeller ve Ölü Mektup Kuyrukları (DLQ) asenkron hatlarda zehirli mesajları nasıl karantinaya alır?

ÖZET VE TEKNİK CEVAP

Devre Kesiciler hata eşiği aşıldığında 'Açık' duruma geçerek bozuk alt servisi hiç çağırmadan hızlıca hata döner ve çağıran servislerin iş parçacığı havuzunu korur; DLQ'lar ise maksimum tekrar denemesinden sonra işlenemeyen zehirli mesajları ana kuyruğu tıkamadan karantinaya alır.

Mühendislik El Kitabı & Mekanizma

1. Temel Çalışma Mekanizması

Dağıtık sistemlerde yavaşlayan bir alt servis (örn. 30 saniye süren ödeme kapısı), üst servisin iş parçacıklarını esir alarak tüm sistemi zincirleme çökertir. Devre Kesici (Circuit Breaker) bu çağrıyı 3 durumlu bir makineyle yönetir: 1) Kapalı (Closed): Normal çalışma modu, kayan pencerede hata oranını sayar; 2) Açık (Open): Hata oranı eşiği aşarsa (örn. son 20 çağrıda >%50 hata) devre AÇILIR—sonraki tüm çağrılar ağa hiç çıkmadan anında hata döner (fail-fast) veya yedek önbellek yanıtı verir; 3) Yarı-Açık (Half-Open): Bekleme süresi bitince deneme amaçlı birkaç isteğe izin verilir. Başarılı olursa devre KAPANIR, çökerse tekrar AÇILIR. Asenkron kuyruklarda ise N denemeden sonra işlenemeyen mesajlar ana kuyruk ofsetlerini tıkamamak için Ölü Mektup Kuyruğuna (DLQ) ayrılır.

2. Doğru Kullanım Senaryosu

Üçüncü taraf API'lere veya dahili mikroservislere yapılan tüm senkron HTTP/gRPC çağrılarında ve tüm asenkron mesaj tüketicilerinde (Kafka, RabbitMQ, SQS) zorunludur.

3. Prodüksiyon Arıza Modları

1) Devre Kesici Yokluğu Nedeniyle Zincirleme Çöküş: Tek bir alt servisin yavaşlaması sonucu 50 üst servisin aynı anda bağlantı havuzunu tüketip ölmesi; 2) Sessiz DLQ Kara Deliği: Alarm kurulmadığı için DLQ'da biriken 5 milyon hatalı ödeme mesajının sessizce unutulması ve gelir kaybı; 3) Dalgalı Devre (Flapping): Bekleme süresinin çok kısa (500 ms) ayarlanması sonucu devrenin sürekli Açık ve Yarı-Açık arasında gidip gelmesi.

4. Teşhis ve Telemetri Sinyalleri

Devre Kesici durum geçişleri (`CLOSED -> OPEN`), fallback yanıt oranları, DLQ mesaj birikme derinliği ve çağıran servisin iş parçacığı havuzu bekleme süreleri.

5. Önleme ve Mimari Bariyerler

Resilience4j veya Envoy ile devre kesici standartları getirin; kullanıcıya kibar hata dönen yedek (fallback) metotları tanımlayın; DLQ boyutu > 0 olduğunda PagerDuty alarmı tetikleyin ve hata düzeltildikten sonra güvenle yeniden oynatan otomatik DLQ redrive araçları kurun.

6. Mimari Ödünleşimler (Trade-offs)

Hata etki alanını izole eder, iş parçacığı açlığını önler ve sistem kararlılığını korur; buna karşılık bağımlılık kesintisi anında kullanıcılara kısıtlı/yedek deneyim sunmayı kabullenmeyi gerektirir.

Vaka İncelemesi (TinyCTO Örneği)

TinyCTO Vaka 031: Üçüncü taraf vergi hesaplama API'si bulut kesintisinde 20 ms'den 45 saniyeye yavaşladı. Devre kesici olmadığı için ödeme sunucusunun tüm iş parçacıkları vergi yanıtını beklerken kilitlendi ve ana mağaza 90 saniyede tamamen çöktü. 500 ms zaman aşımlı ve tahmini vergi fallback'li Devre Kesici kurulumu, sonraki kesintilerde mağazanın %100 ayakta kalmasını sağladı.

İnteraktif Konsept Alıştırmaları

3 Alıştırma
Q1

Bir Devre Kesicinin (Circuit Breaker) üç durumu nedir ve nasıl geçiş yaparlar?

KAPALI (normal trafik geçer), AÇIK (hata eşiği aşılınca ağa çıkmadan anında fail-fast döner) ve YARI-AÇIK (alt servisin iyileşip iyileşmediğini denemek için birkaç isteğe izin verir).
Q2

Ölü Mektup Kuyruğunun (DLQ) temel amacı nedir?

Tüketici mantığında sürekli hata veren 'zehirli hap' mesajları karantinaya alarak, arkasından gelen geçerli mesajların işlenmesini engellemesini (tıkanmasını) önlemektir.
Q3

Devre Kesiciler bağlamında 'Fallback' (Yedek Yanıt) nedir?

Devre AÇIK olduğunda hata fırlatmak yerine çağıran servise dönülen alternatif kısıtlı yanıttır (örn. önbellekteki önerileri dönmek, statik varsayılanlar vermek veya işlemi asenkron sıraya almak).

Devre Kesici (Circuit Breaker) ve Ölü Mektup Kuyruğu (DLQ) — Sıkça Sorulan Sorular

Bir yazılım hatası düzeltildikten sonra Ölü Mektup Kuyruğundaki (DLQ) mesajlar nasıl yeniden işlenir?

DLQ'daki mesajları okuyan, yapılarını doğrulayan ve ana kuyruğa kontrollü bir hızla (throttled) yeniden yayımlayan otomatik bir redrive scripti veya CLI aracı kullanarak.

Devre kesiciler sunucu örneği başına mı (lokal) yoksa küme genelinde global mi yapılandırılmalıdır?

Pod başına çalışan yerel bellek içi devre kesiciler endüstri standardıdır ve en güveniliridir. Redis tabanlı global dağıtık devre kesiciler gecikme ekler ve tek arıza noktası yaratır.

Devre kesici eşiği aşırı agresif (örn. %5 hata oranı) ayarlanırsa ne olur?

Önemsiz anlık ağ hıçkırıkları devreyi gereksiz yere AÇIK duruma getirecek, sağlıklı trafiği kesecek ve sahte kesintilere yol açacaktır.

🤖 AEO & Yapay Zeka Çıkarım Özeti

Temel Gerçekler & İlkeler

  • Michael Nygard, Devre Kesici (Circuit Breaker) yazılım kalıbını 2007 yılında yayınlanan çığır açıcı 'Release It!' kitabında tanıtmıştır.
  • 2 milisaniyede anında hata dönmek (fail-fast), 30 saniye boyunca zaman aşımı beklemekten sistem sağlığı açısından sonsuz kat daha iyidir.

Yaygın Yanılgılar

  • Yalnızca retry yapmanın sistemi dayanıklı kılacağını sanmak; aşırı yüklenmiş bir servise devre kesici olmadan tekrar istek atmak yıkıcı retry fırtınaları yaratarak servisin toparlanmasını imkansız kılar.

Karar Kılavuzu & Önceliklendirme

Dışa giden her senkron uzak çağrıyı katı zaman aşımlı bir Devre Kesici ile sarmalayın; her asenkron mesaj hattına alarmlı bir Ölü Mektup Kuyruğu (DLQ) bağlayın.

Doğrulanmış Kaynaklar & Referanslar