Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
DOTYCZY: NoSQL
Dostawca sesji i pamięci podręcznej Azure Cosmos DB umożliwia korzystanie z tej usługi oraz wykorzystanie jej niskich opóźnień i globalnych możliwości skalowania do przechowywania danych stanu sesji oraz jako rozproszoną pamięć podręczną w aplikacji.
Co to jest stan sesji?
Stan sesji to dane użytkownika, które śledzą użytkownika przeglądającego aplikację internetową w danym okresie w tej samej przeglądarce. Stan sesji wygasa i jest ograniczony do interakcji określonej przeglądarki, który nie jest rozciągany na inne przeglądarki. Jest to uznawane za dane efemeryczne, jeśli nie są obecne, nie spowoduje przerwania aplikacji. Kiedy jednak istnieje, doświadczenie użytkownika jest szybsze, ponieważ aplikacja internetowa nie musi go pobierać przy każdym żądaniu przeglądarki dla tego samego użytkownika.
Często jest wspierany przez jakiś mechanizm magazynowania, który w niektórych przypadkach może działać poza bieżącym serwerem WWW i umożliwia równoważenie obciążenia żądań z tej samej przeglądarki na wielu serwerach WWW, aby osiągnąć wyższą skalowalność.
Najprostszym dostawcą stanu sesji jest dostawca w pamięci, który przechowuje tylko dane w pamięci lokalnego serwera internetowego i wymaga, aby aplikacja korzystała z routingu żądań aplikacji. Dzięki temu sesja przeglądarki jest przypisana do określonego serwera (wszystkie żądania tej przeglądarki muszą zawsze trafiać do tego samego serwera). Dostawca dobrze sprawdza się w prostych scenariuszach, ale wymaganie dotyczące gotowości może powodować problemy z równoważeniem obciążenia podczas skalowania aplikacji internetowych.
Istnieje wiele dostawców zewnętrznej pamięci, którzy mogą przechowywać dane sesji w sposób, który można odczytywać i uzyskiwać do nich dostęp przez wiele serwerów internetowych bez konieczności przypisania sesji do konkretnych serwerów i umożliwić większą skalowalność.
Scenariusze stanu sesji
Usługa Azure Cosmos DB może być używana jako dostawca stanu sesji za pośrednictwem pakietu rozszerzenia Microsoft.Extensions.Caching.Cosmos, który korzysta z zestawu SDK platformy .NET dla Azure Cosmos DB. Wykorzystuje kontener jako skuteczny magazyn sesji w oparciu o podejście klucz/wartość, w którym klucz jest identyfikatorem sesji.
Po dodaniu pakietu możesz użyć AddCosmosCache
jako część procesu uruchamiania (services.AddSession i app.UseSession to typowe kroki inicjalizacji, które są wymagane dla dowolnego dostawcy stanu sesji):
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 */
}
Gdzie określasz bazę danych i kontener, w którym ma być przechowywany stan sesji, i opcjonalnie tworzysz je, jeśli nie istnieją, przy użyciu atrybutu CreateIfNotExists
.
Ważne
Jeśli podasz istniejący kontener zamiast używać polecenia CreateIfNotExists
, upewnij się, że ma włączony czas wygaśnięcia.
Konfigurację klienta zestawu SDK można dostosować przy użyciu CosmosClientBuilder
lub, jeśli aplikacja już używa CosmosClient
dla innych operacji z Azure Cosmos DB, możesz również wstrzyknąć go do dostawcy:
services.AddCosmosCache((CosmosCacheOptions cacheOptions) =>
{
cacheOptions.ContainerName = "myContainer";
cacheOptions.DatabaseName = "myDatabase";
cacheOptions.CosmosClient = preExistingClient;
/* Creates the container if it does not exist */
cacheOptions.CreateIfNotExists = true;
});
Następnie możesz użyć sesji ASP.NET Core, takich jak w przypadku dowolnego innego dostawcy, i użyć obiektu HttpContext.Session. Pamiętaj, aby zawsze próbować ładować informacje o sesji asynchronicznie zgodnie z zaleceniami ASP.NET.
Scenariusze rozproszonej pamięci podręcznej
Biorąc pod uwagę, że dostawca usługi Azure Cosmos DB implementuje interfejs IDistributedCache do działania jako dostawca rozproszonej pamięci podręcznej, może być również używany dla każdej aplikacji wymagającej rozproszonej pamięci podręcznej, a nie tylko dla aplikacji internetowych, które wymagają wydajnego i rozproszonego dostawcy stanu sesji.
Rozproszone pamięci podręczne wymagają spójności danych, aby niezależne instancje mogły wspólnie korzystać z przechowywanych danych. W przypadku korzystania z dostawcy usługi Azure Cosmos DB można wykonywać następujące czynności:
- Użyj konta usługi Azure Cosmos DB w obszarze Spójność sesji, jeśli możesz włączyć routing żądań aplikacji i wysyłać żądania lepkie do określonego wystąpienia.
- Użyj konta usługi Azure Cosmos DB w trybie Ograniczona nieaktualność lub Silna spójność bez konieczności stosowania przylepności żądań. Zapewnia to największą skalę pod względem rozkładu obciążenia w Twoich wystąpieniach.
Aby użyć dostawcy usługi Azure Cosmos DB jako rozproszonej pamięci podręcznej, należy zarejestrować go w ConfiguredService
za pomocą wywołania services.AddCosmosCache
. Po wykonaniu tej czynności każdy konstruktor w aplikacji może poprosić o pamięć podręczną, odwołując IDistributedCache
się do niej i otrzyma wystąpienie wstrzyknięte przez iniekcję zależności do użycia:
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 */
}
}
Rozwiązywanie problemów i diagnozowanie
DOTYCZY: NoSQL
Ponieważ dostawca usługi Azure Cosmos DB korzysta z zestawu .NET SDK poniżej, wszystkie istniejące wytyczne dotyczące wydajności i przewodniki rozwiązywania problemów mają zastosowanie do zrozumienia dowolnego potencjalnego problemu. Należy pamiętać, że istnieje odrębny sposób uzyskiwania dostępu do diagnostyki z podstawowych operacji usługi Azure Cosmos DB, ponieważ nie można ich uwidocznić za pośrednictwem interfejsów API IDistributedCache.
Zarejestrowanie opcjonalnego delegata diagnostyki umożliwi przechwytywanie i warunkowe zapisywanie dowolnej diagnostyki w celu rozwiązywania problemów w przypadkach, np. dużego opóźnienia.
void captureDiagnostics(CosmosDiagnostics diagnostics)
{
if (diagnostics.GetClientElapsedTime() > SomePredefinedThresholdTime)
{
Console.WriteLine(diagnostics.ToString());
}
}
services.AddCosmosCache((CosmosCacheOptions cacheOptions) =>
{
cacheOptions.DiagnosticsHandler = captureDiagnostics;
/* other options */
});
Następne kroki
- Aby uzyskać więcej informacji na temat sesji i dostawcy pamięci podręcznej usługi Azure Cosmos DB, zobacz kod źródłowy w witrynie GitHub.
- Wypróbuj dostawcę sesji i pamięci podręcznej Azure Cosmos DB, eksplorując przykładową aplikację internetową ASP.NET Core.
- Przeczytaj więcej na temat rozproszonych pamięci podręcznych na platformie .NET.