⚡ÖZET VE TEKNİK CEVAP
Yüksek trafik alan bir önbellek anahtarının süresi bittiğinde (saniyede 10.000 kişinin baktığı anasayfa banner'ı veya son dakika haberi), binlerce eşzamanlı istek aynı anda önbellek ıskalaması (cache miss) yaşar. Standart bir mimaride 10.000 iş parçacığı aynı anda arkadaki veritabanına gidip birebir aynı ağır SQL sorgusunu çalıştırır. Bu duruma Önbellek İzdihamı (Cache Stampede / Thundering Herd) denir: Veritabanı CPU'su anında %100'e vurur, bağlantı havuzu kilitlenir ve tüm sistem çöker. Go (singleflight) ve Envoy proxy ile popülerleşen İstek Birleştirme (Request Collapsing / Singleflight) bunu ağ geçidi katmanında çözer: Aynı GET /api/v1/news/breaking anahtarı için 10.000 istek geldiğinde, gateway tek bir uçuş kilitler, arkadaki veritabanına yalnızca 1 adet tek istek gönderir, diğer 9.999 isteği hafızada bekletir ve dönen tek cevabı bekleyen 10.000 istemcinin tamamına aynı anda dağıtır.
Mühendislik El Kitabı & Mekanizma
6 Boyutlu Mimari Analiz⚙️1. Temel Çalışma Mekanizması
Mekanizma🎯2. Doğru Kullanım Senaryosu
Kapsam⚠️3. Prodüksiyon Arıza Modları
Kritik Risk📡4. Teşhis ve Telemetri Sinyalleri
Metrikler🛡️5. Önleme ve Mimari Bariyerler
Bariyerler⚖️6. Mimari Ödünleşimler (Trade-offs)
ÖdünleşimVaka İncelemesi (TinyCTO Saha Örneği)
Bir son dakika haber sitesi önemli bir haber bildirimi atıldığında sürekli veritabanı çöküşü yaşıyordu. 60 saniyelik Redis önbelleği bittiği anda 50.000 eşzamanlı kullanıcı /api/haberler/son-dakika adresine yükleniyordu. Aynı anda gelen 50.000 SQL sorgusu PostgreSQL sunucusunu 300 milisaniyede kilitliyordu. Ekip Go API Gateway katmanına Singleflight İstek Birleştirme modelini kurdu. Bir sonraki bildirimde önbellek bittiğinde veritabanına yalnızca 1 adet sorgu gitti. Aynı anda gelen 48.200 istek bellekte birleştirildi ve yanıtı 12 milisaniyede aldı. PostgreSQL CPU'su %4 seviyesinde sabit kaldı.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaSingleflight (İstek Birleştirme) mimari deseni hangi problemi çözer?
İstek Birleştirme kişiselleştirilmiş kullanıcı uç noktalarına (ör. `/api/me`) neden KESİNLİKLE uygulanmamalıdır?
İstek Birleştirme (Request Collapsing / Singleflight): Tek Uçuş İstek Tekilleştirme ve Önbellek İzdihamı Koruması — Sıkça Sorulan Sorular
GraphQL DataLoader kütüphanesi İstek Birleştirmeyi nasıl kullanır?
Tek bir GraphQL sorgusunda farklı alanların istediği kayıtları tek bir yürütme anında toplayıp tek bir `WHERE id IN (...)` SQL sorgusunda birleştirerek.
Uçuş lideri olan tek istek bir hatayla sonuçlanırsa ne olur?
Hata bekleyen tüm takipçi isteklere iletilir ve uçuş kilidi anında silinerek bir sonraki isteğin tekrar denemesine izin verilir.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸
İstek Birleştirme aynı anda gelen mükerrer önbellek ıskalama isteklerini tek bir uçuşta birleştirir.
- ▸
Go (
singleflight), NGINX ve GraphQL DataLoader kütüphaneleriyle standartlaşmıştır. - ▸
Önbellek İzdihamı (Cache Stampede) kaynaklı veritabanı çöküşlerini tamamen ortadan kaldırır.
- ▸
Yalnızca herkese açık, kimlik doğrulamasız ve idempotent GET uç noktalarında kullanın.
Yaygın Yanılgılar
- ✗
Yanılgı: Önbellek süresini (TTL) uzatmak izdihamı engeller (Gerçek: Uzun süre sadece çöküşü geciktirir; anahtarın süresi yüksek yük altında bittiğinde sistem yine çöker).
- ✗
Yanılgı: İstek birleştirme harici bir veritabanı kilidi gerektirir (Gerçek: Singleflight tamamen API Gateway veya uygulama katmanında bellek içinde sıfır veritabanı yüküyle çalışır).
Karar Kılavuzu & Önceliklendirme
Veritabanlarını önbellek izdihamlarına karşı korumak için tüm yüksek trafikli okuma uç noktalarında API Gateway ve servis sınırlarında Singleflight istek birleştirme uygulayın.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL_DOCUMENTATION]Package singleflight: Duplicate Function Call Suppression— Go Standard Library Sub-repositories (Google)
