Armazenamento em cache em um aplicativo nativo da nuvem

Gorjeta

Este conteúdo é um excerto do eBook, Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

Os benefícios do cache são bem compreendidos. A técnica funciona copiando temporariamente dados acessados com frequência de um armazenamento de dados de back-end para um armazenamento rápido localizado mais próximo do aplicativo. O cache é frequentemente implementado onde...

  • Os dados permanecem relativamente estáticos.
  • O acesso aos dados é lento, especialmente em comparação com a velocidade do cache.
  • Os dados estão sujeitos a elevados níveis de discórdia.

Porquê?

Conforme discutido nas diretrizes de cache da Microsoft, o cache pode aumentar o desempenho, a escalabilidade e a disponibilidade para microsserviços individuais e o sistema como um todo. Ele reduz a latência e a contenção do tratamento de 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 se tornam os benefícios do cache.

O armazenamento em cache é mais eficaz quando um cliente lê repetidamente dados imutáveis ou que mudam com pouca frequência. Os exemplos incluem informações de referência, como informações sobre produtos e preços, ou recursos estáticos compartilhados que são caros de construir.

Embora os microsserviços devam ser sem monitoração de estado, um cache distribuído pode oferecer suporte ao acesso simultâneo a dados de estado da sessão quando absolutamente necessário.

Considere também o armazenamento em cache para evitar cálculos repetitivos. Se uma operação transformar dados ou executar um cálculo complicado, armazene em cache o resultado para solicitações subsequentes.

Arquitetura de colocação em cache

Os aplicativos nativos da nuvem normalmente implementam uma arquitetura de cache distribuído. O cache é hospedado como um serviço de suporte baseado em nuvem, separado dos microsserviços. A Figura 5-15 mostra a arquitetura.

Caching in a cloud native app

Figura 5-15: Armazenamento em cache em um aplicativo nativo da nuvem

Na figura anterior, observe como o cache é independente e compartilhado pelos microsserviços. Nesse cenário, o cache é invocado pelo API Gateway. Conforme discutido no capítulo 4, o gateway serve como um front-end para todas as solicitações recebidas. 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 aumente ou diminua de forma independente para atender às demandas de tráfego crescentes.

A figura anterior apresenta um padrão de cache comum conhecido como padrão cache-side. Para uma solicitação de entrada, você primeiro consulta o cache (etapa #1) para obter uma resposta. Se encontrados, os dados são devolvidos imediatamente. Se os dados não existirem no cache (conhecido como falha de cache), eles serão recuperados de um banco de dados local em um serviço downstream (etapa #2). Em seguida, ele é gravado no cache para solicitações futuras (etapa #3) e retornado ao chamador. Deve-se tomar cuidado para remover periodicamente os dados armazenados em cache para que o sistema permaneça oportuno e consistente.

À medida que um cache compartilhado cresce, pode ser benéfico particionar seus dados em vários nós. Isso pode ajudar a minimizar a contenção e melhorar a escalabilidade. Muitos serviços de cache suportam a capacidade de adicionar e remover nós dinamicamente e reequilibrar dados entre 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 são dispersos pelos nós seguindo uma estratégia de distribuição predefinida que equilibra a carga uniformemente.

Cache do Azure para Redis

O Cache Redis do Azure é um serviço seguro de cache de dados e agente de mensagens, totalmente gerenciado pela Microsoft. Consumido como uma oferta de plataforma como serviço (PaaS), ele fornece alta taxa de transferência e acesso de baixa latência aos dados. O serviço é acessível a 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 funciona como uma fachada que proporciona gestão, controlo de acessos e segurança. O serviço suporta nativamente um rico conjunto de estruturas de dados, incluindo strings, hashes, listas e conjuntos. Se seu aplicativo já usa Redis, ele funcionará como está com o Cache do Azure para Redis.

O Cache Redis do Azure é mais do que um simples servidor de cache. Ele pode suportar 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 mensagens
  • Um servidor de configuração ou descoberta

Para cenários avançados, uma cópia dos dados armazenados em cache pode ser mantida no disco. Se um evento catastrófico desativar os caches primário e de réplica, o cache será reconstruído a partir do instantâneo mais recente.

O Cache Redis do Azure está disponível em várias configurações predefinidas e níveis de preços. A camada Premium apresenta muitos recursos de nível empresarial, como clustering, persistência de dados, replicação geográfica e isolamento de rede virtual.