Makale Özeti

AppFabric Cache'in gerek ne olduğu gerekse de mantıksal/fiziksel yapısının nasıl olduğunu önceki makalelerimde anlatmıştım. Bu bilgiler ardından kodlamaya geçmek için sabırsızlandığınızı düşünüyorum; fakat kodlamadan önce geliştirme ortamında yapılması gereken bazı ön hazırlıklar bulunmakta. Bu makalemde yapılacak bu ön hazırlıklar hakkında bilgiler bulabilirsiniz.

Makale

AppFabric Cache hakkında yazdığım  önceki makalelerden gerek ne olduğu gerekse de yapısının nasıl olduğu hakkında detaylı bilgiler edindiğinizi umuyorum. Bu bilgilerden sonra eğer sizde bana benziyorsanız artık kodlamaya geçmek için sabırsızlanıyorsunuzdur; fakat kodlama aşamasına geçmeden önce takip etmeniz gereken bir kaç adım bulunmakta. Bu yazımda bu adımların neler olduğunu anlatmaya çalışacağım.

Makalemin içerisinde anlattığım komutları Windows PowerShell üzerinde çalıştırabilmeniz için öncelikle "Cache Administration" özelliğinin kurulu olması gerekli. Eğer AppFabric kurulumu sırasında bu bileşeni yüklemediyseniz üzülmeyin, "Add or Remove Features" bölümünden (Başlat menüsü -> Windows Server AppFabric -> Add or Remove Features) bu özelliği ekleyebilirsiniz.

Öncelikle AppFabric Cache öğrenirken denemelerinizi gerçekleştireceğiniz bir önbellek oluşturmalısınız. Bunun için bir Windows PowerShell komut satırı açarak PowerShell oturumunuz süresince çalıştıracağınız önbellek komutlarının hedefi olacak önbellek kümesini belirtmeniz gerekli.

Use-CacheCluster

Bu adımdan önce dikkat etmeniz gereken bir kaç noktayı özellikle not düşmem gerekir; bazı önbellek komutları ancak sistem yöneticisi yetkileri ile çalışmaktadır. Bu sebeple Windows PowerShell oturumunu sistem yöneticisi olarak başlatmanız önemli. İkinci olarak ise (yukarıdaki komutu yazımın devamını okumadan çalıştırdıysanız zaten göreceğiniz gibi) gerekli yönetim modülünü yüklenmeniz gerekli;

Import-Module DistributedCacheAdministration

Eğer DistributedCacheAdministration modülünü yüklemeden Use-CacheCluster komutunu çalıştırdıysanız aşağıdaki görüldüğü gibi “The term 'Use-CacheCluster' is not recognized as the name of a cmdlet, function, script file, or operable program. check the spelling of the name, or if a path was included, verify that the path is correct and try again.” şeklindeki hata mesajı ile karşılaşacaksınız.

UseClusterError

Use-CacheCluster komutu Provider ve ConnectionString adlarıyla iki parametre de kabul etmektedir. Bu parametrelerden;

  • Provider parametresi, küme yapılandırma bilgilerinin saklanacağı ortamı belirtmektedir. Bu parametreye XML (XML providerı için) ve System.Data.SqlClient (SQL Server providerı için) değerlerinden birisi verilebilir.
  • ConnectionString parametresi, veritabanı bağlantı cümleciğini belirtmektedir.

Üzerinde çalışacağınız önbellek kümesini belirtmeniz ardından artık yeni bir önbellek oluşturabilirsiniz;

New-Cache deneme

Yukarıdaki komutun PowerShell oturumunda çalıştırılmasıyla birlikte önbellek kümesinde deneme adıyla yeni bir isimlendirilmiş önbellek oluşturulacaktır. Burada deneme dışında istediğiniz herhangi başka bir önbellek ismi de seçebilirsiniz.

Yeni bir önbellek oluşturulurken yukarıda olduğu gibi sadece önbelleğin adının verilmesi yeterli olacaktır; fakat istenirse yüksek erişilebilirlik, nesne yaşam süresi, bilgi verme gibi ayarlarını da verebilirsiniz.

  • CacheName parametresi, önbelleğin hangi isimle oluşturulacağını belirtir.
  • Secondaries parametresi, önbellek için yüksek erişilebilirlik özelliğinin tanımlanıp tanımlanmayacağını belirtir. 0 ve 1 değerlerini verebileceğiniz bu parametrede yüksek erişilebilirlik için 0 değeri kullanılmalıdır.
  • Eviction parametresi, önbellekte bulunan nesnelerin silinme (tahliye) politikasını belirtir. LRU (Least Recently Use-En az kullanılmış olan) ve None (tahliye politikası kullanma)  değerlerini verebileceğiniz bu parametrede None değerini kullanacaksanız iki kez düşünmenizi tavsiye ederim. Tahliye politikasının kullanılmayacağının belirtildiği None değeri alan bir önbellek sunucusu zaman içerisinde hafızasının yetmemesi problemi ile karşı karşıya kalabilir.
  • NotExpirable parametresi, önbellekteki nesnelerin bir son kullanım zamanının olup olmadığını belirtir. true (nesnelerin son kullanma zamanı yoktur) ve false (nesnelerin son kullanma zamanı vardır) değerlerini alabilen bu parametre varsayılan olarak false değerini almaktadır.
  • TTL parametresi, önbellekteki nesneler için dakika cinsinden zaman aşım süresi tanımlamanızı sağlar.
  • NotificationsEnabled  parametresi, önbellek için bildirimlerin açık olup olmayacağını belirtir.true (bildirimler açık) ve false (bildirimler kapalı) değerlerini alabilen bu parametre varsayılan olarak false değerini almaktadır.

Yüksek erişilebilirlik konusunda düşmem gereken önemli bir not, bu özelliğin aktif olması için önbellek kümesinde birden fazla önbellek sunucusunun bulunuyor olması ve bu önbellek sunucularının her birinde Windows Server 2008 Enterprise ve/veya Windows Server 2008 R2 Enterprise işletim sisteminin çalışıyor olması gerekmekte.

Sıradaki adımda oluşturmuş olduğunuz isimlendirilmiş önbellek için kendinize erişim hakkı tanımlamalısınız;

Grant-CacheAllowedClientAccount $env:username

Burada $env:username kullanarak PowerShell oturumunu açmış kullanıcı adını vermiş olursunuz. İsterseniz bunun yerine kendinizin ya da izin vermek istediğini bir başkasının oturum adını kullanabilirsiniz.

Tüm bu ayarlamalar ardından önbellek kümesini aşağıdaki komut ile başlatabilirsiniz;

Start-CacheCluster

Yukarıdaki adımlar size sıkıncı geliyorsa, sizler için hazırladığım ve geliştirme ortamını kurmanıza yardımcı olacak bir cmdlet’i aşağıda bulabilirsiniz:

#################################################################
#       AppFabricCacheSetup.ps1 PowerShell Cmdlet               #
#################################################################
# AppFabric önbellek kümesini geliştirme ortamında kullanılmaya #
# hazır hale getirir.                                           #
#################################################################
# Fatih Boy, Mart 2010                                          #
# Version 1.2                                                   #
#################################################################

$user = [Security.Principal.WindowsIdentity]::GetCurrent()

if((New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)){
	Write-Host "Dağıtık önbellek yönetim modülü yükleniyor, lütfen beleyiniz..."
	Import-Module DistributedCacheAdministration
	Use-CacheCluster
	
	$cacheName= Read-Host "Lütfen oluşturulacak cache adını giriniz (default'u kullanmak için enter'a basınız)"

	if($cacheName -ne ""){
		New-Cache $cacheName
	}

	if ((Get-CacheAllowedClientAccounts) -notcontains $env:username) {
		Write-Host "$env:username kullanıcısı için önbellek erişim yetkisi veriliyor..."
		Grant-CacheAllowedClientAccount $env:username
	}

	$hostinfo = Get-CacheHost
	if($hostinfo.Status -eq [Microsoft.ApplicationServer.Caching.AdminApi.ServiceStatus]::Down){
		Write-Host "Önbellek kümesi başlatılıyor, lütfen bekleyiniz..."
		Start-CacheCluster
	}


	if($cacheName -ne ""){
		Write-Host ""
		Write-Host "$cacheName önbellek özellikleri : "
		Write-Host "----------------------------------"
		
		Get-CacheConfig $cacheName
	}else{
		Write-Host ""
		Write-Host "default önbellek özellikleri : "
		Write-Host "----------------------------------"
		Get-CacheConfig default
	}
}else{
	Write-Warning "Bu betiğin doğru çalışması için lütfen sistem yönetici haklarıyla çalıştırınız."
}

Bu cmdlet'i çalıştırdığınızda “AppFabricCacheSetup.ps1 cannot be loaded because the execution of scripts is disabled on this system.” şeklinde bir hata mesajı alabilirsiniz. Bu hatayı almanızın sebebi PowerShell’in varsayılan olarak güvenilir bir elektronik imza ile imzalanmamış (un-signed) betikleri çalıştırmayacak şekilde yapılandırılmış olmasıdır. Doğru şekilde çalıştırmanın iki yolu var; betiği bir elektronik imza ile imzalamak ya da komut satırından aşağıdaki komutu yazarak imzalanmamış betiklerin çalışmasına izin vermek.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

Bu komutta kapsam (-Scope) parametresine verdiğiniz Process değeriyle PowerShell’e bu çalıştırma ilkesini sadece içinde bulunduğumuz PowerShell oturumu süresince uygulaması gerektiğini belirtmiş olursunuz. Bu durumda imzalanmamış bir betik kullanacağınız her bir oturumda bu komutu yeniden vermeniz gerekmekte. Yine komutta çalışma ilkesi (-ExecutionPolicy) parametresine verdiğiniz RemoteSigned değeriyle sadece internetten indirdiğiniz betikler için güvenilir imza zorunluluğu olduğunu belirtmiş olursunuz.

Bu komutu her oturumda tekrar tekrar girmek size zor geliyorsa Scope parametresine CurrentUser (aktif kullanıcı) ya da LocalMachine (yerel makine) değerlerini vermelisiniz. Ek olarak; ExecutionPolicy parametresine vereceğiniz Restricted, AllSigned, RemoteSigned, Unrestricted, Bypass ve Undefined değerleriyle çalıştırma ilkesinin ne şekilde yapılandırılacağını belirtebilirsiniz.

Fatih Boy

http://www.enterprisecoding.com
http://twitter.com/fatihboy