Meta'nın önbellek geçersiz kılma kullanırken önbellek tutarlılığını koruma yöntemi (çeviri)
(moonsub-kim.github.io)Cache Inconsistency
- cache sunucusu DB'den
xiçin istek gönderir ve DBx=42yanıtını cache'e ulaşmadan önce döner- dışarıdan
x=43olarak güncellenir ve invalidation yoluylax=43cache'e iletilir - cache
x=43değerini alıp uygular x=42yanıtı gecikmeli olarak gelir ve uygulanır
- dışarıdan
- Yukarıdaki sorun, veriye version eklenerek çözülebilir
- Ancak version eklense bile
x=43için eviction yaşanırsax=42uygulanabilir
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.