ASP.NET Core é uma estrutura de código aberto usada para criar aplicativos da Web escaláveis. Ele fornece recursos multiplataforma e é bastante popular entre os microsserviços arquitetura. E, com o advento do .REDE 6.0, está ficando cada vez melhor em termos de desempenho e experiência de desenvolvimento. No entanto, ainda existem alguns gargalos que impedem seu verdadeiro potencial.
Um desses gargalos são os tempos de leitura do banco de dados e esse gargalo é especialmente perceptível quando seu aplicativo precisa atender a centenas de milhares de usuários por vez. ASP.NET Core o armazenamento de sessão pode ajudar a mitigar esses problemas usando o armazenamento de dados na memória. No entanto, o provedor de armazenamento de sessão padrão tem algumas limitações. Estes são:
- Perda de sessão: As sessões são perdidas se o servidor de aplicativos ficar inativo.
- Limitações de memória: Uma vez que os dados são armazenados no espaço de memória do processo de aplicação.
- Sem replicação de sessão: Se o tráfego for redirecionado para outro servidor por qualquer motivo, as sessões não serão transferidas.
- Sessões Fixas: Em um ambiente de web farm, as sessões fixas precisam ser usadas, o que anula o objetivo do balanceamento de carga.
Felizmente para você, NCache está aqui para resolver todos esses problemas e muito mais. Entraremos em mais detalhes nas seções a seguir.
NCache Adicionar ao carrinho Baixar NCache ASP .NET Core Estratégias de armazenamento de sessão
Por que usar o armazenamento de sessão distribuído em primeiro lugar?
Por definição, o HTTP é um protocolo sem estado, o que significa que as informações não são retidas em várias solicitações. Um mecanismo de terceiros geralmente é usado para transportar informações. Um desses mecanismos é o armazenamento de sessão. ASP.NET Core oferece seu armazenamento de sessão, que faz backup de dados em um cache. Então, ao invés de apenas ir direto para o banco de dados, o aplicativo primeiro verificará se possui as informações armazenadas no cache, se sim, o aplicativo retornará essas informações e se não, somente então o aplicativo consultará o banco de dados.
No entanto, lembre-se de que os dados da sessão são considerados dados efêmeros. O aplicativo deve continuar funcionando independentemente de um cache de sessão vazio. Os dados da sessão devem ser usados apenas para necessidades de otimização de desempenho. ASP.NET Core oferece duas opções para cache de sessão:
Ambas as opções são bastante rápidas e, na maioria das vezes, farão o trabalho. No entanto, suas implementações padrão têm as mesmas desvantagens. Ambos oferecem caches autônomos com um único ponto de falha e sem opção de replicação de dados caso um servidor fique inativo. Para aplicativos de missão crítica, em que um grande número de usuários solicita recursos ao mesmo tempo e a perda de dados da sessão não é uma opção, um cache distribuído é o caminho a seguir.
Sua marca NCache?
NCache é um cache distribuído na memória de código aberto desenvolvido nativamente em .NET e .NET Core. Ele pode ser configurado para funcionar localmente, bem como em algumas plataformas de hospedagem de terceiros. Além disso, NCache pode ser configurado como um repositório de backup para armazenamento de sessão com poucas alterações de código e, devido à sua natureza distribuída inerente, os seguintes problemas serão resolvidos:
- Limitações de memória: O próprio cache agora estará em um processo separado do aplicativo da Web real, portanto, não haverá mais limitações de memória.
- Melhor confiabilidade: O cluster de cache pode até estar em um conjunto de máquinas completamente separado, para obter uma confiabilidade ainda melhor.
- Topologias de cache: NCache oferece 4 diferentes topologias de cache. Você pode escolher qualquer um deles com base em seus requisitos, seja priorizando escalabilidade, alta disponibilidade ou replicação de dados (ao custo do uso de memória).
- Replicação de dados: Mesmo que um servidor de aplicativos vá, os dados da sessão serão mantidos em segurança.
- Multi-Armazenamento da Sessão da Região: NCache ofertas Compartilhamento de sessão multirregional também. As sessões são replicadas perfeitamente na WAN. Portanto, se os usuários precisarem ser redirecionados para um local diferente, suas sessões serão mantidas intactas.
NCache oferece duas estratégias para armazenamento de sessão, uma é com o Provedor de armazenamento de sessão e o outro é NCacheimplementação de IDistributedCache. Nas seções a seguir, entraremos nos detalhes técnicos de como NCache pode ajudar no armazenamento de sessão do ASP.NET Core.
NCache Adicionar ao carrinho ASP .NET Core Estratégias de armazenamento de sessão ASP.NET Core Cache
Armazenamento de sessão usando NCache
Configurando NCache como um armazenamento de apoio para armazenamento de sessão é muito simples. Veremos duas abordagens oferecidas por NCache:
Método 1: provedor de armazenamento de sessão
Para esta abordagem, você precisa instalar o AspNetCore.Session.NCache pacote NuGet. Após a instalação deste pacote, certifique-se de incluir o Alachisoft.NCache.Web.SessionState
namespace no Inicialização.cs arquivo do seu aplicativo e adicione NCache como um serviço em sua coleção de serviços:
1 2 3 4 5 6 7 8 9 10 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; }); } |
E pronto, você configurou com sucesso NCache como um provedor de armazenamento de sessão. Para mais detalhes sobre NCache, você pode dar uma olhada NCache guia do programador.
Método 2: Implementação de IDistributedCache
Caso você já esteja usando uma implementação de IDistributedCache
, você pode seguir com essa abordagem. Basta instalar o NCache.Microsoft.Extensões.Cache pacote NuGet. E ao configurar serviços para seu ASP.NET Core aplicação basta adicionar o seguinte código:
1 2 3 4 5 6 7 8 9 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheDistributedCache(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.ExceptionsEnabled = true; }); } |
E pronto, agora você pode usar NCacheimplementação de IDistributedCache
.
Armazenamento de sessão multirregional usando NCache
Além dos recursos de replicação de dados fornecidos pelas várias topologias de cache, NCache também oferece compartilhamento completo de sessão entre clusters de cache separados. Isso pode ser muito útil em situações em que você tem data centers diferentes para regiões diferentes e, talvez, devido a algumas circunstâncias inevitáveis, você precise redirecionar seu tráfego de uma região para outra.
Você pode configurar facilmente o compartilhamento de sessão entre suas diferentes regiões. As sessões de uma região serão replicadas perfeitamente pela WAN para as outras regiões. Os dados da sessão são replicados do cache primário para um ou mais caches secundários. Para usar o compartilhamento de sessão multirregional, você precisa usar o NCache provedor de armazenamento de sessão e apenas as seguintes alterações serão necessárias em seu Inicialização.cs arquivo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "LondonCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; configuration.EnableLocationAffinity = true; configuration.AffinityMapping = new CacheAffinity[] { new CacheAffinity { CacheName = "LondonCache", CachePrefix = "LDNC" }, new CacheAffinity { CacheName = "NewYorkCache", CachePrefix = "NYKC" }, new CacheAffinity { CacheName = "TokyoCache", CachePrefix = "TKYC" } }; }); } |
Observação: uma coisa a ter em mente é que a afinidade de local deve ser habilitada para usar o compartilhamento de sessão multirregional.
O nome do cache é especificado no configuration.CacheName
campo será seu cache primário, enquanto todos os caches restantes especificados no configuration.AffinityMapping
serão seus caches secundários. o CachePrefix
é importante, pois esse prefixo é anexado ao ID da sessão. Esse prefixo identifica onde os dados da sessão são armazenados. Portanto, se uma solicitação chegar a um cache e o prefixo do cache for diferente do prefixo do cache atual, o cache real será contatado para os dados da sessão (se os dados ainda não estiverem presentes). Agora que o cache atual possui os dados da sessão, todas as solicitações subsequentes serão atendidas localmente a partir desse cache.
NCache Adicionar ao carrinho ASP .NET Core Estratégias de armazenamento de sessão Compartilhamento de sessão multirregional
Conclusão
Neste blog, vimos por que o armazenamento de sessão é um recurso poderoso do ASP.NET Core e como ele pode melhorar drasticamente o desempenho de seu aplicativo. Também analisamos como NCache pode melhorar muito o armazenamento de sessão com a ajuda do cache distribuído e, se você precisar de confiabilidade ainda melhor, sempre poderá optar por NCacherecurso de compartilhamento de sessão multirregional para uma experiência de usuário de alto nível.
NCache Adicionar ao carrinho Baixar NCache Comparação de edições