Kaos Anında Sunucunu Kurtar: Yazılımın Hayatta Kalma Kiti (Resiliency 101) 🛡️

Kaos Anında Sunucunu Kurtar: Yazılımın Hayatta Kalma Kiti (Resiliency 101) 🛡️



Resiliency 101


Gece saat 03:00. Telefonun acı acı çalıyor. Bildirim ekranında o korkunç mesaj: "Server 500 Error. Sistem çöktü!"

Yazılımcının en büyük kabusu kodun çalışmaması değil, çalışan kodun yük altında "patlamasıdır". Peki, Netflix veya Amazon gibi devler milyonlarca isteği nasıl "bana mısın" demeden karşılıyor? Cevap: Kodun sadece çalışmasını değil, dayanıklı (resilient) olmasını sağlıyorlar.

Kahveni al, arkana yaslan. Sunucularını kaostan koruyacak 4 süper gücü anlatıyorum. ☕🚀

1. Circuit Breaker (Şalteri İndir, Rahatla) ⚡


Evin elektrik tesisatını düşün. Bir priz kısa devre yaparsa ne olur? Sigorta atar ve tüm evi yakmaktan seni kurtarır.

Yazılımda da durum aynı. A Servisi, B Servisine istek atıyor ama B Servisi cevap vermiyor, can çekişiyor. Sürekli istek atıp onu darlamanın alemi yok, değil mi? Circuit Breaker burada devreye girer:Olay: Hatalar belli bir eşiği geçerse (örn: 5 saniyede 10 hata), devre "Açık" konuma gelir.
Sonuç: İstekler anında kesilir, servise gitmez.
Fayda: Sorunlu servis nefes alır, kendini toparlar. Sen de boşuna beklemezsin.

Bu arada, aramızda production ortamında sonsuz döngüye girip sistemi kilitleyen var mı? Yorumlarda itiraf edin, söz aramızda kalacak! 👇

2. The Thundering Herd (Büyük İndirim İzdihamı) 🐂


Black Friday indiriminde mağaza kapılarının açıldığı anı hayal et. Binlerce insan aynı anda içeri dalıyor. Sonuç? Kapı kırılır, kimse içeri giremez.

Sistemlerde bu genellikle Cache (Önbellek) süresi dolduğunda yaşanır.Senaryo: Çok popüler bir verinin cache süresi biter.
Kaos: O an gelen 10.000 istek aynı anda "Cache boş, Veritabanına sorayım" der.
Sonuç: Veritabanı nakavt.
Çözüm: İstekleri sıraya sokmak veya cache süresini rastgele (jitter) zamanlarla yenilemek.

Bu yazıyı backend ile uğraşan o "sabırsız" arkadaşına gönder, belki veritabanını kurtarırsın! ✈️

3. Backpressure (Kardeşim Bi' Yavaşla!) ✋


Lucy'nin çikolata fabrikası sahnesini bilir misin? Banttan çikolatalar o kadar hızlı gelir ki, paketleyenler yetişemez ve çikolataları yemeye başlarlar. :D

Eğer bir servis (Producer) çok hızlı veri üretiyor ama diğer servis (Consumer) bunu işleyemiyorsa sistem tıkanır.

Backpressure, tüketen servisin üreticiye "Ben şiştim, biraz yavaş gönder ya da gönderme!" sinyali vermesidir. Bu sayede hafıza dolmaz, sistem patlamaz.
4. Graceful Shutdown (Efendi Gibi Çıkış Yapmak) 🎩

Bilgisayarın fişini aniden çekmekle, "Bilgisayarı Kapat"a basmak arasındaki farktır.

Bir sunucuyu güncelleyeceğin zaman veya kapatacağın zaman, o an işlemde olan (örneğin ödeme yapan) kullanıcılar ne olacak? Fişi çekersen paraları yanar!

Graceful Shutdown:Sistem "Kapanıyorum" sinyalini alır.
Yeni istek kabul etmeyi durdurur 🛑.
Mevcut işlemleri nazikçe tamamlar.
Ve huzur içinde kapanır.
Özetle...

Sistem sağlığı sadece kodun "bug-free" olması değil, fırtına çıktığında geminin batmamasıdır. Bu desenleri mimarine eklersen, gece 3'te gelen o telefonlar yerini mışıl mışıl uykulara bırakır. 😴

Senin favori "hayatta kalma" yöntemin hangisi? Ya da "keşke bunu bilseydim" dediğin bir anı? Yorumlarda buluşalım! 👇

Yorumlar