Caching 101 – Caching ve Cache Türleri

Caching (Önbellekleme) Nedir?

Kullandığımız uygulamalar, ihtiyaç duydukları verileri ya bir API’den ya da database’den alır.  API’ler ve database’ler de sunucularda konumlandırılırlar. Dolayısıyla uygulamalar, veriye ihtiyaç duyduğu her noktada bu sunuculara istekte bulunur.  Ancak, çok fazla kullanıcısı olan bir uygulama düşünün. Bu uygulamanın data sağlayan sunucularına gelen istek sayısını ve oluşan darboğazı… Bu dar boğaza ilaveten, bir de o veriye ulaşmak için servera gidip veriyi alıp dönülmesine kadar geçen zamanı…

Caching (önbelleğe alma) verileri sunucudan bir kez çektikten sonra ramde tutup, bu verilerin ihtiyaç oldukça sunucuya istekte bulunmadan direkt olarak ram’den alınmasıdır. Bu da yukarıda bahsettiğimiz iki soruna da çözüm getirir.

  • Ram’e ulaşmak ve ramden veri almak, asıl veri kaynağı sunucuya ulaşmaktan çok daha hızlı olacağından caching bize hız/performans kazandırır.
  • Serverlara gidecek istek sayısı düşeceğinden, oluşacak olan darboğazın da önüne geçmemizi sağlar.
Cache ile İlgili Önemli Noktalar

Cachlenen verilerin ön bellekte yani ram’de tutulduğunu söylemiştik. Ancak burada akıllara ilk gelmesi gereken soru şudur. Asıl kaynaktaki yani sunucudaki veri değişikliğe uğradığı zaman, RAM’de tutulan verinin durumu ne olur ? Ramde tutulan veri orjinal kaynaktaki veri değişiminden haberdar mıdır?

Sunucuda tutulan veri illaki bir zaman sonra değişeceğinden sizin ram’de tuttuğunuz verinin belirli aralıklarla temizlenmesi gerekir. Yani cache verinizin bir expire time‘ı olması gerekir. Bu expire time tanımlanmadığı sürece, cachlenmiş veri yani ram’deki veri sunucu kapanana kadar RAM’de kalır.

Veriyi ram’e kaydettikten sonra tekrar bu veriye ulaşabilmek için ramden okumamız gerekecektir. Bu durumda cachelediğimiz verinin bir de unique cache key’i olması gerekir ki tekrar bu veriye ulaşabilelim.

Cache Türleri

Farklı cachle türleri ve kategorizelendirmeleri olmakla birlikte en genel bilinen cache türleri Client side caching, Server side caching ve CDN(Content Delivery Network) cachingdir.

1.Client Side Cache

Client side caching ile web browseriniz sayfanın nasıl göründüğünü hatırlar ve sunucuya websiteyi tekrar yollaması için istekte bulunmaz. Client side caching’te veriler kullanıcının kişisel bilgisayarında tutulur ve yer kaplar. Bu tüm network sürecini aradan çıkararak zaman ve bandwidth tasarrufu sağlatır. Ancak, websiteye ilişkin bilgiler server bazında değiştirilirse sıkıntı başlar çünkü browserınızın tuttuğu website bilgileri artık eski ve güncel değildir. Bu da aslında insanların size belli  aralıklarla cacheninizi temizlemenizi  söylemesinini sebebidir. Cachei temizleyerek sunucudan güncel versiyon talebinde bulunuruz.

2.Server Side Caching

Server side caching ise uygulama tarafından belli bir kaynaktan (database, webservice) çekilen, birden fazla clientla paylaşılan ve değişme ihtimali düşük olan verinin kaynağa (database server, webservice service) tekrar tekrar istekte bulunup çekilmesi yerine, ilk istekten sonra uygulama sunucusunun raminde tutulup, her çağırıldığında uygulama sunucusunun raminden dönmesidir. Yani server-side cachle genellikle expensive tekrar eden farklı clientlara aynı contenti sunan database operasyonlarınında kullanılır ve  data serverda cachlenir.

Server side caching de kendi içerisinde local cache ve external cache olmak üzere ikiye ayrılır.

Local cache, her serverin kendi belleği üzerinde uyguladığı cache şeklidir. Ancak, bu durumda cache’lenen datanın ortak kullanılan bir data olmaması önemlidir. Örneğin, bir servisinizi 5 instance’a ölçeklediğinizi düşünün. Ölçeklenen her servisin kendi local cachesi olması ve tüm servisler tarafından ortak kullanılan bir data olması durumunda her biri datanın farklı ve tutarsız versiyonunu sunabilir.  Bunun yanında local cache bellek israfına da yol açabilir, 1 GB’lik bir datayı cachelemek istediğinizde her instance bunu local belleğinde tutacağı için cachelenen data boyutu x instance sayısı gibi bir bellek maliyeti çıkacaktır.

External cache ise, datanın farklı bir server üzerinde cachelenmesi temeline dayanır ve tüm instance’lar bu server üzerinden cachelenen datayı alır. Bu sayede cachelenen datanın farklı instance’lar tarafından kullanılması sonucunda bir data tutarsızlığı olmaz. External cache, local cache’in aksine replication ve partition yöntemleriyle ölçeklenebilerek verimini artırabilir. Ancak external cache’in maintenance cost’u local cache’e göre daha fazladır çünkü ilgilenilmesi gereken farklı server hatta cluster vardır. Bunun yanında, latencysi de local cache göre yüksektir çünkü extra network call gerekir. 

Eğer external cache sistemi çökerse, sistem otomatik olarak data source’a direkt olarak yönelebilir. Sistemin dataları biraz daha yavaş alması, komple çökmesi yerine kabul edilebilecek bir durumdur. Ancak, ağır yük altında çöken cache sistemi sonucunda tüm yük bir anda data source’a bindiğinde akabinde data source da çökebilir ve zincirleme bir failure ile de karşılaşılabilir.

3.Content Delivery Network (CDN) Cache 

CDN önbelleğe alma, daha geniş bir veri depolama biçimidir. CDN önbellekleme ile, genel olarak dağıtılan proxy sunuculara statik web sitesi içeriği eklenir. Bu, dünyanın her yerinden ziyaretçilerin site içeriğinizi daha hızlı indirmesini sağlayarak sitenizin yükleme süresini hızlandırır. CDN önbelleğe alma aynı zamanda web sitesi sahiplerinin maliyetleri azaltmasına yardımcı olur, orijinal sunucudan baskı alır ve odağı ziyaretçilerin yerel olarak verilere erişebileceği küresel olarak bulunan daha küçük yerel sunuculara yerleştirir.

You may also like...

1 Response

  1. 28 Haziran 2023

    […] Caching ile ilgili temel bilgilere bu yazımdan da ulaşabilirsiniz […]

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir