Gezintiyi Atla

Önbelleğe alma nedir?

Geliştiriciler ve BT uzmanları, geleneksel veri depolamaya kıyasla, anahtar-değer verilerinin geçici bellekte daha hızlı ve daha kolay bir şekilde kaydedilebilmesi ve erişilmesi için önbelleğe alma işleminden faydalanır. Önbellekler, rastgele erişim belleği (RAM) ile bilgisayar önbelleğe alma, içerik teslim ağı üzerinde ağ önbelleğe alma, web multimedya verileri için web önbelleği veya bulut uygulamalarını daha dayanıklı hale getirmeyi amaçlayan bulut önbelleği gibi çok sayıda teknolojinin söz konusu olduğu birçok durumda faydalıdır. Genellikle geliştiriciler işlenen verileri önbelleğe almak için uygulamalar tasarlar ve ardından bu uygulamaları, isteklere standart veritabanı sorgularında olduğundan daha hızlı yanıt verecek şekilde yeniden tasarlarlar.

Veritabanı maliyetlerini azaltmak, çoğu veritabanından daha yüksek aktarım hızı ve daha düşük gecikme süresi sunmak ve bulut ve web uygulamalarının performansını artırmak için önbellek kullanabilirsiniz.

Veritabanları için önbelleğe alma nasıl çalışır?

Geliştiriciler, birincil veritabanına destek olarak bir veritabanı önbelleği kullanabilir. Bu veritabanı önbelleğini veritabanına veya uygulamaya yerleştirebilirler veya tek başına bir veri katmanı olarak ayarlayabilirler. Genellikle büyük, dayanıklı ve tam veri kümelerini depolamak için geleneksel veritabanlarına güvenirlerken, hızlı veri almayı sağlamak amacıyla geçici veri alt kümelerini depolamak için önbellek kullanırlar.

Önbelleğe alma işlemini NoSQL veritabanları dahil olmak üzere tüm veri depolarının yanı sıra SQL Server, MySQL veya MariaDB gibi ilişkisel veritabanlarında uygulayabilirsiniz. Önbelleğe alma işlemi aynı zamanda PostgreSQL için Azure Veritabanı, Azure SQL Veritabanı veya Azure SQL Yönetilen Örneği gibi birçok belirli veri platformuyla da çalışır. Bir veri mimarisini yapılandırmaya başlamadan önce, gereksinimlerinizi en iyi şekilde karşılayacak veri deposu türünün hangisi olacağı konusunda araştırma yapmanız önerilir. Örneğin, ilişkisel ve yapılandırılmamış veri depolarını birleştirmek için kullanmaya başlamadan önce PostgreSQL'nin ne olduğunu anlamanız gerekir.

Önbellek katmanlarının avantajları ve Redis nedir?

Geliştiriciler, isteğe bağlı olarak farklı türdeki verileri ayrı önbelleklerde depolamak için önbellek katmanları olarak adlandırılan çok düzeyli önbellekler kullanır. Bir veya birden fazla önbellek katmanı ekleyerek, veri katmanının aktarım hızını ve gecikme süresini önemli ölçüde geliştirebilirsiniz.

Redis, yüksek performanslı önbellek katmanları ve diğer veri depoları oluşturmak için kullanılan popüler bir açık kaynak bellek içi veri yapısıdır. Yakın zamanda yapılan bir çalışmada, Redis için Azure Cache eklenen bir örnek uygulamanın veri aktarım hızının yüzde 800'in üzerinde arttığı ve gecikme süresi performansının yüzde 1000’in üzerinde iyileştiği gösterilmiştir1.

Önbellekler, bir veri katmanı için toplam sahip olma maliyetini (TCO) de azaltabilir. En sık kullanılan sorgulara hizmet vermek ve veritabanı yükünü azaltmak için önbelleklerin kullanılması, veritabanı örneklerinin fazla sağlanmasına olan ihtiyacı azaltarak maliyette önemli bir tasarruf edilmesini ve daha düşük TCO değeri elde edilmesini sağlar.

Önbellek türleri

Önbelleğe alma stratejiniz, uygulamanızın verileri okumasına ve yazmasına bağlı olarak değişebilir. Uygulamanız yazma ağırlıklı mı yoksa bir kez yazılan veriler sık sık okunuyor mu? Döndürülen veriler her defasında benzersiz mi? Farklı veri erişim desenleri önbellek yapılandırmanızı etkiler. Yaygın önbelleğe alma türleri arasında önbellekten kaldırma, okuma/yazma ve arka planda yazma/geri yazma yer alır.

Önbellekten kaldırma

Geliştiriciler, okuma ağırlıklı iş yükleri olan uygulamalar için genellikle önbellekten kaldırılan bir programlama deseni veya "yan önbellek" kullanabilir. yan önbelleği uygulamanın dışında konumlandırırlar ve daha sonra bu yan önbellek de veri sorgulamak ve almak için önbellekle veya veriler önbellekte bulunmuyorsa doğrudan veritabanının kendisiyle bağlantı kurar. Veriler uygulama tarafından alındıkça, bu veriler gelecekteki sorgular için yan önbellek tarafından kopyalanmış olur.

Uygulama performansının geliştirilmesini sağlamak, önbellek ile veri deposu arasındaki tutarlılığı korumak ve önbellekteki verilerin eskimesini önlemek için yan önbellek kullanabilirsiniz.

Okuma/yazma önbelleği

Yazma önbelleğinde uygulama verileri önce önbelleğe ardından veritabanına yazarken, okuma önbellekleri ise kendilerini günceller. Her iki önbellek de veritabanı ile aynı hatta yer alır ve uygulama bunları ana veri deposu olarak işler.

Okuma önbellekleri aynı verilerin tekrar tekrar istendiği ancak önbelleğin kendisinin daha karmaşık olduğu uygulamaları basitleştirmeye yardımcı olurken, iki adımlı yazma işleminde gecikme süresi söz konusu olabilir. Geliştiriciler önbellek ile veritabanı arasında veri tutarlılığını sağlamak, yazma önbelleğindeki gecikme süresini azaltmak ve okuma önbelleğinin güncelleştirmesini kolaylaştırmak için bu ikisini eşleştirmektedir.

Geliştiriciler, okuma/yazma önbelleği ile uygulama kodunu basitleştirebilir, önbellek ölçeklenebilirlik düzeyini artırıp veritabanındaki yükü en aza indirebilir.

Arka planda yazma/geri yazma önbelleği

Bu senaryoda uygulama, verileri hemen kabul edilen önbelleğe yazar ve ardından bu önbellek ise verileri arka plandaki veritabanına geri yazar. Geri yazma önbellekleri olarak da bilinen arka planda yazma önbellekleri, yazma ağırlıklı iş yükleri için en iyisidir ve uygulamanın bir sonraki göreve geçmek için yazma işleminin tamamlanmasını beklemesi gerekmediği için bu önbellekler daha iyi yazma performansı ortaya koyar.

Dağıtılmış önbellek ve oturum deposu karşılaştırması

Dağıtılmış önbellekler genellikle, benzer ancak farklı gereksinimlere ve amaçlara sahip olan oturum depoları ile karıştırılır. Geliştiriciler, veritabanına ek olarak dağıtılmış önbellek kullanmak yerine, web uygulamaları gibi oturuma dayalı uygulamalardaki profiller, iletiler ve diğer kullanıcı verileri için kullanılmak üzere kullanıcı katmanında yer alan geçici veri depolarını yani oturum depolarını uygulamaya koyar.

Oturum deposu nedir?

Oturuma dayalı uygulamalar, kullanıcıların oturumları uygulamalarda açıkken gerçekleştirdikleri eylemleri izler. Bu verileri kullanıcı oturumu kapatıldığında koruyabilmek için bunları, daha iyi oturum yönetimi sağlayan, maliyetleri azaltan ve uygulama performansını hızlandıran bir oturum deposunda saklayabilirsiniz.

Oturum deposunun kullanımı ile veritabanının önbelleğe alınması arasındaki fark nedir?

Oturum deposunda veriler farklı kullanıcılar arasında paylaşılmazken önbelleğe alma sayesinde farklı kullanıcılar aynı önbelleğe erişebilir. Geliştiriciler bir veritabanı veya depolama örneğinin performansını iyileştirmek için önbellek kullanırlar. Ayrıca bellek içi depoya veri yazarak uygulama performansını artırmak amacıyla oturum depolarını kullanarak veritabanına erişim ihtiyacını ortadan kaldırmış olurlar.

Bir oturum deposuna yazılan veriler genellikle kısa sürelidir ancak birincil veritabanıyla önbelleğe alınan veriler genellikle çok daha uzun sürelidir. Oturum deposunda, işlem verilerinin kaybedilmeyip kullanıcıların bağlantılarının devamlılığının sağlanabilmesi için çoğaltma, yüksek kullanılabilirlik ve veri dayanıklılığı gereklidir. Ayrıca bir yan önbellekteki verilerin kaybolması halinde bu verilerin kalıcı veritabanında her zaman bir kopyası vardır.

Önbelleğe almanın avantajları

Gelişmiş uygulama performansı

Bellek içi önbellekten veri okumak, disk tabanlı veri deposundan verilere erişmekten çok daha hızlıdır. Ve daha hızlı veri erişimiyle, genel uygulama deneyimi önemli ölçüde iyileştirilmiş olur.

Daha düşük veritabanı kullanımı ve maliyet

Veritabanı altyapısını ölçeklendirme gereksinimini sınırlandırdığı ve aktarım hızı ücretlerini azalttığı için önbelleğe alma sayesinde veritabanı sorguları azaltılır ve böylece daha iyi performans ve daha düşük maliyet sağlanmış olur.

Ölçeklenebilir ve öngörülebilir performans

Tek bir önbellek örneği, saniye başına milyonlarca isteği işleyip veritabanlarının asla sunamayacağı bir aktarım hızı ve ölçeklenebilirlik düzeyi sağlar. Önbelleğe alma ayrıca, uygulamalarınızın ve veri depolarınızın ölçeğini genişletiyor veya büyütüyorsanız bunun için ihtiyacınız olan esnekliği de sunar. Böylece uygulamanızın arka uç veritabanlarındaki yükü artırmanıza gerek olmadan birçok kullanıcının aynı dosyalara aynı anda erişmesine olanak tanırsınız. Bir uygulamada kullanım ve yüksek aktarım hızındaki ani artışlar sık karşılaşılan bir durumsa, bellek içi önbellekler gecikme süresini azaltabilir.

Önbelleğe alma ne için kullanılıyor?

Çıktı önbelleğe alma

Çıktıyı önbelleğe alma, bir sunucunun işlenmek üzere tarayıcılara gönderdiği HTML ve istemci betikleri gibi sayfaların tam kaynak kodunu depolayarak web sayfası performansını artırmaya yardımcı olur. Kullanıcının sayfayı her görüntüleyişinde, sunucu uygulamanın belleğindeki çıkış kodunu önbelleğe alır. Böylece uygulama, sayfa kodu çalıştırmadan veya diğer sunucularla iletişim kurmadan isteklere karşılık vermiş olur.

Verileri önbelleğe alma ve veritabanını önbelleğe alma

Veritabanı hızı ve aktarım hızı, bir uygulamanın genel performansı için temel etkenler olabilir. Veritabanının önbelleğe alınması fiyatlandırma veya stok verileri gibi sıklıkla değişmeyen veri çağrıları için kullanılır. Aktarım hızını artırmanın ve arka uç veritabanlarından veri almadaki gecikme sürelerini azaltmanın yanı sıra web sitelerinin ve uygulamaların daha hızlı yüklenmesine yardımcı olur.

Kullanıcı oturumu verilerini depolama

Uygulama kullanıcıları genellikle kısa süreler için depolanması gereken veriler üretir. Redis gibi bir bellek içi veri deposu sayesinde kullanıcı girişi, alışveriş sepeti girişleri veya kişiselleştirme tercihleri gibi yüksek miktarda oturum verilerini, depolama alanlarındakilere veya veritabanlarındakilere kıyasla daha düşük maliyetlerle verimli ve güvenilir bir şekilde depolayabilirsiniz.

İleti aracıları ve yayımlama/abone olma mimarileri

Bulut uygulamalarının genellikle hizmetler arasında veri alışverişi yapması gerekir ve gecikme süresini azaltan ve veri yönetimini hızlandıran yayımlama/abone olma veya ileti aracısı mimarilerini uygulamak için önbelleğe almayı kullanabilirler.

Uygulamalar ve API'ler

Tarayıcılar gibi uygulamalar da önemli dosyaları ve verileri kaydeder ki gerektiğinde bu bilgiler hızlı bir şekilde yeniden yüklenebilsin. Önbelleğe alınan API yanıtları, uygulama sunucuları ve veritabanları üzerindeki talebi veya yükü ortadan kaldırarak daha hızlı yanıt süresi ve daha iyi performans elde edilmesini sağlar.

1Bildirilen performanlar, Microsoft’un görevlendirmesi üzerine GigaOm tarafından Ekim 2020'de yürütülen bir çalışmada elde edilen verilere dayanmaktadır. Çalışmada bir Azure veritabanı kullanan test uygulamasının performansı, önbellek olarak Redis için Azure Cache’nin uygulandığı ve uygulanmadığı durumlar için karşılaştırılmıştır. Çalışmada veritabanı öğesi olarak Azure SQL Veritabanı ve PostgreSQL için Azure Veritabanı kullanılmıştır. Redis için Azure’nin 6 gigabaytlık P1 Premium kurulumuyla birlikte Azure SQL Veritabanı'in 2 sanal çekirdekli 5. Nesil Genel Amaçlı kurulumu ve PostgreSQL için Azure Veritabanı’nın 2 Sanal Çekirdekli Genel Amaçlı kurulumu kullanılmıştır. Bu sonuçlar, Redis için Azure Cache’nin kullanılmadığı Azure SQL Veritabanı'nın 8, 16, 24 ve 32 sanal çekirdekli 5. Nesil Genel Amaçlı kurulumları ve PostgreSQL için Azure Veritabanı’nın 8, 16, 24 ve 32 sanal çekirdekli Genel Amaçlı kurulumlarıyla karşılaştırılmıştır. Karşılaştırma verileri, artan yoğunlukta HTTP istekleri alan ortak bir web uygulaması ve arka uç veritabanı benzetiminin yapıldığı GigaOm Web Uygulaması Veritabanı Yük Testi üzerinden alınmıştır. Gerçek sonuçlar yapılandırmaya ve bölgeye göre değişiklik gösterebilir. Çalışmanın tümüne buradan erişebilirsiniz.

Tam olarak yönetilen bir Redis hizmetiyle uygulamanıza etkin bir önbellek katmanı ekleyin: Redis için Azure Cache’yi kullanmaya nasıl başlayacağınız hakkında bilgi edinin.

Yüksek performanslı uygulamalar için esnek, dosya tabanlı önbelleğe alma çalıştırmak istiyorsanız Azure HPC Önbelleği hakkında bilgi edinin.