İçeriğe geç

Cache Warming: Soğuk Başlangıç Problemini Çöz

Sistem başlangıcında ilk kullanıcı 30sn bekler. Cache warming ile bunu önlersin. Pattern'ler: scheduled warmup, traffic-driven, lazy.

Şükrü Yusuf KAYA
11 dakikalık okuma
Orta

Cache Warming: Cold Start'ı Önle

Senaryo: production sisteminiz sabah trafik almıyor. 8:00'da ilk kullanıcı geliyor — cache miss, 30sn bekliyor. Mutsuz.
Çözüm: cache warming — sistem başlangıcında veya periyodik olarak cache'i "ısıtmak."

Pattern 1: Scheduled Warmup#

python
# Her saatte bir cache warmup (cron job)
import schedule
 
def warm_cache():
"""Dummy query gönder, cache'i ısıt."""
client.messages.create(
model="claude-sonnet-4-6",
max_tokens=10,
system=[
{"type": "text", "text": KB, "cache_control": {"type": "ephemeral", "ttl": "1h"}},
],
messages=[{"role": "user", "content": "Sistem hazır mı?"}],
)
 
# Her 50 dakikada 1 (1h TTL ile uyumlu, eviction'dan önce refresh)
schedule.every(50).minutes.do(warm_cache)
 
while True:
schedule.run_pending()
time.sleep(60)
Scheduled warmup — cron benzeri
Avantaj: Predictable, basit. Cache hep sıcak. Dezavantaj: Trafik olmasa bile maliyet (her warmup ~$0.20 Anthropic'te 50K cache için).

Pattern 2: Traffic-Driven (Akıllı)#

python
# Trafik düştüğünde dummy query at, TTL bitmesin
last_request_time = time.time()
CACHE_TTL_SECONDS = 4 * 60 # 5m TTL altında safety margin
 
def on_request():
global last_request_time
last_request_time = time.time()
 
def keep_warm_loop():
"""Background thread: TTL'e yaklaşırsa dummy query at."""
while True:
elapsed = time.time() - last_request_time
if elapsed > CACHE_TTL_SECONDS:
print("Cache soğuyor, refresh...")
warm_cache()
last_request_time = time.time()
time.sleep(30)
 
threading.Thread(target=keep_warm_loop, daemon=True).start()
Traffic-driven warmup
Avantaj: Sadece gerektiğinde warmup. Cost optimum. Dezavantaj: Daha karmaşık state management.

Pattern 3: Lazy Warmup (İlk User Bekler)#

En basit: bir şey yapma, ilk user bekler.
# Hiç warmup yok # İlk user request: 30sn cache write # Sonraki user'lar: ~2sn
Avantaj: Sıfır ekstra maliyet. Dezavantaj: İlk user UX kötü.
Ne zaman: Düşük SLA gereksinimleri, internal tools.

Multi-Cache Warming#

Eğer birden çok cache key'in varsa (örn. multi-tenant, multi-version), her birini warmup yapman gerek:
python
TENANT_IDS = ["tenant-a", "tenant-b", "tenant-c", ...]
 
def warm_all_tenants():
for tid in TENANT_IDS:
client.messages.create(
...
system=[{"text": f"[T:{tid}]\n{KB}", "cache_control": {"ttl": "1h"}}],
...
)
print(f"Warmed {len(TENANT_IDS)} tenant caches.")
 
schedule.every(50).minutes.do(warm_all_tenants)
Multi-tenant warming
Maliyet Uyarısı
Her tenant için ayrı warmup = N × cache write cost. 100 tenant × 0.20=0.20 = 20/saatlik warming. Bütçeyi düşün — büyük scale'de pahalı.

✓ Pekiştir#

Bir Sonraki Derste#

Monitoring & dashboards.

Yorumlar & Soru-Cevap

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

İlgili İçerikler