13 puan yazan gos16052 2022-06-10 | Henüz yorum yok. | WhatsApp'ta paylaş

Cache Inconsistency

  • cache sunucusu DB'den x için istek gönderir ve DB x=42 yanıtını cache'e ulaşmadan önce döner
    • dışarıdan x=43 olarak güncellenir ve invalidation yoluyla x=43 cache'e iletilir
    • cache x=43 değerini alıp uygular
    • x=42 yanıtı gecikmeli olarak gelir ve uygulanır
  • Yukarıdaki sorun, veriye version eklenerek çözülebilir
  • Ancak version eklense bile x=43 için eviction yaşanırsa x=42 uygulanabilir

Polaris: Cache Inconsistency ölçüm servisi

  • çalışma süreci
    • Polaris de invalidation event alır
    • event alındığında tüm cache sunucularına sorgu göndererek önceki version'ı tutup tutmadıklarını kontrol eder
    • cache önceki version'ı tutuyorsa bunu inconsistency olarak değerlendirir ve yeniden denenebilmesi için requeue eder
      • çünkü invalidation event cache sunucusuna geç ulaşabilir
    • belirli bir süre (1 dakika, 3 dakika, 5 dakika vb.) geçerse inconsistency alarmı gönderir
  • metric
    • son M dakika boyunca N nines seviyesine karşılık gelen cache write işlemlerinin tutarlı olup olmadığını gösteren metric sunar
    • 5 dakika boyunca 10 nines ise, son 5 dakikada 10 milyarda 1 cache write işleminin inconsistency olduğunu anlayabiliriz

Cache Inconsistency'yi debug etmek için logging kütüphanesi

  • tüm cache write işlemlerini loglamak mümkün değildir
    • çünkü zaten cache read-heavy bir workload'a sahiptir ve "logging" nedeniyle write-heavy bir workload'a dönüşür
  • bu nedenle invalidation gerçekleştiği andan hemen sonraki time window için logging yapılabilmesini sağlayan bir kütüphane oluşturuldu
  • invalidation'a dahil olan tüm servislere bu kütüphane gömüldü
  • logging sayesinde inconsistency oluştuğunda, oluşana kadar geçen süreci bir timeline olarak ortaya çıkarmak mümkün olur

Henüz yorum yok.

Henüz yorum yok.