Asp.Net Oturum Sağlayıcısını AppFabric Oturum Sağlayıcısı ile Değiştirmek

imageWindows Server AppFabric hakkında daha önce yazmış olduğum makalelerime gelen sorulardan birisi de mevcut ASP.Net uygulamalarını Windows Server AppFabric önbelleğini kullanacak şekilde nasıl yapılandırılacağıydı. Bu makalemde asp.net tarafında yapılması gerekenleri adım adım paylaşmaya çalışacağım.

Asp.Net oturumunu neden AppFabric oturum sağlayıcısı ile değiştirmeliyim?

     Oturum sağlayıcımızı nasıl değiştirebileceğimizi anlatmadan önce, isterseniz neden böyle bir değişikliğe ihtiyaç duyarız inceleyelim.

     Windows Server AppFabric önbelleğini sizlere tanıttığım “AppFabric Caching” makalemde sizlerle örnek bir senaryo paylaşmıştım. Bu senaryoda, geliştirdiğimiz web tabanlı uygulama verileri doğrudan veritabanı üzerinden çekmekte ve aşağıdaki gibi az yoğunluktaki isteklerde sıkıntısız şekilde sistemimiz çalışmaktadır;

Sistemin ilk mimarisi

     Gün geçtikçe sitemiz popüler hale gelmeye başlar ve ziyaretçi sayımız hergün katlanarak artar. Böylesi bir durumda yapılabilecek ilk müdahale uygulamamız içerisinde önbellekte saklanabilecek verileri tespit ederek bunları asp.net oturumu içirisinde tutmak olacaktır. Aslına bakarsanız istek sayısı daha da artmadığı sürece bu senaryo sorunsuz olacaktır; fakat sitemizin giderek daha popüler olmaya devam ettiğini ve anlık istek sayılarının tek sunucunun yanıtlayabileceği değerlerin üzerine çıktığını düşünelim. Bu durumda sistemimizin yükü kaldırabilmesi için uygulama sunucularımızı yatayda büyütmek ve bunların önüne de bir load balancer yerleştirmek gerekecektir;

Gelen yoğun istenler sonrası değişen mimari

     Sistemimizin gelen istekleri karşılaması için yapacağımız bu haraket farklı bir sonuç doğuracaktır; kullanıcılar verilerinin kaybolduğundan şikayet edebilir. Eğer Load balancer uygulama sunucularının iş yüklerine göre dağıtım yapacak olursa, gelen bir istekte ilk sunucuya giden bir kullanıcının bir diğer isteği tamamen farklı bir sunucuya da gidebilir ve oturum bilgileri sunucular arasında paylaşılmadığı için veri kayıpları yaşanacaktır. Sitemiz örneğin bir alış veri sitesi ise kullanıcının sepetine attığı tüm siparişler böylesi bir senaryo da kaybolacaktır.

     Başka bir problemde önbelleği yenilerken yaşanacaktır, örneğin ürün kataloğunun güncellenmesi durumunda tüm önbelleklerin güncellenmesi için bundan tüm uygulama sunucularının haberdar olması gerekecektir. Bu durumda yönetimsel açıdan sizleri oldukça zorlayacaktır.

     Tüm bu senaryolarda, sadece önbellek yetersizliği nedeniyle yeni bir uygulama sunucusu eklemenin getireceği ek maliyete değinmiyorum bile…

     İşte bu noktada önbellek sağlayıcı olarak Windows Server AppFabric önbelleğini seçmek bize büyük bir esneklik sunacaktır. Windows Server AppFabric önbelliğine geçiş ile birlikte sistemimiz aşağıdaki yapıda görünecektir;

Windows Server AppFabric önbelleği ile birlikte yeni sistem mimarisi

     Web sitemizde Windows Server AppFabric önbelleğini kullanmak bize yatayda kolaylıkla genişleyebilme yeteneği sunmakta, üstelik bunu minimum maliyetle yapma şansıyla birlikte.

 

Asp.Net oturumunda nasıl AppFabric oturum sağlayıcısı kullanabilirim?

     Yukarıdaki bilgiler doğrultusunda hangi durumlarda AppFabric önbelleği oturum sağlayıcısını asp.net oturumlarında kullanmanız gerekebileceğini gördükten sonra bunu nasıl yapabileceğimizi inceleyelim.

     Windows Server AppFabric önbelleğiyle birlikte gelen asp.net oturum sağlayıcısı bizim için gerekli pek çok işi yapmakta aslına bakarsanız. Bu sağlayıcıyı kullanarak dakikalar içerisinde mevcut asp.net uygulamanızı Windows Server AppFabric önbelleğini kullanabilecek hale getirebilirsiniz.

     Asp.net oturumlarında Windows Server AppFabric önbelleğini kullanabilmek için web.config dosyasına önbellek yapılandırmasının bulunacağı bölümü eklemeli ve bu bölümün bir yapılandırma bölümü olduğunu asp.net’e belirtmeliyiz.

     İşe yapılandırma bölümünü tanıtarak başlayalım. Bunun için web.config dosyası içerisinde yer alan configSections elementi altına aşağıdaki girdi eklenmeli;

<section 
  name="dataCacheClient"
  type="Microsoft.ApplicationServer.Caching.DataCacheClientSection, Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
  allowLocation="true" 
  allowDefinition="Everywhere"/>

     Bu satır Asp.Net’i config dosyasında yer alacak olan dataCacheClient bölümünden haberdar edecek ve bu bölümü okurken Microsoft.ApplicationServer.Caching.Core assembly’si içerisinde yer alan DataCacheClientSection sınıfını kullanmasını söyleyecektir. Windows Server AppFabric kurulumu sırasında bu ve diğer assembly’ler Global Assembly Cache’e (GAC) atıldığı için asp.net ilgili assembly’yi kolaylıkla bulacaktır, ek bir işlem yapmanıza gerek yok.

     Bir sonraki adımda önbelleğimizi yapılandıracağız. Bunun için web.config dosyamıza dataCacheClient bölümünü eklemeli ve içerisinde ihtiyacımız olan yapılandırma bilgisini belirtmeliyiz. Bu örnek için dataCacheClient bölümünü web.config dosyası içerisinde configSections elementinden hemen sonra ekliyorum; fakat siz we.config dosyasında uygun olan bir başka yere de ekleyebilirsiniz.

     Aşağıda, en basit haliyle vermeye çalıştığım önbellek yapılandırma bölümünde;

  • Yerelde bir önbellek bulunacağını, bu yerel önbelleğin senkronizasyon yöntemi ile tutacağı nesne sayısı ve süresi,
  • Windows Server AppFabric önbellek kümesine dahil olan sunucular ile bunların önbellek portları

gibi bilgiler yer almakta.

<dataCacheClient>
    <localCache isEnabled="true" sync="TimeoutBased" objectCount="1000" ttlValue="600" />
    <hosts>
      <host name="localhost" cachePort="22233" />
    </hosts>
</dataCacheClient>

     Yukarıdaki örnekten yola çıkarsak; teorik olarak önbellek kümesinde yer alan en az bir sunucunun bilgisini vermek yeterli olacaktır. Önbellek istemcisi bu sunucuya bağlanarak kümeye dahil diğer sunucuların yapılandırma bilgilerini sizin için otomatik almaktadır; fakat pratikte size tavsiyem mümkün olduğunca kümeye dahil tüm sunucuların bilgilerini belirtmeniz. Burada tek bir sunucu belirtmeniz uygulamanızın ilk çalışma zamanında bu sunucuya ulaşılaması durumunda küme ayakta dahi olsa uygulamanızın önbelleğe ulaşamamasına neden olacaktır.

     Önbellek yapılandırmamızı yaptıktan ve bu bölümü asp.net’e tanıttıktan sonra son adıma geçebiliriz; asp.net oturum sağlayıcısı olarak Windows Server AppFabric önbelleğini belirtmek. Bunun için web.config dosyamızda system.web elementi altına aşağıdaki satırları yazmalıyız;

<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
  <providers>
    <add
      name="AppFabricCacheSessionStoreProvider"
      type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider, Microsoft.ApplicationServer.Caching.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      cacheName="default"
      sharedId="OrnekUygulamam"/>
  </providers>
</sessionState>

     Bu satırlarla birlikte asp.net’e alternatif bir oturum sağlayıcı kullanacağımızı söyleyerek bu alternatif oturum sağlayıcımızın bilgilerini belirtiyoruz. Bu son adım ardından artık asp.net oturumlar için Windows Server AppFabric önbellek oturum sağlayıcısını kullanmaya başlayacaktır.

     Yukarıdaki örnekte, provider’ımızı belirtirken kullandığım cacheName özniteliği ile asp.net oturum bilgilerinin küme içerisinde hangi önbellekte tutulacağını belirtmekteyim. Buna alternatif olarak regionName özniteliği ile nesnelerimin hangi bölümde saklanacağını da belirtebilirim; fakat bu durumda nesnelerim sadece bu bölgenin oluşturulduğu sunucuda tutulacağından tavsiye edilen bir yapılandırma yönetimi değildir.

     Bazı iş mantıklarında birden fazla asp.net uygulamasının aynı önbellek havuzunu kullanmasını isteyebiliriz. Bunun için yapılması gereken, bu ortak havuzu temsil edecek bir id belirleyerek her bir uygulamanın web.config içerisindeki yapılandırmasında provider’ımızı belirtirken sharedId özniteliği ile bu ortam id’mizi yapılandırmaya dahil etmektir. Yukarıdaki örnekte OrnekUygulamam şeklinde bir ortak id belirtilerek yapılandırmaya dahil edilmiştir. Eğer bu tarz bir ortak kullanım söz konusu değil ise yapılandırma içerisinde sharedId özniteliğine ihtiyaç bulunmamaktadır.

     Şimdiye kadar anlattıklarımı bir araya topladığımızda web.config dosyası aşağıdaki şekilde olmalıdır;

<?xml version="1.0"?>
<configuration>
    <configSections>
      .
      .
      .
      <section 
name="dataCacheClient" 
type="Microsoft.ApplicationServer.Caching.DataCacheClientSection, Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
allowLocation="true" 
allowDefinition="Everywhere"/>
    </configSections>

  <dataCacheClient>
    <localCache 
isEnabled="true" 
sync="TimeoutBased" 
objectCount="1000" 
ttlValue="600" />
    <hosts>
      <host 
name="localhost" 
cachePort="22233" />
    </hosts>
  </dataCacheClient>
  .
  .
  .
    <system.web>
      <sessionState 
mode="Custom" 
customProvider="AppFabricCacheSessionStoreProvider">
        <providers>
          <add
            name="AppFabricCacheSessionStoreProvider"
            type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider, Microsoft.ApplicationServer.Caching.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
            cacheName="default"
            sharedId="OrnekUygulamam"/>
        </providers>
      </sessionState>
  .
  .
  .
    </system.web>
     .
     .
     .
</configuration>

     Windows Server AppFabric önbelleğini asp.net oturum sağlayıcısı olarak kullanırken web.config dosyasında yapacağınız yukarıdaki değişiklikler dışında uygulama kodunuzda herhangi bir başka düzenlemeye ihtiyaç bulunmamakta. Siz asp.net uygulamanızda normal bir oturuma erişir gibi işlemlerini yapmaya devam ederken arka planda sizin için gerekli olan tüm önbellek erişimleri otomatik olarak yapılacaktır.

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