ASP.NET oturum durumu ve önbelleğe alma sağlayıcısı olarak Azure Cosmos DB kullanın
UYGULANDıĞı YER:
SQL API
Azure Cosmos DB oturumu ve önbellek sağlayıcısı, Azure Cosmos DB kullanmanıza ve oturum durumu verilerini depolamak için düşük gecikme süresi ve küresel ölçek özelliklerinden ve uygulamanızda dağıtılmış bir önbellek olarak kullanmanıza olanak tanır.
Oturum durumu nedir?
Oturum durumu , bir kullanıcının bir süre boyunca bir Web uygulaması üzerinde gezindiğini aynı tarayıcı içinde izleyen kullanıcı verileri. Oturum durumunun süresi dolar ve belirli bir tarayıcı, tarayıcılarda genişlemediği etkileşimlerle sınırlıdır. Bu, kısa ömürlü veriler olarak kabul edilir, yoksa uygulama kesintiye uğramaz. Ancak, mevcut olduğunda, Web uygulamasının aynı kullanıcı için her tarayıcı isteğinde bu dosyayı getirmesi gerekmediğinden, bu durum Kullanıcı için daha hızlı hale getirir.
Genellikle, bazı durumlarda geçerli Web sunucusu dışındaki bir depolama mekanizması tarafından desteklenir ve daha yüksek ölçeklenebilirlik elde etmek için birden çok Web sunucusunda aynı tarayıcının yük dengeleme isteklerini etkinleştirebilirsiniz.
En basit oturum durumu sağlayıcısı, verileri yalnızca yerel Web sunucusu belleğinde depolayan ve uygulamanın uygulama Isteği yönlendirmekullanmasını gerektiren bellek içi sağlayıcıdır. Bu, tarayıcı oturumunu belirli bir Web sunucusuna yapışkan hale getirir (bu tarayıcıya yönelik tüm istekler, her zaman aynı Web sunucusuna bağlı olmalıdır). Sağlayıcı basit senaryolarda iyi çalışmaktadır, ancak bu gereksinim, Web uygulamalarının ölçeklendirilmesi sırasında Yük Dengeleme sorunları getirebilir.
Birden çok Web sunucusu tarafından okunabilen ve erişilebilen bir şekilde oturum verilerini depolayabilen ve daha yüksek bir ölçeklendirmeyi etkinleştiren birçok harici depolama sağlayıcısı mevcuttur.
Oturum durumu senaryoları
Cosmos DB, Microsoft. Extensions. Önbelleğe Alma uzantı paketi aracılığıyla oturum durumu sağlayıcısı olarak kullanılabilir. Cosmos , anahtarın oturum tanımlayıcısı olduğu bir anahtar/değer yaklaşımını temel alarak etkin bir oturum depolama alanı olarak kapsayıcı kullanan Azure Cosmos DB .net SDK 'sınıkullanır.
Paket eklendikten sonra, AddCosmosCache Başlangıç sürecinizi (Hizmetleri) bir parçası olarak kullanabilirsiniz. AddSession ve App. UseSession, herhangi bir oturum durumu sağlayıcısı için gereken yaygın başlatma adımlardır:
public void ConfigureServices(IServiceCollection services)
{
/* Other service configurations */
services.AddCosmosCache((CosmosCacheOptions cacheOptions) =>
{
CosmosClientBuilder clientBuilder = new CosmosClientBuilder("myConnectionString")
.WithApplicationRegion("West US");
cacheOptions.ContainerName = "myContainer";
cacheOptions.DatabaseName = "myDatabase";
cacheOptions.ClientBuilder = clientBuilder;
/* Creates the container if it does not exist */
cacheOptions.CreateIfNotExists = true;
});
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromSeconds(3600);
options.Cookie.IsEssential = true;
});
/* Other service configurations */
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
/* Other configurations */
app.UseSession();
/* app.UseEndpoints and other configurations */
}
Oturum durumunun depolanmasını istediğiniz veritabanını ve kapsayıcıyı belirttiğiniz yerde ve isteğe bağlı olarak yoksa, bunları oluşturun.
' yi kullanarak SDK istemci yapılandırmanızı özelleştirebilir CosmosClientBuilder veya uygulamanız zaten CosmosClient Cosmos DB diğer işlemler için kullanıyorsa, bunu sağlayıcıya ekleyebilirsiniz:
services.AddCosmosCache((CosmosCacheOptions cacheOptions) =>
{
cacheOptions.ContainerName = "myContainer";
cacheOptions.DatabaseName = "myDatabase";
cacheOptions.CosmosClient = preExistingClient;
/* Creates the container if it does not exist */
cacheOptions.CreateIfNotExists = true;
});
bundan sonra diğer tüm sağlayıcılar gibi ASP.NET Core oturumlarını kullanabilir ve HttpContext. Session nesnesini kullanabilirsiniz. ASP.NET önerileregöre her zaman zaman uyumsuz olarak oturum bilgilerinizi yüklemeyi denemenize dikkat edin.
Dağıtılmış önbellek senaryoları
Cosmos DB sağlayıcı, dağıtılmış önbellek sağlayıcısı görevi gören ıdistributedcache arabiriminiuyguladığı için, yalnızca bir performans ve dağıtılmış oturum durumu sağlayıcısı gerektiren web uygulamaları için değil, dağıtılmış önbellek gerektiren herhangi bir uygulama için de kullanılabilir.
Dağıtılmış önbellekler, bu önbelleğe alınmış verileri paylaşamayacak bağımsız örnekler sağlamak için veri tutarlılığı gerektirir. Cosmos DB sağlayıcıyı kullanırken şunları yapabilirsiniz:
- uygulama isteği yönlendirmeyi etkinleştirebilmeniz ve istekleri belirli bir örneğe yapışkan hale getirmek için oturum tutarlılığı ' nda Cosmos DB hesabınızı kullanın.
- istek sürekliliği gerekmeden Cosmos DB hesabınızı sınırlı eskime veya güçlü tutarlılık ile kullanın. Bu, örneklerinizin genelinde yük dağılımı açısından en büyük ölçeği sağlar.
Cosmos DB sağlayıcıyı dağıtılmış önbellek olarak kullanmak için, ' de ConfiguredService çağrısıyla birlikte kaydedilmesi gerekir services.AddCosmosCache . Bu işlem yapıldıktan sonra, uygulamadaki herhangi bir Oluşturucu başvuruda bulunarak önbelleği isteyebilir IDistributedCache ve bu, kullanılacak bağımlılık ekleme tarafından eklenen örneği alacaktır:
public class MyBusinessClass
{
private readonly IDistributedCache cache;
public MyBusinessClass(IDistributedCache cache)
{
this.cache = cache;
}
public async Task SomeOperationAsync()
{
string someCachedValue = await this.cache.GetStringAsync("someKey");
/* Use the cache */
}
}
Sorun giderme ve tanılama
UYGULANDıĞı YER:
SQL API
Cosmos DB sağlayıcı, altında .net SDK 'yı kullandığından, tüm mevcut performans yönergeleri ve sorun giderme kılavuzları , olası sorunları anlamak için geçerlidir. bu, ıdistributedcache apı 'leri aracılığıyla sunulamadıklarından, temeldeki Cosmos DB işlemlerinden tanılara erişim almanın ayrı bir yolu vardır.
İsteğe bağlı tanılama temsilcisini kaydetmek, yüksek gecikme gibi durumlarda sorun gidermek için herhangi bir tanılamayı yakalayıp, koşullu olarak günlüğe kaydetmeyi sağlar:
void captureDiagnostics(CosmosDiagnostics diagnostics)
{
if (diagnostics.GetClientElapsedTime() > SomePredefinedThresholdTime)
{
Console.WriteLine(diagnostics.ToString());
}
}
services.AddCosmosCache((CosmosCacheOptions cacheOptions) =>
{
cacheOptions.DiagnosticsHandler = captureDiagnostics;
/* other options */
});
Sonraki adımlar
- Azure Cosmos DB oturum ve önbellek sağlayıcısı hakkında daha fazla bilgi edinmek için GitHub kaynak kodabakın.
- bir ASP.NET Core web uygulamasını keşfetmek için bir örnek inceleyerek Azure Cosmos DB oturumu ve önbellek sağlayıcısını deneyin .
- .NET 'teki Dağıtılmış önbellekler hakkında daha fazla bilgi edinin.