Skip to content

Cache Stampede: Yeni Model/Version Deploy Sonrası

Cache anında geçersiz olduğunda (model değişti, KB versionu artırdın) tüm trafik prefill'e gider. Cache stampede.

Şükrü Yusuf KAYA
10 min read
Intermediate

Anti-Pattern 4: Cache Stampede

Senaryo: Cuma 17:00'de yeni model versiyonunu (
claude-sonnet-4-7
) deploy ettin. Eski cache (
claude-sonnet-4-6
) artık kullanılmıyor.
Pazartesi sabahı 09:00'da 5000 user aynı anda sisteme gelir. Cache boş. Hepsi cache write yapar. 5000 × 0.20=0.20 = 1000 anlık spike. Latency 30sn'ye çıkar.
Bu cache stampede.

Stampede'nin Sebepleri#

  1. Model değişimi
    claude-sonnet-4-6
    claude-sonnet-4-7
    , ayrı cache pool'lar
  2. KB versiyon değişimi
    KB_VERSION
    artırdın (Modül 7 Ders 49)
  3. System prompt değişimi — yeni instruction added, prefix değişti
  4. Tool listesi değişimi — yeni tool eklendi
  5. Provider eviction — cache fleet maintenance, batch evict

Önleme 1: Gradual Rollout#

python
def get_model_version(user_id):
"""Yeni modeli %10'ar adım deploy et."""
rollout_pct = get_feature_flag("new_model_pct", 0)
user_hash = hash(user_id) % 100
if user_hash < rollout_pct:
return "claude-sonnet-4-7" # new
return "claude-sonnet-4-6" # old
 
# Gün 1: rollout_pct=10 (cache stampede %10 trafiğe sınırlı)
# Gün 2: 25
# Gün 3: 50
# Gün 4: 75
# Gün 5: 100
Gradual rollout
Bu sayede stampede yumuşatılır — %10 trafik anlık cache miss yapar, sonra sıcak; %25, %50 ...

Önleme 2: Cache Warming Before Deploy#

bash
# Yeni KB version'u deploy etmeden 10 dakika önce warmup
# (saatte 100 sorgu × 10dk = 17 sorgu kadar ama her biri farklı entity, yeterli warmup)
python warmup_cache.py --version v2026-04-01 --target-queries 50
 
# Şimdi production'a deploy et
git push origin main
Pre-deploy warmup

Önleme 3: Rate Limiting#

python
# Cache miss durumunda rate limit ekle (concurrent prefill limiti)
import asyncio
 
PREFILL_SEMAPHORE = asyncio.Semaphore(20) # max 20 paralel cache write
 
async def query_with_semaphore(prompt):
async with PREFILL_SEMAPHORE:
return await client.messages.create(...)
Concurrent prefill limit
Bu sayede stampede sırasında provider rate-limited değil sen rate-limit edersin → kullanıcı bekler ama sistem ayakta kalır.

Önleme 4: Stale-While-Revalidate Pattern#

Eski cache (eski version) geçici olarak hâlâ kullanılır, yeni cache asenkron oluşur:
python
# Pseudo-code
old_cache_version = "v2026-03"
new_cache_version = "v2026-04"
GRACE_PERIOD = 1 * 3600 # 1 saat eski cache hâlâ aktif
 
if time_since_deploy < GRACE_PERIOD:
# Eski version'u kullan (cache hit)
return query_with_version(old_cache_version)
else:
# Yeni version'a geç
return query_with_version(new_cache_version)
```
 
**Avantaj:** Stampede yok, kullanıcı kesintisiz.
**Dezavantaj:** Eski version'da bug varsa hâlâ deploy gecikiyor gibi davranır.
Stale-while-revalidate

✓ Pekiştir#

Bir Sonraki Derste#

Modül 12 bitirme sınavı.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

Related Content