Cache em um aplicativo nativo de nuvem
Dica
Esse conteúdo é um trecho do livro eletrônico, para Projetar os Aplicativos .NET nativos de nuvem para o Azure, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.
Os benefícios do cache são bem compreendidos. A técnica funciona copiando temporariamente dados acessados com frequência de um repositório de dados de back-end para um armazenamento rápido localizado mais perto do aplicativo. O cache geralmente é implementado onde...
- Os dados se mantêm relativamente estáticos.
- O acesso a dados é lento, especialmente em comparação com a velocidade do cache.
- Os dados estão sujeitos a altos níveis de contenção.
Por quê?
Conforme discutido nas Diretrizes de cache da Microsoft, o cache pode aumentar o desempenho, a escalabilidade e a disponibilidade de microsserviços individuais e do sistema como um todo. Ele reduz a latência e a contenção de lidar com grandes volumes de solicitações simultâneas para um armazenamento de dados. À medida que o volume de dados e o número de usuários aumentam, maiores são os benefícios do cache.
O cache é mais eficaz quando um cliente lê repetidamente dados que são imutáveis ou que são alterados com pouca frequência. Os exemplos incluem informações de referência, como informações sobre preço e produto, ou recursos compartilhados estáticos cuja construção é cara.
Embora os microsserviços devam estar sem estado, um cache distribuído pode dar suporte ao acesso simultâneo aos dados de estado da sessão quando absolutamente necessário.
Considere também o cache para evitar computações repetitivas. Se uma operação transformar dados ou executar um cálculo complicado, armazene o resultado em cache para as solicitações seguintes.
Arquitetura de cache
Normalmente, os aplicativos nativos de nuvem implementam uma arquitetura de cache distribuído. O cache é hospedado como um serviço de backup baseado em nuvem, separado dos microsserviços. A Figura 5-15 mostra a arquitetura.
Figura 5-15: cache em um aplicativo nativo de nuvem
Na figura anterior, observe como o cache é independente dos microsserviços e compartilhado por eles. Nesse cenário, o cache é invocado pelo Gateway da API. Conforme discutido no capítulo 4, o gateway serve de front-end para todas as solicitações de entrada. O cache distribuído aumenta a capacidade de resposta do sistema, retornando dados armazenados em cache sempre que possível. Além disso, separar o cache dos serviços permite que o cache seja dimensionado horizontal ou verticalmente, de forma independente, para atender ao aumento das demandas de tráfego.
A figura anterior apresenta um padrão de cache comum conhecido como padrão cache-aside. Para uma solicitação de entrada, primeiro você consulta o cache (etapa 1) para obter uma resposta. Se encontrada, os dados serão retornados imediatamente. Se os dados não existirem no cache (conhecido como perda no cache), eles serão recuperados de um banco de dados local em um serviço downstream (etapa 2). Em seguida, serão gravados no cache para solicitações futuras (etapa 3) e retornado ao chamador. É necessário ter cuidado ao remover periodicamente os dados armazenados em cache para que o sistema continue rápido e consistente.
À medida que um cache compartilhado cresce, talvez seja conveniente particionar seus dados em vários nós. Isso pode ajudar a minimizar a contenção e melhorar a escalabilidade. Em vários serviços de caches, há suporte para a capacidade de adicionar dinamicamente (e remover) nós e rebalancear os dados em partições. Essa abordagem normalmente envolve clustering. O clustering expõe uma coleção de nós federados como um cache único e contínuo. Internamente, no entanto, os dados ficam dispersos entre os nós após uma estratégia de distribuição predefinida que equilibra a carga de maneira uniforme.
Cache Redis do Azure
O Cache do Azure para Redis é um serviço seguro de cache de dados e agente de mensagens, totalmente gerenciado pela Microsoft. Consumido como uma oferta de PaaS (Plataforma como Serviço), ele fornece alta taxa de transferência e acesso de baixa latência aos dados. O serviço pode ser acessado por qualquer aplicativo, dentro ou fora do Azure.
O serviço Cache do Azure para Redis gerencia o acesso a servidores Redis de código aberto hospedados em data centers do Azure. O serviço atua como uma fachada que fornece gerenciamento, controle de acesso e segurança. O serviço dá suporte nativo a um conjunto avançado de estruturas de dados, incluindo cadeias de caracteres, hashes, listas e conjuntos. Se o seu aplicativo já usa o Redis, ele funcionará como está com o Cache do Azure para Redis.
Cache do Azure para Redis é mais do que um servidor de cache simples. Ele pode dar suporte a vários cenários para aprimorar uma arquitetura de microsserviços:
- Um armazenamento de dados na memória
- Um banco de dados não relacional distribuído
- Um agente de mensagem
- Um servidor de configuração ou descoberta
Em cenários avançados, uma cópia dos dados armazenados em cache pode ser mantida no disco. Se um desastre desabilitar os caches primário e de réplica, o cache será reconstruído com o instantâneo mais recente.
O Cache do Azure para Redis está disponível em vários tipos predefinidos de preços e configurações. O tipo Premium tem vários recursos de nível empresarial, como clustering, persistência de dados, replicação geográfica e isolamento de rede virtual.