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
OrtaCache 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 bitmesinlast_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 × 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
1. Temeller — Context Penceresi Ekonomisi
Bu Eğitim Hakkında ve Prompt Caching Neden Önemli?
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi
Token Ekonomisi 101: Input vs Output Cost Asimetrisi
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi