Caching Nedir?
Merhaba sevgili yazılım aşıkları,
Günlük hayatta yapılan rutin işlemleri bilgisayar destekli ortamlarda modellemeye çalışırız. Bu işlem sonucunda kullanıcıların günlük hayatta yaptığı işleri daha hızlı şekilde yapmalarını sağlayan yazılımlar geliştirmiş oluruz. Geliştirdiğimiz yazılımları kullanan kişi sayısı arttıkça yavaşlamanın olmamasını isteriz. Çok fazla kullanılan modüllerin kullanıcılara hızlı cevap vermesini isteriz. Tüm bu ve bu doğrultudaki isteklerimize caching yöntimi pozitif yönde katkı sağlamaktadır.
Caching sık kullanılan dataları kaydetme tekniğine verilen isimdir. Kaydetme işlemi uygulamayı host eden sunucunun ram belleğinde(In Memory Caching) ve harici bir caching sunusunda(Distributed Caching) gerçekleştirilebilir.
Cacheleme, kullanıcılara pozitif yönde bir uygulama deneyimi sağlar. Çok sık erişilmeyen dataları cachelemek gereksiz bir kaynak kullanımına sebeb olacaktır. Çok sık değişen dataları ise cachelememek gerekir. Çünkü istek yapan kullanıcıya yanlış data göndermiş oluruz.
Cacheleyeceğimiz datanın iki özelliği taşıyor olması gerekir. Birincisi çok güncellenmemeli, İkincisi çok sık erişiliyor olmalı.
Neden Cache Kullanmalıyız?
- Uygulama kullanıcısına hızlı cevap verebilmek için
- Daha iyi kullanıcı deneyimi sağlamak için
- Veri Tabanı tarafındaki gereksiz bandwidth trafiğini azaltmak için
- 1 kişi girdiği zamanda 100 kişi girdiği zamada aynı kullanıcı deneyimi sağlayabilmek için
Cache Stratejileri
On-Demand: Verilerin talep edildiği an cachelenmesine verilen isimdir.
Prepopulation: İstek gelmeden uygulama ayağa kalkar kalkmaz verilerin cachelendiği seneryoya verilen isimdir.
Cache Ömrü
Absolute Time: Verilen süre dolduğunda veri cache’den silinir.
Sliding Time: Verilen süre içerisinde cache verisine erişilirse, Cache in süresi siliding time süresi kadar daha uzatılmış olur.(Sadece bu özellik kullanılırsa her zaman eski dataya ulaşılabilir. Bu sorunu engellemek için sliding time la birlikte absolute time da belirtmek gerekir.)
In-Memory(private) cache ve Distributed(shared) cache olmak üzere iki çeşit cache yöntemi vardır.
In-Memory Caching
In-Memory Cache uygulama ile ilgili verilerin uygulamanın çalıştığı uygulama sunucusunun ram belleğinde tutulması işlemidir. Tutabileceğimiz cache boyutu uygulama sunucusunun ram miktarıyla doğru olarantılıdır.
Uygulamamızın tekbir instance varsa problemsiz bir şekilde kullanılır.
Uygulamamızın birden fazla instance varsa ve bu instancelara bir “load balancer” yönlendirme yapıyorsa uygulamaya istek yapan kullanıcı farklı zamanlarda farklı instance lara yönlendirilebilir. Bu durumda kişi farklı zamanlarda farklı cachelere ulaşacağından her isteğinde farklı bir veri görür. Bu tutarsızlığı çözmek için “load balancer” üzerinden “sticky session” özelliği ile uygulamaya istek yapan kullanıcı devamlı aynı uygulama instance ına gönderilebilir. Sticky Session cokie veya Ip’ye göre yönlendirme yapabilmektedir.
Eğer uygulamamız birden fazla sunucu üzerinde çalışıyorsa In-Memory Cache yerine Distributed Cache kullanmak daha doğru olacaktır.
Disributed Caching
Distributed Cache yönteminde, Cache dataları uygulamanın ayağa kalktığı host işletim sisteminin ram belleğinde tutulmaz. Bu yöntemde cache dataları ayrı bir cache service inde tutulur.
Avantajları Nelerdir?
- Veri tutarsızlığının önüne geçilmiş olur.
- Uygulamanın ayağa kaktığı host bilgisayar resetlendiğinde cache verileri silinmez.
Distributed Caching Dezavantajları Nelerdir?
- Farklı bir service ‘den cache dataları istendiği için In-Memory Cache yöntemine göere daha yavaşdır.
- In-Memory Cache yöntemine göre kullanımı daha zordur.
Yararlı olması dileklerimle. İyi çalışmalar diliyorum.