Megosztás a következőn keresztül:


Az Azure Cosmos DB használata ASP.NET munkamenet-állapot és gyorsítótárazási szolgáltatóként

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Az Azure Cosmos DB-munkamenet- és gyorsítótár-szolgáltató lehetővé teszi az Azure Cosmos DB használatát, és kihasználhatja alacsony késési és globális skálázási képességeit a munkamenetállapot-adatok tárolásához, valamint elosztott gyorsítótárként az alkalmazáson belül.

Mi a munkamenet állapota?

A munkamenet-állapot olyan felhasználói adatok, amelyek nyomon követik, hogy egy felhasználó egy adott időszakban, ugyanazon a böngészőn belül böngész-e egy webalkalmazásban. A munkamenet állapota lejár, és csak azokra az interakciókra korlátozódik, amelyek egy adott böngészőben nem terjednek ki a böngészőkre. Rövid élettartamú adatnak minősül, ha nem jelenik meg, az nem fogja megszakítani az alkalmazást. Ha azonban létezik, akkor a felhasználói élmény gyorsabb lesz, mert a webalkalmazásnak nem kell lekérnie az adott felhasználó minden böngészőkérelmében.

Ezt gyakran valamilyen tárolási mechanizmus is alátámasztja, amely bizonyos esetekben külső lehet az aktuális webkiszolgálón, és lehetővé teszi ugyanazon böngésző terheléselosztási kéréseit több webkiszolgálón a nagyobb méretezhetőség érdekében.

A legegyszerűbb munkamenet-állapotszolgáltató az a memóriabeli szolgáltató, amely csak a helyi webkiszolgáló memóriájában tárolja az adatokat, és megköveteli, hogy az alkalmazás az Alkalmazáskérés-útválasztást használja. Így a böngésző munkamenete ragadós egy adott webkiszolgálóhoz (a böngésző minden kérésének mindig ugyanarra a webkiszolgálóra kell érkeznie). A szolgáltató jól működik az egyszerű forgatókönyvekben, de a ragadóssági követelmény terheléselosztási problémákat okozhat a webalkalmazások méretezése során.

Számos külső tárolószolgáltató érhető el, amelyek úgy tárolják a munkamenet-adatokat, hogy több webkiszolgáló is elolvashassa és elérhesse anélkül, hogy a munkamenetek ragadósak, és nagyobb skálázást tennének lehetővé.

Munkamenetállapot-forgatókönyvek

Az Azure Cosmos DB a Microsoft.Extensions.Caching.Cosmos bővítménycsomagon keresztül használható munkamenet-állapotszolgáltatóként az Azure Cosmos DB .NET SDK-t használja, amely egy tárolót használ hatékony munkamenet-tárolóként egy kulcs/érték megközelítés alapján, ahol a kulcs a munkamenet-azonosító.

A csomag hozzáadása AddCosmosCache után használhatja az indítási folyamat (szolgáltatások) részeként. AddSession és alkalmazás. A UseSession gyakori inicializálási lépések bármelyik munkamenet-állapotszolgáltatóhoz:

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 */
}

Ha megadja azt az adatbázist és tárolót, amelyet a munkamenet állapotának tárolására és opcionálisan szeretne tárolni, hozza létre őket, ha nem léteznek az CreateIfNotExists attribútum használatával.

Fontos

Ha a használat CreateIfNotExistshelyett egy meglévő tárolót ad meg, győződjön meg arról, hogy az élettartam engedélyezve van.

Az SDK-ügyfélkonfigurációt testre szabhatja az CosmosClientBuilder Azure Cosmos DB-vel végzett egyéb műveletekhez, vagy ha az alkalmazás már használ egy CosmosClient másikat, a szolgáltatóba is beszúrhatja:

services.AddCosmosCache((CosmosCacheOptions cacheOptions) =>
{
    cacheOptions.ContainerName = "myContainer";
    cacheOptions.DatabaseName = "myDatabase";
    cacheOptions.CosmosClient = preExistingClient;
    /* Creates the container if it does not exist */
    cacheOptions.CreateIfNotExists = true; 
});

Ezt követően használhatja ASP.NET Core-munkameneteket, mint bármely más szolgáltatónál, és használhatja a HttpContext.Session objektumot. Ne feledje, hogy mindig aszinkron módon próbálja meg betölteni a munkamenet adatait a ASP.NET javaslatoknak megfelelően.

Elosztott gyorsítótár-forgatókönyvek

Tekintettel arra, hogy az Azure Cosmos DB-szolgáltató az IDistributedCache felületet úgy implementálja, hogy elosztott gyorsítótár-szolgáltatóként működjön, bármely olyan alkalmazáshoz is használható, amely elosztott gyorsítótárat igényel, nem csak olyan webalkalmazásokhoz, amelyek teljesítmény- és elosztott munkamenet-állapotszolgáltatót igényelnek.

Az elosztott gyorsítótárak adatkonzisztenciát igényelnek ahhoz, hogy a független példányok meg tudják osztani a gyorsítótárazott adatokat. Az Azure Cosmos DB-szolgáltató használatakor a következőt teheti:

  • Használja az Azure Cosmos DB-fiókját a munkamenet konzisztenciájában, ha engedélyezheti az alkalmazáskérések útválasztását, és a kéréseket egy adott példányhoz ragaszthatja.
  • Az Azure Cosmos DB-fiókját korlátozott elavultságban vagy erős konzisztenciában használhatja anélkül, hogy a kérések ragadósságot igényelnek. Ez biztosítja a legnagyobb skálát a példányok közötti terheléselosztás szempontjából.

Ahhoz, hogy az Azure Cosmos DB-szolgáltató elosztott gyorsítótárként legyen használva, regisztrálni ConfiguredServicekell a services.AddCosmosCache hívásban. Ha ez megtörtént, az alkalmazás bármely konstruktora hivatkozva IDistributedCache kérheti a gyorsítótárat, és megkapja a használni kívánt függőséginjektálással injektált példányt:

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 */
    }
}

Hibaelhárítás és diagnosztizálás

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Mivel az Azure Cosmos DB-szolgáltató az alatta lévő .NET SDK-t használja, az összes meglévő teljesítményre vonatkozó irányelv és hibaelhárítási útmutató az esetleges problémák megértésére vonatkozik. Vegye figyelembe, hogy a diagnosztika különböző módon érhető el az alapul szolgáló Azure Cosmos DB-műveletekből, mivel ezek nem tehetők közzé az IDistributedCache API-kkal.

Az opcionális diagnosztikai delegált regisztrálásával rögzíthet és feltételesen naplózhat minden diagnosztikát, hogy elhárítsa az olyan eseteket, mint a nagy késés:

void captureDiagnostics(CosmosDiagnostics diagnostics)
{
    if (diagnostics.GetClientElapsedTime() > SomePredefinedThresholdTime)
    {
        Console.WriteLine(diagnostics.ToString());
    }
}

services.AddCosmosCache((CosmosCacheOptions cacheOptions) =>
{
    cacheOptions.DiagnosticsHandler = captureDiagnostics;
    /* other options */
});

Következő lépések

  • Az Azure Cosmos DB-munkamenetről és a gyorsítótár-szolgáltatóról további információt a GitHub forráskódja tartalmaz.
  • Próbálja ki az Azure Cosmos DB-munkamenetet és a gyorsítótár-szolgáltatót egy minta felfedezésével, amely egy ASP.NET Core-webalkalmazást ismer meg.
  • További információ az elosztott gyorsítótárakról a .NET-ben.