İçeriğe geç
Muhammet Şafak
en
Soran: Tolga Cevaplandı:

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.

Sizin senaryonuzda kabul edilemez olan şey “yanlış fiyat” penceresi. Çözüm, değişikliği edge’e beklemeye bırakmak değil, itmek:

  1. 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.
  2. KV’yi kaynak değil, cache görün. 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 besleyebilmenizi sağlar.
  3. Key’i entity+version ile kurun. Her değeri bir versiyonla damgalayın (price:42:v7 gibi). Worker, eski versiyonu görürse serve-stale-while-revalidate yapıp arkada güncelleyebilir; kullanıcı beklemez, yanlış veriyi de uzun süre görmez.
  4. 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.
  5. KV’nin global eventual consistency’sini kabul edin. KV yazımları dünyaya yayılırken 60 saniyeye kadar 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 gidin veya farklı bir tutarlılık modeli seçin.

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.

Paylaş:

Yorumlar

Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.

Diğer Sorular

Tüm sorular

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi