Aracılığıyla paylaş


Azure Cosmos DB'yi ASP.NET oturum durumu ve önbelleğe alma sağlayıcısı olarak kullanma

UYGULANANLAR: NoSQL

Azure Cosmos DB oturumu ve önbellek sağlayıcısı, Azure Cosmos DB'yi kullanmanıza ve oturum durumu verilerini uygulamanızda dağıtılmış önbellek olarak depolamak için düşük gecikme süresi ve genel ölçek özelliklerini uygulamanıza olanak tanır.

Oturum durumu nedir?

Oturum durumu , belirli bir süre boyunca bir web uygulamasında gezinen bir kullanıcıyı aynı tarayıcı içinde izleyen kullanıcı verileridir. Oturum durumunun süresi dolar ve belirli bir tarayıcının tarayıcılar arasında genişlemeyen etkileşimleriyle sınırlıdır. Kısa ömürlü veriler olarak kabul edilir, yoksa uygulamayı bozmaz. Ancak, mevcut olduğunda, web uygulamasının aynı kullanıcı için her tarayıcı isteğinde getirmesi gerekmeyen kullanıcı için deneyimi hızlandırır.

Genellikle bazı durumlarda geçerli web sunucusunun dışında olabilecek ve daha yüksek ölçeklenebilirlik elde etmek için birden çok web sunucusunda aynı tarayıcının yük dengeleme isteklerini etkinleştirebilen bazı depolama mekanizmaları tarafından desteklenir.

En basit oturum durumu sağlayıcısı, verileri yalnızca yerel web sunucusu belleğinde depolayan ve uygulamanın Uygulama İsteği Yönlendirmesi'ni kullanması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 isteklerin her zaman aynı web sunucusuna inmiş olması gerekir). Sağlayıcı basit senaryolarda iyi çalışır, ancak yapışkanlık gereksinimi, web uygulamaları ölçeklendirildiğinde yük dengeleme sorunlarına neden olabilir.

Oturum verilerini, oturum sürekliliği gerektirmeden birden çok web sunucusu tarafından okunabilecek ve erişilebilecek ve daha yüksek bir ölçek sağlayacak şekilde depolayan birçok dış depolama sağlayıcısı vardır.

Oturum durumu senaryoları

Azure Cosmos DB, Microsoft.Extensions.Caching.Cosmos uzantı paketi aracılığıyla oturum durumu sağlayıcısı olarak kullanılabilir. Azure Cosmos DB .NET SDK'sını kullanır ve anahtarın oturum tanımlayıcısı olduğu bir anahtar/değer yaklaşımını temel alan etkili bir oturum depolama alanı olarak kapsayıcıyı kullanır.

Paket eklendikten sonra Başlangıç işleminizin (hizmetler) bir parçası olarak kullanabilirsinizAddCosmosCache. AddSession ve uygulama. UseSession, herhangi bir oturum durumu sağlayıcısı için gereken yaygın başlatma adımlarıdır:

public void ConfigureServices(IServiceCollection services)
{
  /* Other service configurations */
  services.AddCosmosCache((CosmosCacheOptions cacheOptions) =>
  {
      CosmosClientBuilder clientBuilder = new CosmosClientBuilder(
        "<nosql-account-endpoint>",
        tokenCredential
      )
        .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, özniteliğini kullanarak CreateIfNotExists yoksa bunları oluşturun.

Önemli

kullanmak CreateIfNotExistsyerine mevcut bir kapsayıcı sağlarsanız, etkin yaşam süresi olduğundan emin olun.

SDK istemci yapılandırmanızı CosmosClientBuilder özelleştirmek için veya uygulamanız Azure Cosmos DB ile diğer işlemler için zaten bir CosmosClient kullanıyorsa, bunu sağlayıcıya da 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ılarda olduğu gibi ASP.NET Core oturumlarını ve HttpContext.Session nesnesini kullanabilirsiniz. ASP.NET önerilerine göre oturum bilgilerinizi her zaman zaman uyumsuz olarak yüklemeyi denemeyi unutmayın.

Dağıtılmış önbellek senaryoları

Azure Cosmos DB sağlayıcısının IDistributedCache arabirimini dağıtılmış önbellek sağlayıcısı olarak hareket etmek üzere uyguladığı göz önünde bulundurulduğunda, yalnızca performanslı ve dağıtılmış oturum durumu sağlayıcısı gerektiren web uygulamaları için değil, dağıtılmış önbellek gerektiren tüm uygulamalar için de kullanılabilir.

Dağıtılmış önbellekler, önbelleğe alınan verileri paylaşabilmek için bağımsız örnekler sağlamak için veri tutarlılığı gerektirir. Azure Cosmos DB sağlayıcısını kullanırken şunları yapabilirsiniz:

  • Uygulama İsteği Yönlendirme'yi etkinleştirip istekleri belirli bir örneğe bağlı hale getirebiliyorsanız Oturum tutarlılığı bölümünde Azure Cosmos DB hesabınızı kullanın.
  • İstek sürekliliği gerektirmeden Azure Cosmos DB hesabınızı Sınırlanmış Eskime veya Güçlü tutarlılık bölümünde kullanın. Bu, örneklerinizde yük dağıtımı açısından en büyük ölçeği sağlar.

Azure Cosmos DB sağlayıcısını dağıtılmış önbellek olarak kullanmak için çağrıyla birlikte services.AddCosmosCache s'ye ConfiguredServicekaydedilmesi gerekir. Bu işlem tamamlandıktan sonra uygulamadaki herhangi bir oluşturucu başvurarak IDistributedCache önbelleği isteyebilir ve kullanılacak bağımlılık eklemesi tarafından eklenen örneği alı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

UYGULANANLAR: NoSQL

Azure Cosmos DB sağlayıcısı altında .NET SDK'sını kullandığından, olası sorunları anlamak için tüm mevcut performans yönergeleri ve sorun giderme kılavuzları geçerlidir. IDistributedCache API'leri aracılığıyla kullanıma sunulmadığından temel alınan Azure Cosmos DB işlemlerinden Tanılamaya erişmenin farklı bir yolu olduğunu unutmayın.

İsteğe bağlı tanılama temsilcisini kaydetmek, yüksek gecikme süresi gibi sorunları gidermek için tanılamaları yakalamanıza ve koşullu olarak günlüğe kaydetmenize olanak 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 oturumu ve önbellek sağlayıcısı hakkında daha fazla bilgi edinmek için GitHub'da kaynak koduna bakın.
  • ASP.NET Core web uygulamasını keşfetme örneğini inceleyerek Azure Cosmos DB oturumunu ve önbellek sağlayıcısını deneyin.
  • .NET'teki dağıtılmış önbellekler hakkında daha fazla bilgi edinin.