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
IntermediateAnti-Pattern 4: Cache Stampede
Senaryo: Cuma 17:00'de yeni model versiyonunu () deploy ettin. Eski cache () artık kullanılmıyor.
claude-sonnet-4-7claude-sonnet-4-6Pazartesi sabahı 09:00'da 5000 user aynı anda sisteme gelir. Cache boş. Hepsi cache write yapar. 5000 × 1000 anlık spike. Latency 30sn'ye çıkar.
Bu cache stampede.
Stampede'nin Sebepleri#
- Model değişimi — →
claude-sonnet-4-6, ayrı cache pool'larclaude-sonnet-4-7 - KB versiyon değişimi — artırdın (Modül 7 Ders 49)
KB_VERSION - System prompt değişimi — yeni instruction added, prefix değişti
- Tool listesi değişimi — yeni tool eklendi
- 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: 100Gradual 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 etgit push origin mainPre-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-codeold_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
1. Temeller — Context Penceresi Ekonomisi
Bu Eğitim Hakkında ve Prompt Caching Neden Önemli?
Start Learning1. Temeller — Context Penceresi Ekonomisi
Token Ekonomisi 101: Input vs Output Cost Asimetrisi
Start Learning1. Temeller — Context Penceresi Ekonomisi