O ASP.NET tornou-se a principal escolha dos desenvolvedores no desenvolvimento de aplicativos Web de alto tráfego. Devido à sua natureza escalável, a camada de aplicativo ASP.NET pode lidar perfeitamente com milhares de usuários simultâneos com milhões de solicitações por dia. Esses aplicativos ASP.NET de alto tráfego são implantados em um web farm com balanceamento de carga com um balanceador de carga, roteando solicitações de usuários para vários servidores web.
Embora a camada de aplicativo ASP.NET tenha um desempenho excepcionalmente bom mesmo durante altas cargas transacionais, o aplicativo enfrenta alguns gargalos críticos de escalabilidade em outras áreas. Esses gargalos podem tornar seu aplicativo ASP.NET mais lento e até mesmo parar quando sua atividade comercial estiver no auge.
O problema: quatro gargalos de desempenho
Esses quatro gargalos de desempenho do ASP.NET são descritos abaixo:
Gargalo do banco de dados
Em um web farm com balanceamento de carga, quando a carga da transação aumenta, você pode adicionar facilmente mais servidores web para dimensionar linearmente. Mas você não pode adicionar mais servidores de banco de dados à camada de banco de dados (SQL Server, Oracle, outros) da mesma forma. Assim, o banco de dados começa a desacelerar e pode até travar em um ponto. Essa divisão é o gargalo de desempenho mais crítico que seu aplicativo enfrenta.
Gargalo de armazenamento de estado de sessão ASP.NET
O estado de sessão do ASP.NET precisa ser armazenado em algum lugar, e seu armazenamento se torna um gargalo como o banco de dados do aplicativo. Existem três opções de armazenamento fornecidas pela Microsoft, ou seja, InProc, State Server e SQL Server. Todos os três têm gargalos de desempenho.
O InProc força você a usar um único processo de trabalho por servidor web, que não funciona em um ambiente multiprocessador ou multicore, onde é preferível ter vários processos de trabalho.
E, em um web farm com balanceamento de carga, um bit de sessão fixo é necessário no balanceador de carga para sempre enviar solicitações de usuário para o servidor web, criando a sessão, mesmo se esse servidor web estiver sobrecarregado enquanto outros estiverem ociosos.
Além disso, o SQL Server não é um armazenamento ideal para o estado de sessão do ASP.NET porque os armazena como BLOBs e o SQL Server não funciona bem com ele.
NCache Adicionar ao carrinho Cache de sessão ASP.NET Documentos de cache de sessão ASP.NET
ASP.NET View State Gargalo
ASP.NET View State é um recurso de gerenciamento de estado do lado do cliente construído no servidor da Web para manter os dados de controles, como botões e menus suspensos. Esses dados são enviados ao navegador apenas para retornar quando ocorre um postback. E um ASP.NET View State string pode facilmente ter 100 KBs de tamanho, multiplicado por milhões de solicitações que você recebe todos os dias.
Isso não apenas diminui o tempo de resposta do seu aplicativo ASP.NET, mas também consome muita largura de banda extra que pode aumentar significativamente seu custo operacional.
Execução de página desnecessária
Muitas vezes, a saída da página ASP.NET não é alterada em várias solicitações porque os dados subjacentes não foram alterados. Mas a página ainda é executada para produzir a mesma saída da última vez. Essa execução de página extra consome muitos recursos do sistema, incluindo memória e CPU, e também faz chamadas de banco de dados.
A solução: cache distribuído na memória
A solução mais adequada para todos esses problemas é incorporar um Cache Distribuído In-Memory em seu ASP.NET e ASP.Net Core aplicação. NCache é um cache distribuído de código aberto popular para .NET. Vamos discutir rapidamente como corrigir nossos quatro gargalos de desempenho com NCache.
NCache Adicionar ao carrinho ASP.NET Core Estratégias de armazenamento de sessão ASP.NET View State Propriedades de cache e visão geral
Cache de dados do aplicativo
NCache permite que você armazene em cache os dados do aplicativo (tanto dados de referência somente leitura quanto dados transacionais alterados com frequência) para reduzir essas viagens caras ao banco de dados. Em vez de ir para o banco de dados, NCache roteia 85-90% de suas solicitações para o cache. Isso exclui as chances de qualquer contenção de banco de dados.
Ao contrário de um banco de dados, NCache nunca se torna um gargalo porque é um cache distribuído e escala linearmente. NCache cria um cluster de servidores de cache e permite adicionar mais servidores ao cluster à medida que a carga da transação aumenta. A seguir está um código de exemplo que busca os dados do banco de dados e os armazena no cluster de cache (se ainda não estiver presente no cache).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Customer Load(string customerId) { // Key format: Customer:PK:1000 string key = "Customers:CustomerID:" + customerId; Customer cust = (Customer) _cache[key]; if (cust == null) { // Item not in cache so load from db LoadCustomerFromDb(cust); // Add item to cache for future reference _cache.Insert(key, cust); } return cust; } |
Configuração de armazenamento do estado da sessão
NCache também permite armazenar suas sessões ASP.NET no cache. Este é um armazenamento na memória muito mais rápido do que suas outras opções de armazenamento. Para fornecer confiabilidade, NCache replica suas sessões em vários servidores. Portanto, se um servidor travar, não haverá perda de dados da sessão. O bom do armazenamento do estado da sessão ASP.NET em NCache é que não há nenhum esforço de programação, e você pode conectá-lo facilmente através de uma alteração no web.config. Abaixo está um exemplo.
1 2 3 4 5 6 7 8 9 |
<configuration> ... <sessionState cookieless="false" regenerateExpiredSessionId="true" mode="Custom" customProvider="NCacheSessionProvider" timeout="20"> <providers> <add name="NCacheSessionProvider" |
Visualizar configuração do estado
NCache permite armazenar em cache seus ASP.NET View State no servidor web final enviando apenas uma chave identificadora para o navegador. Ao retornar em um postback, NCache busca os resultados do View interceptando a chave do identificador por meio de seu HTTP Handler. Este estado de exibição é então enviado para sua página ASP.NET.
O resultado líquido é um aplicativo ASP.NET muito mais rápido com uma pegada de largura de banda muito menor. Abaixo está um exemplo de alteração de configuração de como usar NCache para cache ASP.NET View State:
Cache de Saída ASP.NET
Para evitar a execução desnecessária de páginas ASP.NET quando sua saída não muda, ASP.NET fornece um Cache de saída estrutura para configurações de servidor único e processo de trabalho único. NCache, por outro lado, o estende para configurações de processos de vários servidores e vários trabalhadores.
Através da NCache, você também pode esperar que suas páginas expirem quando seus dados relacionados forem modificados no banco de dados. Abaixo está um exemplo.
Conclusão
Em suma, NCache an cache distribuído na memória com escalabilidade linear, configuração de estado de visualização simples e configuração perfeita com seu aplicativo é a melhor solução para todos esses gargalos de desempenho. Esses recursos otimizam a atuação do seu aplicativo .Net e torná-lo mais rápido, confiável e altamente disponível.
NCache Adicionar ao carrinho Baixar NCache Comparação de edições