Devre Kesici: Yavas Bir Dis Servis Sitenizi Cokertmesin

Devre kesici deseni nedir? Yavas dis servislerin zincirleme cokmeye yol acmasini onleyen pratik yaklasim. Devre Kesici: Yavaş Bir Dış Servis Sitenizi…

Devre Kesici: Yavas Bir Dis Servis Sitenizi Cokertmesin
İçindekiler
  1. Devre Kesici: Yavaş Bir Dış Servis Sitenizi Çökertmesin
  2. Arıza Nasıl Yayılır?
  3. İlk Savunma: Zaman Aşımı
  4. Zaman Aşımı Neden Yetmez?
  5. Devre Kesici Nasıl Çalışır?
  6. Yedek Davranış
  7. Eşik Değerleri
  8. İzleme ve Uyarı
  9. Bölmeli Yalıtım
  10. Nereye Uygulanmalı?
  11. Sonuç
  12. Sıkça Sorulan Sorular (SSS)
  13. Küçük bir bileşen tüm siteyi nasıl çökertiyor?
  14. Zaman aşımı koymak yetmez mi?
  15. Eşik değerini nasıl seçmeliyim?
  16. Yedek davranışı her yerde kullanabilir miyim?

Devre Kesici: Yavas Bir Dis Servis Sitenizi Cokertmesin

Devre Kesici: Yavaş Bir Dış Servis Sitenizi Çökertmesin

Kullandığınız kargo takip servisi yavaşladı. Sitenizde kargo bilgisi gösteren tek bir bileşen vardı ama tüm site açılmaz oldu. Sizin sunucunuzda hiçbir sorun yoktu.

Bu yazı, dış servis arızalarının yayılmasını engellemeyi ele alıyor.

Arıza Nasıl Yayılır?

Zincir öngörülebilir biçimde ilerler:

  1. Dış servis yavaşlar.
  2. İstekler yanıt bekler.
  3. İşçi süreçler dolar.
  4. Yeni istekler sıraya girer.
  5. Tüm site yanıt veremez.

Üçüncü adım kritik dönüm noktasıdır: her bekleyen istek bir işçi süreci meşgul eder ve o süreç başka hiçbir isteğe bakamaz — yavaş bir servis, sunucunuzun tüm kapasitesini bekleyerek tüketir.

Sunucu işlemcisi boştur, belleği rahattır ama site açılmaz.

Beşinci adım ise kargo bilgisiyle hiç ilgisi olmayan sayfaları da kapsar.

İlk Savunma: Zaman Aşımı

  • Her dış çağrının süre sınırı olmalı.
  • Varsayılan genellikle çok uzundur.
  • Bağlantı ve okuma ayrı ayarlanır.

İkinci madde en sık atlanan ayardır: çoğu HTTP kütüphanesinin varsayılan zaman aşımı yoktur veya dakikalarla ölçülür — açıkça belirtmezseniz uygulamanız yanıt gelene kadar sonsuza kadar bekleyebilir.

Bu, arızanın yayılmasının teknik nedenidir.

Üçüncü madde ise iki farklı senaryoyu kapsar. Sunucuya hiç bağlanılamaması ile bağlanıp yanıt gelmemesi farklı sürelerle sınırlanmalıdır.

Ancak zaman aşımı tek başına yetmez ve nedeni sonraki bölümdedir.

Zaman Aşımı Neden Yetmez?

Durum Sonuç
Servis tamamen çökmüş Her istek süre sınırı kadar bekler
Yüz eşzamanlı istek Hepsi boşuna bekler
Kaynak yine tükenir Yavaşça ama tükenir

Bu tablo temel bir gerçeği gösterir: servisin çöktüğü kesin olsa bile her istek yeniden deneyip zaman aşımını beklemeye devam eder — yüzlerce istek, çalışmadığı bilinen bir servis için boşuna kaynak tüketir.

Devre kesici tam olarak bu israfı önlemek için vardır.

Mantık basittir: servis çalışmıyorsa denemeyi bırak.

Devre Kesici Nasıl Çalışır?

  1. Kapalı durum: İstekler normal geçer.
  2. Hata sayacı artar.
  3. Eşik aşılınca açık duruma geçer.
  4. Açık durumda istekler hemen reddedilir.
  5. Bir süre sonra deneme yapılır.

Dördüncü adım asıl kazancı sağlar: devre açıkken uygulama dış servisi hiç aramaz ve isteği anında reddeder — bekleme süresi sıfırdır ve hiçbir işçi süreç meşgul olmaz.

Site, o özellik olmadan normal hızda çalışmaya devam eder.

Beşinci adım ise toparlanmayı sağlar. Belirli bir süre sonra tek bir deneme isteği gönderilir.

Başarılı olursa devre kapanır ve normal akışa dönülür.

Yedek Davranış

Senaryo Yedek davranış
Kargo takip "Bilgi geçici olarak alınamıyor"
Öneri motoru Sabit popüler ürünler
Döviz kuru Son bilinen değer
Ödeme sağlayıcı Açık hata, işlem durur

Üçüncü satır çok işe yarayan bir desendir: son başarılı yanıtı önbellekte tutmak, servis çöktüğünde eski ama makul bir değer sunmanızı sağlar — kullanıcı hiçbir şey görmemektense biraz eski bir bilgi görür.

Bu, döviz kuru ve stok durumu gibi yavaş değişen verilerde uygundur.

Dördüncü satır ise sınırı gösterir. Ödeme gibi kritik akışlarda yedek davranış uydurulamaz; işlem açıkça durdurulmalıdır.

Yanlış bir yedek davranış, sessiz veri hatasından daha kötüdür.

Eşik Değerleri

  • Hata sayısı eşiği.
  • Hata oranı eşiği.
  • Açık kalma süresi.
  • Deneme isteği sayısı.

İkinci madde daha akıllı bir ölçüttür: sabit hata sayısı yerine hata oranı kullanmak, düşük trafikte gereksiz açılmayı ve yüksek trafikte geç açılmayı birlikte önler — on istekten beşi başarısızsa sorun vardır, bin istekten beşi başarısızsa yoktur.

Sabit sayı bu iki durumu ayıramaz.

Üçüncü madde ise toparlanma hızını belirler. Çok kısa tutmak, çöken servise sürekli yük bindirir.

Çok uzun tutmak ise servis düzeldikten sonra gereksiz bekleme üretir.

İzleme ve Uyarı

  1. Devre durumunu metrik yapın.
  2. Açılma anında uyarı üretin.
  3. Yedek davranış kullanımını sayın.

İkinci madde teşhis süresini kısaltır: devre kesicinin açılması, bir dış servisin çöktüğünün en net ve en erken sinyalidir — kullanıcı şikayeti gelmeden önce hangi entegrasyonun bozulduğunu size söyler.

Bu uyarı olmadan sorun ancak dolaylı belirtilerle fark edilir.

Üçüncü madde ise etkiyi ölçer. Kaç kullanıcının yedek davranışla karşılaştığı bilinmelidir.

Birinci madde ise geçmiş analizini mümkün kılar ve hangi servisin ne sıklıkla sorun çıkardığını gösterir.

Bölmeli Yalıtım

Yaklaşım Etkisi
Ortak kaynak havuzu Bir servis hepsini tüketir
Servis başına ayrı havuz Etki sınırlanır

İkinci satır ek bir koruma katmanıdır: her dış servise ayrı bir eşzamanlılık sınırı koymak, o servis çöktüğünde yalnızca kendi payını tüketmesini sağlar — geri kalan kapasite diğer işler için ayrılmış kalır.

Bu, devre kesici açılmadan önceki geçiş döneminde bile koruma sağlar.

Gemi bölmelerine benzediği için bu isimle anılır; bir bölme su alsa bile gemi batmaz.

Devre kesici ile birlikte kullanıldığında koruma çok güçlü hâle gelir.

Nereye Uygulanmalı?

  • Tüm dış HTTP çağrıları.
  • Uzak veritabanı bağlantıları.
  • Önbellek sunucusu.
  • Dosya depolama servisi.

Üçüncü madde şaşırtıcı gelebilir ama önemlidir: önbellek sunucusu çöktüğünde uygulamanın onu beklemek yerine doğrudan veritabanına gitmesi gerekir — aksi hâlde performansı artırmak için eklenen katman, sistemi tamamen durduran bir arıza noktasına dönüşür.

Önbellek isteğe bağlı bir hızlandırıcı olmalıdır, zorunlu bir bağımlılık değil.

Dördüncü madde ise görsel sunumunu etkiler ve yer tutucu ile yönetilebilir.

Birinci madde ise en yaygın kullanım alanıdır ve öncelikle uygulanmalıdır.

Dış servis çağrılarını izleyip sınırlayabilmek için sunucu kaynaklarınıza hâkim olmanız gerekir; sanal sunucu altyapı paketleri üzerinde işçi süreç ve bağlantı sınırlarını kendiniz ayarlayabilirsiniz.

Sonuç

Dış servis arızasının tüm siteyi çökertmesinin nedeni tektir: her bekleyen istek bir işçi süreci meşgul eder ve yavaş bir servis sunucunuzun tüm kapasitesini bekleyerek tüketir. Zaman aşımı zorunludur ama yetmez — servisin çöktüğü kesinken bile her istek beklemeye devam eder. Devre kesici bu israfı bitirir. Ve önbelleği unutmayın: hızlandırıcı olsun diye eklenen katman, yedek davranış yoksa sistemi durduran arıza noktasına dönüşür.

Sıkça Sorulan Sorular (SSS)

Küçük bir bileşen tüm siteyi nasıl çökertiyor?

Her bekleyen istek bir işçi süreci meşgul eder ve o süreç başka hiçbir isteğe bakamaz. Yavaş bir dış servis, sunucunuzun tüm kapasitesini bekleyerek tüketir — işlemci boş, bellek rahat ama site açılmaz. Etki, o bileşenle hiç ilgisi olmayan sayfaları da kapsar.

Zaman aşımı koymak yetmez mi?

Yetmez. Servisin çöktüğü kesin olsa bile her istek yeniden deneyip zaman aşımını beklemeye devam eder; yüzlerce istek çalışmadığı bilinen bir servis için boşuna kaynak tüketir. Devre kesici bu israfı önler — açık durumda istek anında reddedilir, bekleme sıfırdır.

Eşik değerini nasıl seçmeliyim?

Sabit hata sayısı yerine hata oranı kullanın. On istekten beşi başarısızsa sorun vardır, bin istekten beşi başarısızsa yoktur — sabit sayı bu iki durumu ayıramaz. Oran kullanmak düşük trafikte gereksiz açılmayı, yüksek trafikte geç açılmayı birlikte önler.

Yedek davranışı her yerde kullanabilir miyim?

Hayır. Döviz kuru veya öneri listesi gibi verilerde son bilinen değeri sunmak makuldür — kullanıcı hiçbir şey görmemektense biraz eski bilgi görür. Ama ödeme gibi kritik akışlarda yedek davranış uydurulamaz; işlem açıkça durdurulmalıdır.