Bugün önbellekleme dünyasına dalıyoruz. Önbelleğe alma, ölçeklenebilir, yüksek performanslı sistemler oluşturmaya yönelik gizli bir silahtır. Önbelleğe almanın pek çok türü vardır ancak bu makalede arka uç nesne önbelleğe alma (arka uç önbelleğe alma) konusuna odaklanacağız. Bu konuda uzmanlaşmak, yüksek performanslı ve güvenilir yazılım oluşturmanıza yardımcı olacaktır.
Bu makalede şunları inceleyeceğiz:
Önbelleğe Alma Nedir? Önbelleğe almayı inceleyeceğiz ve daha hızlı erişim için verileri geçici olarak nasıl sakladığını açıklayacağız.
Önbelleğe Alma Faydaları : Önbelleğe almanın hızı nasıl artırdığını, sunucu yükünü nasıl azalttığını, kullanıcı deneyimini nasıl iyileştirdiğini ve hatta maliyetleri nasıl azaltabileceğini keşfedin.
Önbellekleme Deseni : Bu bölümde önbelleği kullanmanın farklı yollarını ele alacağız. Her yaklaşımın artıları ve eksileri olduğunu unutmayın; bu nedenle ihtiyaçlarınız için doğru modeli seçtiğinizden emin olun!
Önbelleğe Alma En İyi Uygulaması : Artık önbelleğe alınan verileri nasıl saklayacağınızı ve alacağınızı biliyorsunuz. Ancak önbelleğe alınan verilerinizin güncel kalmasını nasıl sağlarsınız? Peki önbellek kapasitesine ulaştığında ne olur?
Önbelleğe Alınmadığında : Önbelleğe alma birçok avantaj sunsa da, bundan kaçınılması gereken zamanlar da vardır. Önbelleğe almanın yanlış sistemde uygulanması karmaşıklığı artırabilir ve hatta potansiyel olarak performansı yavaşlatabilir.
Yüksek performanslı ve ölçeklenebilir bir uygulama oluşturmak, darboğazları ortadan kaldırmak ve sistemi daha verimli hale getirmekle ilgilidir. Veritabanları, depolama ve işleme gereksinimleri nedeniyle sıklıkla sistem performansında darboğaz oluşturur. Bu onları maliyetli bir bileşen haline getiriyor çünkü sık sık ölçeklendirilmeleri gerekiyor.
Neyse ki, veri alma hızını artırırken veritabanı kaynağı kullanımının yükünü hafifletmeye yardımcı olabilecek bir bileşen var; bu bileşene önbellek adı veriliyor.
Önbellek, verilerin hızlı yazılması ve okunması için tasarlanmış geçici bir depolama alanıdır. Hızlı işlemler için düşük gecikmeli bellek depolamayı ve optimize edilmiş veri yapılarını kullanır. Muhtemelen zaten Redis veya Memcached kullanmışsınızdır veya en azından adlarını duymuşsunuzdur. Bunlar, arka uç hizmetleri için en popüler dağıtılmış önbellekleme sistemlerinden ikisidir. Redis birincil veritabanı görevi bile görebilir, ancak bu başka bir makalenin konusu!
Önbelleğe almanın temel faydası hızıdır. Verileri önbellekten okumak, onu bir veritabanından (SQL veya Mongo gibi) almaktan önemli ölçüde daha hızlıdır. Bu hız, hızlı işlemler için sözlük (veya HashMap) veri yapılarını kullanan ve verileri disk yerine yüksek hızlı bellekte depolayan önbelleklerden gelir.
İkinci olarak, önbelleğe alma veritabanınızdaki yükü azaltır. Bu, uygulamaların sürekli olarak veritabanına başvurmak yerine ihtiyaç duydukları verileri önbellekten almalarına olanak tanır. Bu, donanım kaynağı kullanımını önemli ölçüde azaltır; Diskteki verileri aramak yerine sisteminiz verilere hızlı bellekten erişir.
Bu avantajlar doğrudan kullanıcı deneyimini iyileştirir ve maliyet tasarrufu sağlayabilir. Uygulamanız çok daha hızlı yanıt vererek kullanıcılar için daha sorunsuz ve daha tatmin edici bir deneyim yaratır.
Önbelleğe alma altyapı maliyetlerini azaltır. Redis gibi dağıtılmış bir sistem kendi kaynaklarını gerektirse de genel tasarruflar genellikle önemli düzeydedir. Uygulamanız verilere daha verimli bir şekilde erişir ve potansiyel olarak veritabanınızın ölçeğini küçültmenize olanak tanır. Ancak bu bir ödünleşmeyi de beraberinde getirir: Önbellek sisteminiz arızalanırsa veritabanınızın artan yükü karşılamaya hazır olduğundan emin olun.
Artık önbelleğe almanın gücünü anladığınıza göre, onu kullanmanın en iyi yollarına geçelim! Bu bölümde kalıpların iki temel kategorisini inceleyeceğiz: Önbellek Yazma Kalıpları ve Önbellek Eksik Kalıpları . Bu modeller, önbellek güncellemelerini yönetmeye ve ihtiyaç duyduğunuz verilerin henüz önbellekte olmadığı durumlarla başa çıkmaya yönelik stratejiler sağlar.
Yazma kalıpları, uygulamanızın hem önbellekle hem de veritabanınızla nasıl etkileşime gireceğini belirler. Üç yaygın stratejiye bakalım: Geri yazma , Üzerine yazma ve Etrafına yazma . Her biri benzersiz avantajlar ve ödünleşimler sunar:
Nasıl çalışır:
Şunlar için idealdir: Hızın kritik olduğu ve performans açısından bazı tutarsızlıkların kabul edilebilir olduğu, yazma ağırlıklı uygulamalar. Örnekler arasında ölçümler ve analiz uygulamaları yer alır.
Avantajları:
Dezavantajları:
Nasıl çalışır:
Avantajları:
Dezavantajları:
Write-Around ile uygulamanız, yazma işlemi sırasında önbelleği atlayarak verileri doğrudan veritabanına yazar. Önbelleği doldurmak için önbellek ayırma modeli adı verilen bir strateji kullanır:
Okuma isteği geldiğinde: Uygulama önbelleği kontrol eder.
Önbellek kaçırma: Veriler önbellekte bulunmazsa, uygulama onu veritabanından alır ve daha sonra kullanmak üzere önbellekte saklar.
Avantajları:
Dezavantajları:
Uygulamanızın ihtiyaç duyduğu veriler önbellekte bulunmadığında önbellek kaybı meydana gelir. Bununla başa çıkmak için işte iki yaygın strateji:
Uygulama önbelleği kontrol eder.
Kaçırıldığında veritabanından veri alır ve ardından önbelleği günceller.
Anahtar nokta: Uygulama, önbelleğin yönetilmesinden sorumludur.
Önbellek Kenarı modelini kullanmak, uygulamanızın önbelleği yöneteceği anlamına gelir. Bu yaklaşım, kullanımı en yaygın olanıdır çünkü basittir ve uygulama dışında başka yerlerde geliştirmeye ihtiyaç duymaz.
Uygulama önbellekten habersiz bir istekte bulunur.
Özel bir mekanizma önbelleği kontrol eder ve gerekirse veri tabanından veri alır.
Önbellek şeffaf bir şekilde güncellenir.
Okuma kalıpları uygulama karmaşıklığını azaltır ancak altyapı karmaşıklığını artırır. Bunun yerine uygulama kaynağının ara yazılıma aktarılmasına yardımcı olur.
Genel olarak, önbellek kenarına yazma modeli, uygulama kolaylığı nedeniyle en yaygın olarak kullanılır. Ancak, önbelleğe alındıktan hemen sonra kullanılacak verileriniz varsa, içine yazma modelini de eklemenizi öneririm. Bu okuma performansına ufak bir fayda sağlayacaktır.
Bu bölümde önbellek kullanımına ilişkin en iyi uygulamaları inceleyeceğiz. Bu uygulamaları takip etmek, önbelleğinizin taze verileri korumasını ve depolama alanını etkili bir şekilde yönetmesini sağlayacaktır.
Verileri önbellekte sakladığınızı ve ardından veritabanının güncellendiğini hayal edin. Bu, önbellekteki verilerin veritabanı sürümünden farklı olmasına neden olur. Bu tür önbellek verilerine "eski" adını veriyoruz. Önbellek geçersiz kılma tekniği olmadan, önbelleğe alınan verileriniz veritabanı güncellemelerinden sonra eski kalabilir. Verileri güncel tutmak için aşağıdaki teknikleri kullanabilirsiniz:
Güncelleme Sırasında Önbelleğin Geçersiz Kılması: Veritabanındaki verileri güncellediğinizde, ilgili önbellek girişini de güncelleyin. Üzerine yazma ve geri yazma kalıpları doğal olarak bunu halleder, ancak etrafına yazma/önbelleğe alma, önbelleğe alınan verilerin açıkça silinmesini gerektirir. Bu strateji, uygulamanızın eski verileri almasını engeller.
Yaşam Süresi (TTL): TTL, verileri önbellekte saklarken ayarlayabileceğiniz bir politikadır. TTL ile veriler belirli bir süre sonra otomatik olarak silinir. Bu, kullanılmayan verilerin temizlenmesine yardımcı olur ve geçersiz kılmaların gözden kaçırılması durumunda eski verilere karşı bir arıza güvenliği sağlar.
Büyük miktarda veriyi önbelleğe alırsanız önbellek depolama alanınız dolabilir. Önbellek sistemleri genellikle birincil veritabanı depolama alanınızdan daha küçük olan belleği kullanır. Önbellek dolduğunda yer açmak için bazı verileri silmesi gerekir. Önbellek değiştirme politikaları hangi verilerin kaldırılacağını belirler:
En Son Kullanılan (LRU): Bu ortak politika, uzun süredir kullanılmayan (okunmayan veya yazılmayan) verileri çıkarır. LRU, gerçek dünyadaki kullanım durumlarının çoğuna uygundur.
En Az Sık Kullanılan (LFU): LRU'ya benzer, ancak erişim frekansına odaklanır. Yeni yazılan veriler çıkarılabilir, bu nedenle verilerin silinemeyeceği bir ısınma süresi eklemeyi düşünün.
FIFO (İlk Giren, İlk Çıkar), Rastgele Değiştirme vb. gibi diğer değiştirme politikaları mevcuttur ancak daha az yaygındır.
Önbellek uygulamasına dalmadan önce, bunun ne zaman en uygun olmayabileceğini bilmek önemlidir. Önbelleğe alma genellikle hızı artırır ve veritabanı yükünü azaltır, ancak aşağıdaki durumlarda anlamlı olmayabilir:
Düşük trafik: Uygulamanızın trafiği düşükse ve yanıt süresi hala kabul edilebilir düzeydeyse, muhtemelen henüz önbelleğe almaya ihtiyacınız yoktur. Önbellek eklemek karmaşıklığı artırır, bu nedenle performans darboğazlarıyla karşılaştığınızda veya trafikte önemli bir artış beklendiğinde en iyi şekilde uygulanır.
Sisteminiz yazma ağırlıklı: Önbelleğe alma, okuma ağırlıklı uygulamalarda en faydalı olanıdır. Bu, veritabanınızdaki verilerin nadiren güncellendiği veya güncellemeler arasında birden çok kez okunduğu anlamına gelir. Uygulamanızda yüksek miktarda yazma işlemi varsa önbelleğe alma, potansiyel olarak ek yük oluşturabilir ve işleri yavaşlatabilir.
Bu makalede, önbelleğe almanın temellerini ve bunun nasıl etkili bir şekilde kullanılacağını ele aldık. İşte önemli noktaların bir özeti:
İhtiyacı Onaylayın: Sisteminizin okuma ağırlıklı olduğundan ve gecikme azaltma önbellekleme tekliflerine ihtiyaç duyduğundan emin olun.
Desenleri Akıllıca Seçin: Uygulamanızın verileri kullanma şekliyle uyumlu önbellek yazmayı ve önbellek eksik kalıplarını seçin.
Veri Tazeliği: Eski verilerin sunulmasını önlemek için önbellek geçersiz kılma stratejilerini uygulayın.
Değiştirme İlkesini Yönetin: Önbellek kapasitesine ulaştığında silme işlemlerini gerçekleştirmek için bir önbellek değiştirme ilkesi (LRU gibi) seçin.