Caching 101 – Caching, Cache Türleri ve HTTP Cache Kontrolleri

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.

HTTP Cache Kontrolleri

HTTP cache kontrolleri, web tarayıcıları ve ara sunucular (proxy’ler) gibi önbellek (cache) sistemlerinin, web sayfalarını ve diğer kaynakları ne zaman ve nasıl önbelleğe alacaklarını ve bu önbelleklerin ne kadar süre geçerli olacağını belirlemeye yardımcı olur. Bu kontroller, kullanıcıların web sitelerini daha hızlı yüklemelerini ve sunucu yükünü azaltmalarını sağlar.

Cache-Control

Cache-Control HTTP başlığı, önbelleğe alma davranışını doğrudan kontrol eder ve birçok farklı direktif içerir. Bu başlık, hem tarayıcılar hem de ara sunucular tarafından kullanılır. Kullanılabilecek Cache-Control direktifleri:

  • no-cache: İçeriğin her seferinde sunucudan doğrulanmasını sağlar. Tarayıcı içeriği önbelleğe alabilir, ancak her erişimde sunucudan güncel olup olmadığını kontrol eder.
  • no-store: İçeriğin hiç bir zaman önbelleğe alınmamasını sağlar. Bu, hassas bilgiler içeren sayfalarda kullanılır.
  • max-age: İçeriğin önbellekte ne kadar süre kalacağını belirler. Örneğin, max-age=3600 değeri, içeriğin 1 saat boyunca geçerli olduğunu belirtir.
  • public: İçeriğin herkes tarafından önbelleğe alınabileceğini belirtir, yani içerik hem tarayıcılar hem de ara sunucular tarafından önbelleğe alınabilir.
  • private: İçeriğin yalnızca tarayıcı tarafından önbelleğe alınabileceğini belirtir, ara sunucular bu içeriği önbelleğe almaz.

Expires

Expires başlığı, bir kaynağın ne zaman geçerliliğini yitireceğini belirten bir tarih ve saat bilgisi içerir. Bu tarih geldiğinde, tarayıcı veya ara sunucu içeriği yeniden sunucudan almak zorundadır. Expires başlığı, tarayıcıya içeriği önbelleğe alıp almayacağını ve ne kadar süre geçerli olduğunu belirtir. Örneğin, Expires: Wed, 21 Aug 2024 07:28:00 GMT ifadesi, içeriğin belirtilen tarihe kadar geçerli olduğunu ve bu tarihten sonra yenilenmesi gerektiğini belirtir. Expires başlığı, Cache-Control başlığıyla birlikte kullanılabilir, ancak Cache-Control genellikle daha esnek ve yaygın olarak tercih edilir.

ETags

ETag (Entity Tag), bir kaynağın benzersiz bir tanımlayıcısıdır ve genellikle içerik versiyonunu temsil eder. Sunucu, her kaynak için benzersiz bir ETag oluşturur ve bu ETag‘i HTTP başlığında gönderir. Tarayıcı, aldığı ETag‘i önbelleğe alır ve sonraki isteklerde bu ETag‘i If-None-Match başlığıyla sunucuya gönderir. Sunucu, gelen ETag ile mevcut ETag‘i karşılaştırır; eğer eşleşirse, içeriğin değişmediğini belirterek 304 Not Modified yanıtı gönderir. Bu, tarayıcının mevcut önbellekteki veriyi kullanmasını sağlar ve gereksiz veri aktarımını önler, böylece sistem performansını artırır.

You may also like...

1 Response

  1. 28 Haziran 2023

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

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir