İçeriğe geç
Anasayfa » Önbelleğe Alma Nedir?

Önbelleğe Alma Nedir?

Önbelleğe alma (caching) işlemi, özellikle web uygulamalarının performansını önemli ölçüde artıran yapılardan biridir. Amacı; sık kullanılan verileri her seferinde veritabanına bağlanmaya gerek kalmadan, kullanıcıya hızlı bir şekilde sunmaktır. Burada yapılan işlem ise verileri sunucudan bir kez çekip, uygulamanın bulunduğu sunucunun RAM’inde geçici olarak kaydedilip, kullanılmasıdır. Yani kısaca, stabil şekilde ve sık kullanılan bir veriyi ilk elde edildiğinde ön belleğe alıyor ve sonra her istemde bu ön belleğe alınmış veriyi gönderiyoruz. Fakat şunu unutmamalıyız ki; önbelleğe aldığımız veriler, orijinal verilerimiz değildir. Onların bir kopyasıdır.

Görsel 1: Sunucu tarafından önbelleğe almanın nasıl çalıştığını gösteren örnek görsel

Peki bu yapıyı kullanmazsak ne olur?

Bir uygulamada her bir veriye ihtiyaç duyulduğunda, sunucuya istekte bulunulur. Kullanıcı kitlesi büyük olan ve çok fazla request alan sistemlerde, bu durumla karşı karşıya kalmak kullanıcı için ciddi bir yavaşlığa, sunucu tarafı için de çok büyük yoğunluklara sebep olacaktır.

Orijinal veride değişiklikler olunca ne olacak?

Yukarıda söylediğim gibi, RAM’den aldığımız bu veriler orijinal veri değil. Dolayısıyla orijinal veride bir değişiklik olduğu zaman, bizdeki veriler eskiyecektir. Buna çözüm olarak ise veriler, yapılan konfigürasyonlarda belirlenen periyotlarla imha edilmeli ve güncel veri, sunucudan tekrar talep edilmelidir.

Caching çeşitleri nelerdir?

Caching, iki ana başlık altında değerlendirilmektedir. Bunlar Local Caching (In-Memory Caching) ve Global Caching (Distributed Caching)’dir.

Local Caching (In-Memory Caching):

Private Caching de denilir. Uygulamayla ilgili verilerin, uygulamayı barındıran sunucunun üzerindeki RAM bellekte tutulması işlemidir. Tutabileceği cache boyutu, uygulama sunucusunun RAM’i ile doğru orantılıdır.

  Görsel 2

Yukarıdaki görselde de yine bahsettiğim adımlar gerçekleşiyor;

Adım 1: Veriyi önbellekte ara.

Adım 2: Eğer veri önbellekte varsa döndür.

Adım 3: Eğer yoksa veri kaynağında veriyi ara.

Adım 4: Cache’e veriyi yükle ve kullanıcıya döndür.

Uygulamamız tek bir durumda çalışıyorsa bu yöntemde bir problem yaşamayız.

Birden fazla durum ile çalışıyorsak ne olacak?

Uygulamamızda birden fazla durum varsa ve gelen istekleri yük dengeleyici yoğunlağa göre bu durumlara paylaştırıyorsa; uygulamaya istek yapan bir kullanıcı, farklı zamanlarda farklı önbelleklere ulaşabilir. Bu durumda da kullanıcı her isteğinde farklı bir veri görür. Şimdi bu olayı daha ayrıntılı inceleyelim.

Görsel 3: Uygulama içinde  In-memory caching’in farklı durumlarda kullanım örneği

Yukarıdaki örneğe baktığımızda görüyoruz ki; A ve B uygulamaları ortak bir veritabanını kullanıyor. A, X zamanında gelen istek üzerine In-Memory Caching yapıyor, B ise Y zamanında gelen isteğe göre yapıyor. İki zaman diliminde de veriler aynıysa sıkıntı yaşamayız. Fakat veriler farklı ise; aynı istek sonucu elde ettiğimiz sonuçlar birbirinden farklı olacaktır. Ki bu da büyük bir problem.

Bu problemin bir çözümü yok mu?

Bu problemin kısmi bir çözümü vardır. Bu da “Load Balancer” üzerinden “Sticky Session” özelliğini kullanmaktır. Bu özellik ile kullanıcı ilk hangi instance’a gönderildiyse, bundan sonraki tüm requestlerde aynı instance’a gönderilir. Bunu Sticky Session, cookie veya IP’ye göre yönlendirme yaparak sağlar. Kesin bir çözüm değildir. Çünkü eğer ortada bir tutarsızlık varsa, biz sadece bunun üstünü örtmüş oluruz. Bu nedenle önerilmez.

Global Caching (Distrubuted Caching):

Shared Caching de denilir. Ön belleğe alınacak veriler, uygulamanın ayağa kaldırıldığı sunucunun RAM’inde değil de tamamen ayrı bir cache servisinde tutulur.

Önbelleğe alınacak verilerin uygulamanın sunucusundan bağımsız tutuluyor olması olası bir kesintide verilerin güvenli bir şekilde tutulmasını sağlar, In-memory Caching’de bunun aksine sunucuda yaşanacak bir aksaklıkta tüm önbellek silinir.

Görsel 4: Shared Caching kullanım örneği

Yukarıda da gördüğümüz gibi; tüm instance’lar aynı cache servisini kullanıyor. Dolayısıyla In-Memory Caching’de yaşadığımız tutarsızlığı burada yaşamamış oluyoruz.

Caching’in uygulamamıza faydaları nelerdir?

  • Sunucudaki gereksiz trafiği azaltır.
  • Daha iyi bir kullanıcı deneyimi sağlar.
  • Uygulamamızın hız ve performansı artar. Bellek, diskten çok daha hızlı olduğundan, önbellekten veri okumak son derece hızlıdır. Bu da önemli ölçüde uygulamamızın genel performansını arttırır.
  • Veri tabanı maliyetini azaltır. Bir önbellek çok sayıda IOPS(saniyede giriş/çıkış işlemi) sağlayabilir. Bu sayede de birkaç veri tabanının görevini üstlenerek toplam maliyeti düşürür.
  • Önbelleğe alma sayesinde, içerik kaynak sunuculardan kısa süreliğine kullanılmadığında bile son kullanıcılar için içerik sunabilir.

Cachingin kullanım durum örnekleri nelerdir?

Aşağıdaki örnekler, cachingin kullanımına örnek olarak verilebilir;

Database Caching:

Görsel 5: Database Caching’in kullanım örneği

Database Caching, sık sorgulanan verileri geçici olarak bellekte depolayan bir ara belleğe alma yöntemidir. Veri tabanının hız ve verim anlamında uyguladığı performans uygulamaların genel performansı üzerinde en etkili faktörlerdendir. Amacı, birincil veri tabanının taşıyabileceği yükü hafifleterek yardımcı olmaktır. İlişkisel ve NoSQL veri tabanları da dahil olmak üzere tüm veri tabanlarının önüne bir veri tabanı önbellek katmanı uygulanabilir.

CDN (Content Delivery Network) Caching:

CDN, web içeriğini kullanıcıların bulunduğu yere yaklaştırarak dağıtımını hızlandıran, coğrafi olarak dağıtılmış bir grup sunucudur. CDN, yanıt süresini azaltmak için kullanıcının isteği doğrultusunda ana sunucudan çektiği web sayfaları, resim ve video gibi içerikleri kendi sunucusunda cacheleyerek saklar.

DNS (Domain Name System) Caching:

DNS cache ile bir makinenin işletim sistemi veya web tarayıcısında yapılmış önceki DNS aramalarının hakkındaki bilgilerin geçici olarak depolanması sağlanır. Aramanın yerel bir kopyası tutularak, işletim sisteminin veya tarayıcının bir sonraki aramada hızlı bir şekilde erişilmesi sağlanır.

Kaynakça

[1] – https://www.keycdn.com/support/cache-definition-explanation

[2] – https://docs.microsoft.com/en-us/azure/architecture/best-practices/caching

[3] – https://aws.amazon.com/caching/

[4] – https://techcommunity.microsoft.com/t5/microsoft-developer-community/how-to-use-cache-for-re-platform-to-azure/ba-p/3920601

[5] – https://www.prisma.io/dataguide/managing-databases/introduction-database-caching

[6] – https://www.cloudflare.com/learning/cdn/what-is-caching/#:~:text=What%20is%20CDN%20caching%3F,them%20along%20to%20other%20servers.

Etiketler:

Bir yanıt yazın

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