Cloudflare Workers + KV ile edge cache kurarsam invalidation'ı nasıl yaparım?
Soru
API'ımın bazı uçları (örn. dinamik fiyat listeleri) sık değişmiyor ama kullanıcıya en yakın lokasyondan çok hızlı dönmeli. Tüm trafiği origin'e (EC2) indirmek yerine Cloudflare Workers ile istekleri edge'de karşılayıp KV'de önbelleğe almak istiyorum. Cache invalidation'ı nasıl kurmalıyım ki origin'de fiyat değişince edge anında güncellensin?
Cevap
Kısa cevap: Sadece TTL’e güvenme — TTL eventual’dır ve süre dolana kadar eski fiyatı servis eder. Invalidation’ı push-based ve event-driven kur.
Senin senaryonda kabul edilemez olan şey “yanlış fiyat” penceresi. Çözüm, değişikliği edge’e beklemeye bırakmak değil, itmek:
- Değişiklikte write-through (veya purge) yap. Origin’de fiyat değiştiği anda, aynı transaction/outbox içinde Cloudflare API’ına çağrı atıp yeni değeri KV’ye yaz ya da key’i sil. Böylece güncelleme yazma işleminin parçası olur, ayrı bir “umarım çalışır” adımı değil.
- KV’yi kaynak değil, cache gör. Doğruluk kaynağın origin DB’dir; KV onun hızlı bir kopyasıdır. Bu zihniyet, KV bozulduğunda/tutarsız kaldığında origin’den yeniden besleyebilmeni sağlar.
- Key’i entity+version ile kur. Her değeri bir versiyonla damgala (
price:42:v7gibi). Worker, eski versiyonu görürse serve-stale-while-revalidate yapıp arkada güncelleyebilir; kullanıcı beklemez ama yanlış da almaz. - Kısa TTL’i emniyet ağı olarak bırak. Push invalidation bir sebeple kaçarsa, kısa TTL en kötü ihtimalle eskiliği birkaç saniyeyle sınırlar. TTL tek savunma değil, son savunma olsun.
- KV’nin global eventual consistency’sini kabul et. KV yazımları dünyaya yayılırken birkaç saniye sürebilir; küçük bir tutarsızlık penceresi kaçınılmaz. Anlık global doğruluk gerekiyorsa KV yanlış katmandır — o zaman origin’e git veya farklı bir tutarlılık modeli seç.
Sonuç: Ben olsam değişiklikte write-through (ya da purge) + kısa TTL emniyet ağı + versiyonlu key üçlüsünü kurardım. TTL-only çözüm fiyat gibi para etkileyen veride yanlış; push-based invalidation ile origin değiştiği an edge güncellenir. KV’nin saniyelik yayılma penceresini bilerek tasarla — onu kaynak değil, hızlı ve tazelenebilir bir cache olarak kullan.
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.