Significado de cache
O caching mantém cópias reutilizáveis de dados acessados com frequência na memória, para que os aplicativos evitem chamadas repetidas ao banco de dados e retornem resultados mais rapidamente.
O caching mantém cópias reutilizáveis de dados acessados com frequência na memória, para que os aplicativos evitem chamadas repetidas ao banco de dados e retornem resultados mais rapidamente.
O cache é a prática de armazenar dados chave-valor na memória temporária (como um banco de dados noSQL [linguagem de consulta estruturada não relacional]) para que os aplicativos possam recuperá-los mais rapidamente do que poderiam do armazenamento convencional. Em arquiteturas de armazenamento em nuvem, em que as solicitações geralmente cruzam redes e serviços compartilhados por toque, o cache pode ajudar a manter os tempos de resposta baixos e reduzir o trabalho repetido.
A maioria dos sistemas mantém uma "fonte de verdade" durável (um banco de dados) para conjuntos de dados completos e, em seguida, mantém um cache para subconjuntos transitórios que são lidos com frequência. Quando uma solicitação chega, o app verifica primeiro o cache; se os dados estiverem lá, ele retorna rápido sem consultar o back-end de novo. Os desenvolvedores também armazenam em cache os dados processados e os reutilizam para atender a solicitações mais rapidamente do que as consultas padrão para bancos de dados relacionais, bancos de dados SQL ou bancos de dados PostgreSQL de código aberto.
Boas opções incluem dados lidos repetidamente e dados que mudam com pouca frequência (por exemplo, informações de produto e preço ou recursos estáticos compartilhados que são caros para criar).
Se uma operação transforma dados ou faz um cálculo complexo, armazenar o resultado em cache pode evitar recalculá-lo para as próximas solicitações.
Os desenvolvedores usam caches de vários níveis ("camadas de cache") para armazenar diferentes tipos de dados em caches separados com base na demanda. Adicionar uma ou mais camadas de cache pode melhorar a taxa de transferência e a latência em uma camada de dados.
Armazenamentos em memória são usados com frequência para guardar grandes volumes de dados de sessão, como entrada do usuário, itens do carrinho de compras ou preferências de personalização, por curtos períodos. Em apps com estado, as equipes também armazenam o estado da sessão no cache para que o app possa ser sem estado.
O caching pode melhorar o desempenho de algumas maneiras concretas:
Em muitas configurações de nuvem, um cache fica ao lado de um armazenamento de dados primário (como um banco de dados). O repositório primário contém o conjunto de dados completo e durável no servidor de nuvem, enquanto o cache mantém um subconjunto menor e temporário que é mais rápido de ler.
Uma configuração comum é uma camada de cache independente ou um cache que fica dentro do app ou da camada de banco de dados — escolhido com base em onde você precisa de leituras rápidas.
Alguns sistemas usam caching multinível (“camadas de cache”) para que diferentes tipos de dados fiquem em caches diferentes com base na demanda. Adicionar uma ou mais camadas de cache pode melhorar a taxa de transferência e a latência da camada de dados e reduzir o custo total ao diminuir a carga no back-end.
As equipes normalmente armazenam em cache dados que se encaixam em algumas categorias:
Há várias formas padrão de os apps lerem e gravarem em um cache. Aqui estão os padrões mais comuns e o que eles significam na prática.
Usar camadas de cache pode melhorar a taxa de transferência e a latência ao atender solicitações comuns a partir do cache, em vez de consultar repetidamente o armazenamento de back-end. Isso pode reduzir a necessidade de ampliar a infraestrutura do banco de dados, porque menos solicitações chegam ao banco logo de início.
Para apps com picos de uso, caches em memória podem ajudar a reduzir a latência ao manter os dados solicitados com frequência perto de onde eles são usados.
Use estes pontos como ponto de partida ao escolher um fluxo de trabalho:
O cache melhora o desempenho do aplicativo porque ler de um cache em memória é mais rápido do que ler de um armazenamento de dados baseado em disco. Quando mais solicitações são atendidas pelo cache, os sistemas enviam menos consultas aos bancos de dados de back-end, o que pode reduzir a necessidade de ampliar a infraestrutura do banco e diminuir os custos relacionados.
O cache ajuda a reduzir trabalho repetido. Dados lidos repetidamente — ou que são caros para construir — podem ser armazenados uma vez e reutilizados. Se uma operação executa um cálculo complicado ou transforma dados, armazenar o resultado em cache reduz a computação repetida para solicitações posteriores.
Muitos sites armazenam em cache a saída da página (como HTML e scripts do cliente) para que o servidor possa retornar a saída em cache em vez de executar o código da página toda vez. O cache também dá suporte a cenários de multimídia na Web por meio de caches da Web e cache de rede, como redes de entrega de conteúdo (CDNs).
Os apps costumam armazenar subconjuntos transitórios de dados em um cache para recuperação rápida, enquanto o banco de dados principal mantém o conjunto completo de dados duráveis. Armazenar dados processados em cache e reutilizá-los pode atender às solicitações mais rápido do que consultas de banco de dados padrão.
As equipes costumam adicionar uma ou mais camadas de cache para melhorar a taxa de transferência e a latência, atendendo consultas comuns a partir do cache e reduzindo a carga do banco de dados. Caches em memória podem ajudar quando o uso dispara e a demanda por taxa de transferência aumenta, reduzindo a latência nesses períodos.
O cache é muito usado para armazenar grandes volumes de dados de sessão de curta duração (como entrada do usuário ou preferências de personalização) em um armazenamento em memória. Algumas equipes também armazenam o estado da sessão no cache para que apps com estado possam manter a camada do app sem estado. Para sistemas operacionais, dados que mudam com pouca frequência — como informações de produto e preços — são um alvo comum para cache.
Um cache do navegador armazena cópias de recursos estáticos no dispositivo do usuário para que visitas repetidas possam reutilizar esses arquivos em vez de baixá-los novamente.
O cache do lado do servidor acontece nos processos que executam serviços de negócios remotamente, em vez de no dispositivo do usuário final. Os caches do lado do servidor costumam ser privados (locais a uma única instância do app) ou compartilhados (usados por várias instâncias do app).
Uma CDN armazena conteúdo em cache em servidores de borda mais perto dos usuários finais, para que as solicitações nem sempre precisem voltar para a origem. Diferentemente de um cache do navegador (um usuário), um cache de CDN é compartilhado — a solicitação de um usuário pode preencher o conteúdo que outro usuário receberá depois.
O cache não é apenas um padrão de computação em nuvem — as camadas de hardware e memória também o usam.
O cache da CPU é uma pequena área de memória rápida próxima (ou ativada) do processador que armazena cópias de dados usados com frequência e instruções para reduzir o tempo gasto aguardando a memória principal.
O cache de memória (na memória) é o tipo de cache de software mais simples: um armazenamento na memória mantido no espaço de endereço de um único processo e acessado diretamente por esse processo.
Um cache distribuído abrange vários servidores, para que o cache possa crescer e ter capacidade transacional além de uma única máquina. Muitos serviços de cache compartilhado usam um cluster de servidores e distribuem os dados em cache pelo cluster; ampliar o cache pode ser tão simples quanto adicionar mais servidores. Algumas configurações distribuídas também usam camadas de cache, em que uma falha em uma camada busca os dados em um provedor upstream e depois salva o resultado localmente para a próxima solicitação.
O cache mantém os dados acessados com frequência mais perto de onde eles são usados, o que pode melhorar os tempos de resposta e ajudar um sistema a lidar com mais solicitações simultâneas. Ele também pode reduzir a contenção no armazenamento de dados original, por exemplo, quando um banco de dados tem conexões limitadas.
Em aplicativos distribuídos, o cache muitas vezes acontece em mais de um lugar — no lado do cliente (como em um navegador) e no lado do servidor (em um aplicativo ou serviço de cache compartilhado).
Comece pequeno e foque nos dados que trazem o retorno mais claro:
Um cache normalmente guarda cópias de dados de um armazenamento primário, então é preciso atenção à atualização:
O cache é um bloco de construção essencial para sistemas modernos porque se encaixa em muitas arquiteturas — de serviços únicos a apps distribuídos e entrega na borda. Para um provedor de nuvem de cache na memória gerenciado, você pode explorar o Azure.