Graceful degradation: kritik olmayan servisleri yük altında nasıl izole ederim?
Soru
Black Friday'de sisteme aşırı yük bindi, DB CPU'su %98'e ulaştı. Sitenin tamamen çökmesini engellemek için graceful degradation uygulamak istiyorum. Kullanıcı sepete ekleyip ödeme yapabilirken "Önerilen Ürünler", "Benzer Ürünler", "Yorumlar" gibi kritik olmayan servisleri dinamik olarak nasıl kapatır ya da sahte veriye yönlendiririm?
Cevap
Kısa cevap: Graceful degradation bir kod tekniği değil, bir önceden karar verme disiplinidir. Neyin kritik, neyin lüks olduğuna Black Friday gelmeden karar ver; gerisi flag açıp kapatmak.
Asıl problem şu: %98 CPU’da hangi servisi kapatacağını düşünmeye başlarsan çoktan kaybetmişsindir. Çekirdek akış (ürünü gez, sepete at, ödeme yap) her zaman ayakta kalmalı; “olsa iyi” olanlar feda edilebilir olmalı.
- Kritik ile lüksü ayır ve etiketle. Gez, sepet, checkout kritik. Önerilen ürünler, benzer ürünler, yorumlar lüks. Her lüks bileşeni bağımsız kapatılabilir bir feature flag arkasına al. Karar bugün verilmeli, kriz anında değil.
- Her lüks servise kısa timeout + statik fallback koy. Öneri servisi 200ms’de cevap vermezse bekleme — boş dön ya da cache’lenmiş/mock listeyi göster. Böylece yavaş bir öneri servisi checkout’u asla aşağı çekemez.
- Kill-switch ile anında devre dışı bırak. Yük altında tek bir flag’le tüm lüks bileşenleri kapatabil ya da mock veriye yönlendir. Bu, deploy gerektirmeyen, canlıda anında etki eden bir anahtar olmalı.
- Load shedding ile DB’yi koru. Kritik olmayan endpoint’ler için erkenden
503dön; o istekleri DB’ye hiç ulaştırma. Birkaç saniye fazladan yük binmeden veritabanını kurtarmanın yolu, talebi kapıda reddetmek. - Çekirdek yolu bulkhead ile izole et. Kritik ve kritik olmayan trafiğe ayrı bağlantı havuzu / worker ayır. Böylece lüks trafiğin patlaması checkout’un bağlantı havuzunu açlığa düşüremez.
Sonuç: Ben olsam flag’leri ve fallback’leri önceden kurar, “Black Friday anahtarlarını” gün gelmeden prova ederdim. Test edilmemiş bir kill-switch, kriz anında çalışacağına dair bir tahmindir. %98 CPU’da doğaçlama yapmak değil, önceden tanımlanmış bir senaryoyu çalıştırmak istiyorsun.
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.