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üvenmeyin — TTL eventual’dır ve süre dolana kadar eski fiyatı servis eder. Invalidation’ı push-based ve event-driven kurun.
Kısa cevap
Sizin senaryonuzda kabul edilemez olan şey “yanlış fiyat” penceresi. Çözüm, değişikliği edge’e beklemeye bırakmak değil, itmek. Bu, önbelleği bir hız katmanı olarak görüp doğruluk kaynağını origin’de tutan klasik bir backend mimarisi kararıdır.
Neden
-
TTL bir invalidation mekanizması değil, bir eskime sınırıdır. Süre dolana kadar edge eski değeri servis etmeye devam eder; para etkileyen veride bu pencere kabul edilemez.
-
KV kaynak değil, cache’tir. Doğruluk kaynağınız origin DB’dir; KV onun hızlı bir kopyasıdır. Bu zihniyet, KV bozulduğunda ya da tutarsız kaldığında origin’den yeniden besleyebilmenizi sağlar.
-
KV global olarak eventual consistent’tır. Yazımlar dünyaya yayılırken 60 saniye ya da daha uzun sürebilir; küçük bir tutarsızlık penceresi kaçınılmazdır. Anlık global doğruluk gerekiyorsa KV yanlış katmandır.
Ne yapmalı
-
Değişiklikte write-through (veya purge) yapın. 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ın ya da key’i silin. Böylece güncelleme yazma işleminin parçası olur, ayrı bir “umarım çalışır” adımı değil.
-
Key’i entity+version ile kurun. Her değeri bir versiyonla damgalayın (
price:42:v7gibi). Worker eski versiyonu görürse serve-stale-while-revalidate yapıp arkada güncelleyebilir. -
Kısa TTL’i emniyet ağı olarak bırakın. 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.
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 tasarlayın — onu kaynak değil, hızlı ve tazelenebilir bir cache olarak kullanın.
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.