Aracılığıyla paylaş


Eşzamanlılık Modelleri (Windows Server AppFabric Önbelleğe Alma)

Windows Server AppFabric mimarisi, uygun ağ erişimine ve yapılandırma ayarlarına sahip olmaları koşuluyla tüm önbellek istemcilerinin önbelleğe alınmış tüm verilere açıkça erişmesine olanak tanır. Bu, hem güvenlik hem de eşzamanlılık açısından bir zorluk oluşturur.

Güvenlik risklerini azaltmak amacıyla tüm önbellek istemcileri, önbellek sunucuları ve birincil veri kaynağı sunucusu aynı etki alanının üyeleri olmalıdır ve güvenlik duvarı çevresi dahilinde dağıtılmalıdır. Ayrıca, önbellek istemcilerindeki uygulama yapılandırma dosyalarınızın güvenliğini sağlamanızı kesinlikle öneririz.

Uygulamanızın eşzamanlılık sorunları ile ilgilenmesine yardımcı olmak için AppFabric iyimser ve kötümser eşzamanlılık modellerini destekler. Bu modellere uyan mevcut yöntemler hakkında bilgi için bkz. Eşzamanlılık Yöntemleri (Windows Server AppFabric Önbelleğe Alma).

İyimser Eşzamanlılık Modeli

İyimser eşzamanlılık modelinde, önbelleğe alınmış nesnelere yapılmış güncelleştirmeler kilit almaz. Onun yerine, önbellek istemcisi önbellekten nesne aldığında, o nesnenin geçerli sürümünü de edinir ve depolar. Güncelleştirme gerektiğinde, önbellek istemcisi nesnenin yeni değerini depolanan sürüm nesnesiyle birlikte gönderir. Sistem nesneyi yalnızca, gönderilen sürüm nesnenin önbellekteki geçerli sürümüyle eşleşiyorsa güncelleştirir. Nesnenin her güncelleştirmesi sürüm numarasını değiştirir, bu değişiklik güncelleştirmenin başka birisinin değişikliklerinin üzerine yazmasına engel olur.

Bu konudaki örnekte iyimser eşzamanlılığın veri tutarlılığını nasıl koruduğu gösterilmiştir.

Örnek

Bu örnekte, iki ayrı uygulama sunucusundaki iki önbellek istemcisi (cacheClientA ve cacheClientB) RadioInventory adlı aynı önbellek nesnesini güncelleştirmeyi deniyor.

Sıfır Zamanı: Her İki İstemci Aynı Nesneyi Alır

Sıfır zamanında (T0), iki önbellek istemcisi de güncelleştirmeyi planladıkları önbelleğe alınmış nesneyi yakalamak için önbelleğe alınmış o nesneyle ilgili sürüm ve etiket bilgisi gibi ek bilgilerle birlikte DataCacheItem sınıfının örneğini oluşturur. Bu, aşağıdaki şekilde ve kod örneğinde gösterilmiştir.

"Velocity" eşzamanlı modeli T0'da

'cacheClientA pulls the FM radio inventory from cache
Dim clientACacheFactory As DataCacheFactory = New DataCacheFactory()
Dim cacheClientA As DataCache = _
        clientACacheFactory.GetCache("catalog")
Dim radioInventoryA As DataCacheItem = _
        cacheClientA.GetCacheItem("RadioInventory", "electronics")

'cacheClientB pulls the same FM radio inventory from cache
Dim clientBCacheFactory As DataCacheFactory = New DataCacheFactory()
Dim cacheClientB As DataCache = _
       clientBCacheFactory.GetCache("catalog")
Dim radioInventoryB As DataCacheItem = _
        cacheClientA.GetCacheItem("RadioInventory", "electronics")
//cacheClientA pulls the FM radio inventory from cache
DataCacheFactory clientACacheFactory = new DataCacheFactory();
DataCache cacheClientA = clientACacheFactory.GetCache("catalog");
DataCacheItem radioInventoryA = 
    cacheClientA.GetCacheItem("RadioInventory","electronics");

//cacheClientB pulls the same FM radio inventory from cache
DataCacheFactory clientBCacheFactory = new DataCacheFactory();
DataCache cacheClientB = clientBCacheFactory.GetCache("catalog");
DataCacheItem radioInventoryB= 
    cacheClientA.GetCacheItem("RadioInventory", "electronics");

Not

Bu örnek, DataCacheItem nesnesini almak için GetCacheItem yöntemini kullanarak sürüm bilgilerini elde ettiğinden, alınan önbellek öğesiyle ilişkilendirilmiş DataCacheItemVersion nesnesini elde etmek için Get yöntemini kullanmak da olasıdır.

Bir Zamanı: Birinci Güncelleştirme Başarılı Olur

Bir zamanında (T1), cacheClientA önbelleğe alınmış RadioInventory nesnesini yeni değerle güncelleştirir. cacheClientAPut yöntemini yürüttüğünde, RadioInventory önbellek öğesiyle ilişkili sürüm artar. Bu sırada, cacheClientB, güncel olmayan bir önbellek öğesi içerir. Bu, aşağıdaki şekilde ve kod örneğinde gösterilmiştir.

"Velocity" eşzamanlı modeli T1'de

'at time T1, cacheClientA updates the FM radio inventory
Dim newRadioInventoryA As Integer = 155

cacheClientA.Put("RadioInventory", newRadioInventoryA, _
                 radioInventoryA.Version, "electronics")
//at time T1, cacheClientA updates the FM radio inventory
int newRadioInventoryA = 155;

cacheClientA.Put("RadioInventory", newRadioInventoryA, 
    radioInventoryA.Version,"electronics");

İki Zamanı: İkinci Güncelleştirme Başarısız Olur

İki zamanında (T2), cacheClientB, artık güncel olmayan sürüm numarasını kullanarak önbelleğe alınmış RadioInventory nesnesini güncelleştirmeyi dener. cacheClientA'dan yapılan değişikliklerin üzerine yazılmasına engel olmak için cacheClientBPut yöntemi çağrısı başarısız olur. Önbellek istemcisi ErrorCode özelliği CacheItemVersionMismatch olarak ayarlanmış DataCacheException nesnesini oluşturur. Bu, aşağıdaki şekilde ve kod örneğinde gösterilmiştir.

"Velocity" eşzamanlı modeli T2'de

'later, at time T2, cacheClientB tries to 
'update the FM radio inventory, throws DataCacheException with
'an error code equal to DataCacheErrorCode.CacheItemVersionMismatch.
Dim newRadioInventoryB As Integer = 130

cacheClientB.Put("RadioInventory", newRadioInventoryB, _
                 radioInventoryB.Version, "electronics")
//later, at time T2, cacheClientB tries to 
//update the FM radio inventory, throws DataCacheException with
//an error code equal to DataCacheErrorCode.CacheItemVersionMismatch.
int newRadioInventoryB = 130;

cacheClientB.Put("RadioInventory", newRadioInventoryB,
    radioInventoryB.Version,"electronics");

Kötümser Eşzamanlılık Modeli

Kötümser eşzamanlılık modelinde, istemci nesneleri işlem gerçekleştirmeye karşı açık olarak kilitler. Kilitler serbest bırakılıncaya kadar kilit gerektiren diğer işlemler reddedilir (sistem istekleri engellemez). Nesneler kilitlendiğinde, kilit tanıtıcısı çıkış parametresi olarak döndürülür. Nesnenin kilidini açmak için kilit tanıtıcısı gereklidir. İstemci uygulamanın kilitli nesnenin serbest bırakılmasından önce sona ermesi durumunda, kilitleri serbest bırakmak için zaman aşımları sağlanır. Kilitli nesnelerin hiçbir zaman süresi sona ermez, ancak sona erme süreleri geçmişse kilitleri açıldıktan hemen sonra kullanım süreleri sona erer. Kötümser eşzamanlılık modelinde kullanılan yöntemler hakkında daha fazla bilgi için bkz. Eşzamanlılık Yöntemleri (Windows Server AppFabric Önbelleğe Alma).

Not

İşlemlerin dağıtılması desteklenmez. Önbelleği kullanan uygulama, kilitlerin sırasını belirlemekten ve varsa çıkmazları algılamaktan sorumludur.

Uyarı

Önbellekte kilitlenen nesneler Put yöntemiyle herhangi bir istemci tarafından değiştirilebilir. Önbellek kullanan uygulamalar, kötümser eşzamanlılık modelini kullanan öğeler için PutAndUnlock'ı tutarlı bir şekilde kullanmaktan sorumludur.

Ayrıca bkz.

Kavramlar

Eşzamanlılık Yöntemleri (Windows Server AppFabric Önbelleğe Alma)
Windows Server AppFabric Önbelleğe Alma Fiziksel Mimarisi Diyagramı
Windows Server AppFabric Önbelleğe Alma Mantıksal Mimarisi Diyagramı
Önbellek İstemcisi Geliştirme (Windows Server AppFabric Önbelleğe Alma)

  2011-12-05