AppFabric Caching

AppFabric Cache (ya da kod adıyla Velocity) ölçeklenebilir, erişilebilir ve yüksek performanslı uygulamalar geliştirmek için sunulan harici bir dağıtık uygulama önbellek platformudur. Temelde WCF uçnoktası ile erişilebilen bir windows hizmeti olan AppFabric Cache, sizin yerinize verilerinizin nerede ve ne şekilde tutulacağını yönetmekle kalmayıp bu işlemi senkronize şekilde birden fazla bilgisayar üzerinde rahatlıkla yapabilmekte, üstelik kodunuzda bir değişikliğe ihtiyaç duymadan. Uygulamalarınızda kullandığınız her türlü veriyi (CLR nesneleri, XML, binary v.b.) harici ve dağıtık bir yapıda önbellekte tutabilmenize imkan veren AppFabric Caching sayesinde uygulamanızı ihtiyaçlarınız doğrultusunda yatayda dilediğiniz kadar genişletebilme gücüne sahip olabileceksiniz. Bu özelliğin size getireceği bir diğer önemli güç ise uygulamanızın yüksek erişilebilirliğe sahip ve hatalara karşı töleranslı olmasıdır. AppFabric Cache’in bir başka önemli özelliği asp.net oturum sağlayacı (session provider) desteği sunması. Bu özellikle birlikte mevcut asp.net uygulama kodunuzda değişikliğe ihtiyaç duymaksızın yapılandırma dosyasında oturum sağlayıcı olarak AppFabric Cache’i verebilir ve size sağladığı tüm avantajları anında kullanmaya başlayabilirsiniz.

Örnek bir senaryo üzerinden AppFabric Cache’i hangi gereksinimler nedeniyle ve ne şekilde kullanabilirsiniz görmeniz konuyu daha iyi anlamanız açısından faydalı olacaktır; web tabanlı bir uygulama yaptığınızı düşünelim. Arka planda verilerinizi bir veritabanında saklamaktasınız. Aşağıdaki grafikte görülen mimaride, sunucu ve istemci tarafları birbirinden ayrılmış.

Sistemin ilk mimarisi

Uygulamanız ister IIS üzerinde host edilen ve Asp.Net ile yazılmış bir web sitesi ya da bir WCF servisi, isterse de bir windows servisi olsun. Başta sisteminiz oldukça performanslı çalışacak, kullanıcı isteklerine hızlıca yanıt verecektir.

Zamanla sisteminizin popüleritesi artacak ve yukarıdaki mimari ile istekleri karşılayamayacak duruma geleceksiniz.

Gelen istekler sonrası yeni mimari

Bu yeni durum karşısında sisteminize yatırım yaptığınızı düşünelim, iki yeni sunucu eklenmesiyle birlikte bir load-balancer arkasında toplamda üç sunucu ve bir veritabanı ile hizmet veriyorsunuz.

Bu yeni mimari ile birlikte daha önceden hesaplamadığınız sıkıntılar yaşamaya başladınız. Uygulamanız örneğin bir asp.net uygulaması ise oturum bilgilerini sunucularınız arasında paylaştıramadığınız için gelen bir istemci oturumu boyunca aynı sunucu tarafından hizmet görmek zorunda. Bu durumda, sisteminizde bulunan load-balancer gerçek anlamda yükü dağıtamaz duruma gelmiştir. Üstelik gelen yoğun istekler sonrası büyüyen sisteminizde veritabanı da sizin için başta düşündüğünüzden çok daha önemli bir kaynak haline geldi ve bu kaynağa yaptığınız her ekstra erişimle birlikte uygulamanız yavaşlar oldu. Tüm bunların yanında peki ya sunuculardan birisi aniden bozulursa? ya da bir sunucudaki asp.net uygulamanız oluşan bir hatadan dolayı yeniden başlar ve oturum bilgileri kaybolursa? Bu durumda en iyi ihtimalle bile kullanıcı memnuniyetini kaybedeceğiniz için bir kayıp söz konusu olacaktır; kaldı ki kötü ihtimallerde önemli verilerin kaybı dahi söz konusu olabilir.

Yeni mimarideki belki de en önemli problem, yukarıda da belirttiğim gibi, gelen isteklerin yoğunluğunda her gelen istekte çok önemli bir kaynak olan veri tabanına gidilmesi sistemde yavaşlamalara neden olacaktır. Veriniz büyüdükçe yapılan sorguların maliyeti giderek daha fazla artacak ve sonuç kullanıcılarınıza sistem yavaşlıkları olarak yansıyacaktır. Bu problemin çözümü ise hem mimari, hem maliyet açısından oldukça külfetlidir. Bazı durumlarda bu problemin çözümü o kadar maliyetli olabilir ki, yeni bir müşteri kabul etmemek bile size mantık gelmeye başlar.

Bu durumda öncelikli ihtiyacınız tüm sunucularınızla payşalıcak bir yapıda ve veri kaybına neden olmayacak şekilde oturum bilgilerinin tutulması. Aynı şekilde sık erişim yapılan verilerin (örneğin ürün kataloğunun) hafızada tutulmasıyla sistemin daha hızlı yanıt vermesinin sağlanması gereklidir.

Böylesi bir ihtiyaca yönelik kod geliştirmek hem zamanınızı alacaktır hem de asıl hedefinizden sapmanıza ve ek maliyetler oluşmasına neden olacaktır. İşte tam da bu noktada AppFabric Caching sahneye çıkmakta.

AppFabric Cache ile yeni mimari

Mimarinizin en başından AppFabric Caching ile tasarlanması ile birlikte sık erişimi olan bilgilerinizi ve oturum bilgilerinizi önbellek kümesine alabilir, bu sayede hem yatayda genişletilebilirlik kazanır hem de sistem performansınızı arttırmış olursunuz. Örneğin, bir alış-veriş sitesinde her gelen istekte ürün/fiyat kataloğunun yeniden oluşturulması yerine ilk istekte hesaplayarak sonraki istekler için önbellekte tuturak buradan sunulmasının performansı arttıracağı aşikardır. Üstelik dilerseniz AppFabric Cache’e attığınız verileri birbirinden yalıtabilirsiniz; ki bu sayede sistem güvenirliği de arttırılmış olacaktır.

AppFabric Cache yüksek erişilebilirlik sunmak amacıyla verilerinizi önbellek içerisinde bulunan sunucular arasına dağıtmaktadır. Yüksek erişilebilirlik için verilerinizin aynı anda birden fazla sunucuda kopyası bulunabilir; fakat bu sunuculardan sadece birisini birincil olarak veriden sorumludur. Küme içerisindeki tüm sunucular birbirlerinden haberdar ve birbirlerini takip etmektedir. Sunuculardan birisinin herhangi bir sebeple erişelemez duruma gelmesi halinde küme içerisindeki diğer bir sunucu erişilemeyen sunucudaki veriler için birincil sorumlu haline gelerek veri kayıpsız şekilde sistemin çalışmasını sağlayacaktır.

Verileriniz önbellek kümesinde anahtar-değer ikilisi şeklinde tutulmaktadır. Programsal olarak herhangi bir anahtar için değer değişimleri takip edilebileceği gibi bir önbellek içindeki tüm değişiklikler de takip edilebilir.

AppFabric Cache kümesinin yönetimi ise bizlere sunulan PowerShell komutları üzerinden yapılabilmektedir. PowerShell komutları ile önbellek içerisinde nesnelerin yaşam ömürleri, yedeklerinin bulunması gibi bilgilere erişilebilir/düzenleyebilinir. Bunun yanında önbellek kümesi yetkileri düzenlenebilir, kümeye yeni önbellek sunucusunun erişimi sağlanabilir.

AppFabric Cache’in Beta 2 sürümü ile gelen
yeni bir özelliği ise performans monitörü üzerinden önbellek durumunun takip edilebilmesi. Bu özellik sayesinde anlık yapılan okuma yazma istekleri, önbellekte tutulan nesne boyutları v.b. sisteminizi takip etmenizi kolaylaştıran bilgilere anlık ve hızlı şekilde ulaşabileceksiniz.

Yukarıda detaylı olarak anlattığım AppFabric Cache’in sunduğu avantajlar özet olarak şu şekilde sıralanabilir;

  • Aynı ve/veya farklı uygulamalarınız arasında veri paylaşımı yapabilirsiniz
  • Uygulamalarınız verileri önbelleğe alabildikleri için daha performanslı çalışacaktır.
  • Performans ihtiyaçlarınız doğrultusunda sisteminizi istediğiniz şekilde yatayda genişletebilirsiniz.
  • Sisteminiz 7/24 hizmet verebilir hale gelecektir. Herhangi bir sebeple sunucularınızda birisi hizmet veremeyecek durumda dahi olsa bir bilgi kaybı olmayacak, önbellekteki veriler küme içerisideki diğer sunucularca size iletilebilecektir.
  • PowerShell desteği sayesinde merkezi bir noktadan yönetilebilir.
  • Önbellekler Perfmon aracı ile izlenebilir (Beta1 sürümünden itibaren)
  • Loglama ile durum takibi yapılabilir.
  • Tüm bu getiriler oldukça düşük maliyetlerle birlikte gelmekte.

AppFabric Cache aslında yeni çıkmış bir teknoloji değil. İlk olarak haziran 2008’de Velocity kod adıyla CTP1 sürümü yayınlandı. Bunu CTP2 (PDC08) ve CTP3 (Mart 2009) sürümleri takip etti. Ürünün Beta1 (Kasım 2009) olarak yayınlanmasıyla birlikte AppFabric Cache olarak isimlendirildi.

Bu makalenin yazıldığı zamanda Beta 2 (Mix10) sürümü yayınlanmış olan AppFabric Cache’in 2010 yılı içerisinde RTM sürümünün yayınlanması planlanmakta. İlerleyen zamanlarda ise Windows Azure ile entegre çalışacak olan Azure CTP sürümünün yayınlanması söz konusu.

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir