Antes de pularmos no Cache do cliente, vamos diminuir um pouco o zoom e entender o básico do cache. Na computação, um cache é uma memória de alta velocidade usada como armazenamento auxiliar para evitar viagens de dados caras e otimizar o desempenho de aplicativos mais simples executados em um único nó de servidor. Mas em um sistema distribuído com balanceamento de carga, uma única solicitação é tratada por vários nós de aplicativos. É aqui que o cache causa uma queda de desempenho.
Para atender a essa exigência, um cache distribuído na memória é introduzido para aplicativos que atendem a cargas de transação extremas por segundo e exigem alta disponibilidade e escalabilidade linear.
Os desenvolvedores podem escolher entre muitas opções populares de cache distribuído disponíveis no mercado, como NCache. NCache é um cache distribuído na memória extremamente rápido e linearmente escalável que armazena em cache os dados do aplicativo para reduzir viagens caras ao banco de dados e melhorar o tempo de resposta. Mas, apesar de tudo isso, ainda há espaço para um aumento de desempenho que pode ser possível adicionando um cache em cima de um cache –um Cache de Cliente.
NCache Adicionar ao carrinho Cache distribuído em .NET Altamente Disponível NCache
Como o Cache de Cliente funciona em NCache?
Na maioria dos casos, um cache distribuído é hospedado em um conjunto de servidores de cache dedicados na rede, portanto, seu aplicativo precisa fazer viagens de rede para buscar dados. E isso não é tão rápido quanto acessar dados localmente e de dentro do processo de inscrição.
Para lidar com este problema, NCache fornece o Cache de cliente. O Client Cache funciona como um armazenamento temporário que fica próximo ao processo do aplicativo para que a busca de dados seja mais fácil e rápida. O Client Cache leva o desempenho de seu aplicativo a um nível superior, pois vários aplicativos executados na mesma máquina cliente podem se comunicar e compartilhar dados usando Modo OutProc. O Client Cache aproxima o hot data set do seu aplicativo, mesmo dentro do processo do aplicativo com o Modo InProc o que dá um enorme aumento de desempenho.
In NCache, usar o Client Cache é bastante simples. Nenhuma alteração de código é necessária no final do aplicativo. É uma opção de configuração simples. Você pode criar um Client Cache através do NCache Web Manager ou de NCachecmdlets do PowerShell suportados. Depois que o cliente for configurado, os aplicativos cliente começarão a usá-lo automaticamente.
Vamos entender o funcionamento do Client Cache (também chamado de first-level ou L1 Cache) com um exemplo de aplicação de E-Commerce. O aplicativo acessa com frequência o catálogo de produtos e os dados dos usuários ativos no momento. Tais dados podem ser mantidos no Client Cache, rodando na caixa do cliente (onde reside a aplicação). Assim, uma viagem de rede pelo cache clusterizado (também chamado de cache L2 ou de segundo nível) pode ser evitada e os dados são fornecidos do cache L1 muito mais rapidamente.
Agora você deve estar pensando em como os dados são sincronizados entre dois caches para que a aplicação seja sempre atendida com dados atualizados do Cache L1.
Sincronização de dados entre o cache L1 e L2
Para garantir que o aplicativo sempre obtenha dados atualizados, dois threads em segundo plano operam no Client Cache. Esses dois poderosos mecanismos de sincronização executados no Client Cache garantem que o aplicativo sempre obtenha os dados mais recentes com desempenho e escalabilidade adicionais. Os dois segmentos de fundo são:
Tópico baseado em notificação
Quando os dados são adicionados ao Cache L1, ele registra uma notificação de alteração de dados instantaneamente e o Cache L2 acompanha os itens de cache que o Cache L1 mantém e monitora as alterações quando ocorre uma alteração de atualização/remoção nos dados. Após a modificação dos dados no cache L2, o cache L1 recebe uma notificação de alteração e, em resposta, o cache L1 se sincroniza com o L2.
Tópico baseado em sondagem
Este é um mecanismo de fallback que é acionado apenas quando a comunicação entre o cache L1 e L2 é interrompida devido a uma falha de rede ou perda de conexão. Nesse caso, o Cache L1 aguarda 10 segundos e, em seguida, faz o polling e solicita as alterações de dados no Cache L2. Ao receber as notificações de alteração, ele se sincroniza com o cache L2.
Para aproveitar totalmente os benefícios do Client Cache, você pode usá-lo em qualquer um dos dois modos de isolamento em nível de processo disponíveis.
Modos de isolamento no cache do cliente
Cache de cliente é executado no nó cliente em que seus aplicativos estão sendo executados. Dependendo de suas necessidades de desempenho e da arquitetura do aplicativo, você pode escolher um dos seguintes modos de isolamento em nível de processo suportados pelo Client Cache. NCache O Client Cache existe em dois modos: InProc e OutProc.
Modo InProc:
In Modo InProc, o Client Cache é executado dentro do processo do aplicativo, eliminando a comunicação entre processos. O modo InProc fornece o máximo desempenho ao aplicativo, pois os dados permanecem na forma de objeto, reduzindo o custo de serialização e desserialização.
No modo InProc, os dados entre outras instâncias do aplicativo não são compartilhados, portanto, cada instância do aplicativo hospeda uma instância dedicada do Client Cache que aumenta o desempenho.
Modo OutProc:
In Modo OutProc, o Client Cache é executado em seu processo dedicado no nó cliente. A comunicação entre os aplicativos e o Client Cache ocorre por meio de soquetes TCP. O modo OutProc oferece suporte ao compartilhamento de dados para que várias instâncias de aplicativos possam se comunicar com o mesmo Cache de Cliente. Ele tem uma grande vantagem, pois os dados são compartilhados entre vários aplicativos, de modo que os dados carregados ou atualizados por um aplicativo ficam disponíveis para outros.
Comparação em termos de desempenho do modo InProc e OutProc:
Existem vários fatores sobre os quais o desempenho do modo InProc e OutProc é medido, ou seja, disponibilidade de dados, consumo de recursos e velocidade.
Disponibilidade de dados: No modo OutProc, a reinicialização do cache não resulta em perda de dados, o que proporciona estabilidade de dados. Considerando que, no modo InProc, a reinicialização do cache resulta em perda de dados.
Consumo de recursos: O modo InProc oferece desempenho máximo quando recursos como memória não são limitados, pois cada instância do Client Cache mantém sua cópia de dados. O modo OutProc requer menos recursos físicos em comparação com o modo InProc.
Velocidade: O modo Client Cache InProc é super rápido porque é como um objeto em seu heap e mantém as coisas de maneira desserializada, economizando o custo de serialização/desserialização que você tem que fazer para qualquer OutProc ou qualquer acesso remoto ao cache.
NCache Adicionar ao carrinho Cache de cliente Notificações de eventos no cache
O fluxo operacional do Client Cache
O Client Cache está mais próximo da camada de aplicativo e o Client Cache é o subconjunto do cache clusterizado. Assim, todas as operações ocorrem de forma distribuída.
Todas as operações de leitura baseadas em chave são executadas diretamente no Cache L1, as operações de gravação baseadas em chave, como Adicionar, Inserir e Remover, são executadas primeiro no Cache L2 e, em seguida, adicionadas ao Cache L1 antes de retornar ao aplicativo.
Os dados são retornados ao Cache L1 antes de retornar ao aplicativo para que, na próxima vez que os mesmos dados forem solicitados, sejam fornecidos diretamente do Cache L1.
As operações de leitura e gravação não baseadas em chave são executadas apenas no Cache L2 porque o Cache L1 contém o subconjunto do Cache L2.
Outras instâncias do Client Cache são atualizadas por meio de dados em segundo plano mecanismo de sincronização.
Modos de sincronização no cache do cliente:
Embora seja local para seu aplicativo, um Cache de Cliente não é autônomo. Em vez disso, ele é sempre sincronizado com o cache clusterizado. Isso garante que os dados no Cache do Cliente nunca fiquem obsoletos.
NCache O Client Cache fornece dois modos para sincronização de dados entre o Cache do Cliente e o cache clusterizado. O Cache do Cliente contém uma cópia dos dados do cache clusterizado. Qualquer alteração que ocorra no cache clusterizado deve ser sincronizada no Cache do Cliente, pois a camada de aplicação se comunica diretamente com o Cache do Cliente. Dois modos de sincronização de dados são otimistas e pessimistas.
Modo otimista é o modo padrão para sincronização de dados em NCache. A sincronização ocorre em segundo plano e quando um aplicativo solicita os dados, eles são retornados ao aplicativo a partir do Cache do Cliente.
Aplicativos que são mais sensíveis e exigem novos usos de dados modo pessimista para sincronização de dados. quando um aplicativo solicita os dados, o L1 Cache verifica a versão com o L2 Cache e fornece os dados atualizados.
Conclusão
NCache permite que você aproveite o Client Cache com um cache distribuído. A melhor parte de usar o Client Cache é que não há programação feita pelo usuário final. É uma configuração simples, e o Cache do Cliente é conectado automaticamente. O Cache do Cliente aumenta o desempenho em muitas dobras para aplicativos que executam mais leituras do que gravações. Então, baixe um teste de 60 dias totalmente funcional do NCache Enterprise e experimente você mesmo.
NCache Adicionar ao carrinho Baixar NCache Comparação de edições