Önbellek kurmadan önce ölçüm yapın
Performans ölçümüne dayanmayan bir önbellek katmanı, belirsiz bir hız kazanımı uğruna veri doğruluğunu riske atmaktır.
- Sistemde bir yavaşlık var ve ilk çözüm önerisi hemen önüne bir Redis katmanı koymak.
- Verinin bayatlamasının maliyetli olduğu ve okuma alışkanlıklarının henüz netleşmediği akışlar.
Problem
Uygulamada bir yavaşlık hissedildiğinde ekipteki ilk öneri çoğu zaman araya hemen bir Redis önbelleği koymak olur. Ancak ölçüme dayanmadan eklenen bir önbellek, ne kadar kazandıracağı bilinmeyen bir performans uğruna sistemin veri doğruluğunu doğrudan riske atmaktır.
Bağlam
Verinin eskiyip bayatlamasının iş süreçlerinde kabul edilemez sonuçlar doğurduğu ve okuma alışkanlıklarının henüz sayısallaştırılmadığı sorgu yolları.
Yaklaşım
Herhangi bir mimari karar vermeden önce gecikmenin kaynağını mikrosaniye düzeyinde tespit ediyorum. “Önbellek şart” denilen durumların büyük bir kısmında, sorunun aslında kötü planlanmış tek bir SQL sorgusundan ibaret olduğu anlaşılıyor. O sorguyu optimize etmek ya da doğru bir indeks eklemek, sisteme ikinci bir veri kaynağı sokmadan problemi kökünden çözüyor.
Gecikmenin gerçekten aynı veriyi tekrar tekrar okumaktan kaynaklandığı kanıtlanırsa, sistemi kurmadan önce potansiyel isabet oranını simüle ediyorum. Canlı istek trafiğinden örneklem alarak kaç okumanın önbellekten dönebileceğini hesaplıyorum. İsabet oranı yüzde kırkın altında kalan bir önbellek, getirdiği veri tazeleme yükünü kesinlikle karşılamaz.
Ardından verinin bayatlama toleransını netleştiriyorum. Bu bilgi iş süreçlerine zarar vermeden ne kadar süre eski kalabilir? Bu soruya kesin bir yanıt verilemiyorsa önbellek kurmak için henüz erken demektir.
Ancak bu adımlardan sonra önbelleğin mimarideki yerine karar veriyorum. Süreç içi bellek kullanımı en ucuz ve en hızlı yoldur fakat örnek sayısı arttıkça kopyalar çoğalır. Merkezi bir önbellek ise tek bir doğruluk kaynağı sunar ama kritik yola yeni bir ağ atlaması ve ek bir altyapı bağımlılığı sokar.
Ödünleşimler
Her önbellek katmanı verinin yaşayabileceği alternatif bir hafıza demektir ve bu hafızalar uyuşmadığında çözülmesi çok zor tutarsızlıklar doğar. Önbellek temizleme mantığı zamanla kodun her köşesine yayılır ve arkasında yakalanması güç aralıklı hatalar bırakır.
Ayrıca gizli bir kapasite riski taşır. Kusursuz çalışan bir önbellek alttaki veritabanı zafiyetlerini uzun süre maskeler. Önbelleğin boşaldığı bir yeniden başlatma anında ani gelen yük tüm sistemi bir anda çökertebilir.
Bu ne zaman işe yaramaz
Bakiye, stok adedi veya yetkilendirme gibi her milisaniye güncel olmak zorunda olan kritik verilerde okumayı önbelleğe almak yanlış tercihtir. Çözüm verinin hesaplanma mimarisini hızlandırmakta yatar.
Sorun okuma sıklığından değil de yazma yoğunluğundan kaynaklanıyorsa önbellek eklemek hiçbir fark yaratmaz.