Gönderi

In-Memory Caching Nedir?

In-memory caching'in nasıl çalıştığı, uygulamaları neden hızlandırdığı ve birden fazla instance'ta yol açtığı veri tutarlılığı riskleri.

In-Memory Caching Nedir?

Caching’e giriş yazısının devamında, In-Memory Caching’in ne olduğunu ele alıp gerekli detaylara inelim.

In-Memory Caching Nedir?

In-Memory Caching, yüksek istek oranı nedeniyle veritabanından sık sık çekilen stabil verinin, uygulamayı barındıran sunucunun belleğinde (RAM) geçici olarak saklanması işlemidir. Bu yaklaşım, veritabanı sorgularıyla ilgili maliyetleri en aza indirmek ve veriye daha hızlı erişim sağlamak için kullanılır.

Nasıl Çalışır?

Bir kullanıcı istek yaptığında, sistem önce görüntülenecek veri için cache’e bakar. Veri cache’te mevcutsa alınıp kullanıcıya gönderilir. Cache boşsa, veri veritabanından çekilir, cache’e kaydedilir ve sonra kullanıcıya gönderilir. Sonraki istekler için veri doğrudan cache’ten sunulur. Elbette, cache’lenebilecek veri miktarı sunucunun RAM özelliklerine ve kapasitesine bağlıdır.

Desktop View In-Memory Cache

In-Memory Caching’in Olası Dezavantajları

Bir uygulamanın aynı veritabanına erişen birden fazla instance’ı varsa ve In-Memory Caching kullanıyorsa, veri tutarsızlığı riski ortaya çıkar.

Örneğin şu senaryoyu düşünelim: Yandaki illüstrasyonda, aynı veritabanını kullanan A ve B adında iki uygulama instance’ı var. Bir load balancer, kullanıcı isteklerini trafiğe göre bu instance’lar arasında dağıtıyor. Diyelim ki T anında bir istek, A instance’ının in-memory caching yapmasına yol açıyor, T+15 anında da başka bir istek B instance’ının veriyi cache’lemesine neden oluyor. Veritabanında herhangi bir değişiklik olursa, T+30 anında bu instance’ların döndürdüğü veride bir tutarsızlık görebiliriz. Her iki instance da tutarlı veri sunuyorsa sorun yok. Ama veritabanı değişiklikleri nedeniyle A instance’ı “Elma”, B instance’ı “Armut” gösteriyorsa, bu ciddi bir dezavantajı ortaya koyar.

Bu tutarsızlık, in-memory caching kullanan çoklu-instance uygulamalarda ortaya çıkabilir. Ancak uygulama tek bir instance üzerinden çalışıyorsa, tüm kullanıcılar isteklerini aynı instance üzerinden işler ve bu tutarsızlık hiç yaşanmaz.

Desktop View In-Memory Caching’in Olası Dezavantajları

Bu Dezavantajı Nasıl Çözebiliriz?

Mükemmel bir çözüm olmasa da, Session Sticky (Sticky Sessions) bu sorunu kısmen çözebilir. Load balancer’ı, X kullanıcısının ilk isteğinden sonra tüm isteklerini A instance’ına yönlendirecek şekilde yapılandırarak, kullanıcı seviyesinde tutarsızlıkları azaltabiliriz. Bu, kullanıcıların her zaman aynı instance ile etkileşime girmesini sağlar ve instance’lar arasındaki tutarsızlıklardan habersiz kalmalarını sağlar. Ancak bu, önerilen ya da kesin bir çözüm değildir.

Desktop View Bu Dezavantajı Nasıl Çözebiliriz

Bir başka yaklaşım da tüm instance’lar için cache’i merkezileştirmektir. Cache’lenmiş veriyi paylaşılan bir konumda saklayarak, tüm kullanıcılar cache’ten en tutarlı veriye erişebilir. Bu yaklaşım Distributed Caching kullanmayı gerektirir, ki bir sonraki yazımızın konusu da bu olacak.

In-Memory Caching’in ne olduğunun arkasındaki teoriyi baştan sona ele aldık. Bir sonraki içerikte, Distributed Caching‘i ve nasıl çalıştığını detaylıca ele alacağız.

Buradan okuyabilirsin: Distributed Cache

Desktop View Okuduğunuz için teşekkürler

Bu gönderi CC BY 4.0 lisansı altındadır.