Na área de computação, um cache é uma camada de armazenamento de dados de alta velocidade que guarda um subconjunto de dados, geralmente temporário por natureza, para que futuras solicitações referentes a esses dados sejam atendidas de modo mais rápido do que é possível fazer ao acessar o local de armazenamento principal de dados. O cache permite reutilizar com eficiência dados recuperados ou computados anteriormente. Os dados em um cache geralmente são armazenados no hardware de acesso rápido, como uma Random-access memory (RAM – Memória de acesso aleatório), e também podem ser usados em paralelo com um componente de software. O principal objetivo de um cache é aumentar a performance da recuperação de dados ao reduzir a necessidade de acessar a camada subjacente mais lenta de armazenamento. A substituição de capacidade por velocidade geralmente faz com que um cache armazene um subconjunto de dados de modo temporário, em comparação com bancos de dados, cujos dados são, de modo geral, completos e duráveis.
Os caches podem ser aplicados e utilizados entre várias camadas de tecnologia, como sistemas operacionais, camadas de redes, que incluem Content Delivery Networks (CDN – Redes de entrega de conteúdo) e DNS, além de aplicativos web e bancos de dados.
Graças às altas taxas de solicitação ou IOPS (operações de entrada/saída por segundo) apoiadas pela RAM e por mecanismos de memória, o cache resulta em uma performance de recuperação de dados otimizada, além de reduzir custos em grande escala. Para apoiar a mesma escala com bancos de dados tradicionais e hardware de disco, seriam necessários recursos adicionais. Esses recursos adicionais aumentam os custos e ainda assim não têm condições de atingir a performance de baixa latência proporcionada por um cache de memória.
Você pode usar o cache para reduzir bastante a latência e melhorar as IOPS para várias cargas de trabalho de aplicativos com alto consumo de leitura, como portais de perguntas e respostas, jogos, compartilhamento de mídia e redes sociais. As informações armazenadas em cache podem incluir os resultados de consultas de banco de dados, cálculos com alto consumo computacional, solicitações/resposta de API e artefatos da web, como HTML, JavaScript e arquivos de imagem. As cargas de trabalho com alto consumo computacional que trabalham com conjuntos de dados, como mecanismos de recomendação e simulações computacionais de alta performance, também se beneficiam de uma camada de dados de memória atuando como um cache. Nesses aplicativos, conjuntos de dados muito grandes devem ser acessados em tempo real em clusters de máquinas que podem abranger centenas de nós. Devido à velocidade do hardware subjacente, o trabalho com esses dados em um armazenamento de disco gera um gargalo significativo para esses aplicativos.
Em um ambiente computacional distribuído, uma camada de cache dedicada permite que sistemas e aplicativos sejam executados de forma independente do cache com seus próprios ciclos de vida sem o risco de afetar o cache. O cache atua como uma camada central que pode ser acessada por meio de sistemas diferentes com sua própria topologia de arquitetura e ciclo de vida. Isso torna-se particularmente relevante em um sistema em que é possível aumentar ou reduzir a escala dos nós de aplicativos de modo dinâmico. Se o cache estiver armazenado no mesmo nó do aplicativo e dos sistemas que o utilizam, é possível que a escalabilidade prejudique a integridade do cache. Além disso, quando caches locais são usados, eles beneficiam apenas o aplicativo local que estiver consumindo os dados. Em um ambiente de cache distribuído, os dados podem abranger vários servidores de cache e ser armazenados em um local central para beneficiar todos os consumidores desses dados.

| Camada | Lado do cliente | DNS | Web | Aplicativo | Banco de dados |
| Caso de uso | Acelere a recuperação de conteúdo da web proveniente de sites (navegador ou dispositivo) | Resolução de domínio para IP | Acelere a recuperação de conteúdo da web originado em servidores web/de aplicativos. Gerencie sessões da web (servidor) | Acelere a performance do aplicativo e o acesso a dados | Reduza a latência associada a solicitações de consulta do banco de dados |
| Tecnologias | Cabeçalhos de cache HTTP, navegadores | Servidores DNS | Cabeçalhos de cache HTTP, CDNs, proxies reversos, Web Accelerators, armazenamentos de chave-valor | Datastores de chave-valor, caches locais | Buffers de banco de dados, datastores de chave-valor |
| Soluções | Específicas do navegador | Amazon Route 53 | Amazon CloudFront, ElastiCache for Redis, ElastiCache for Memcached, soluções de parceiros | Application Frameworks, ElastiCache for Redis, ElastiCache for Memcached, soluções de parceiros | ElastiCache for Redis, ElastiCache for Memcached |
Ao implementar uma camada de cache, é importante entender a validez dos dados que estão sendo armazenados em cache. Um cache bem-sucedido resulta em uma alta taxa de ocorrências. Isso significa que os dados estavam presentes quando foram obtidos. Um erro de cache ocorre quando os dados obtidos não estão presentes no cache. Os controles, como Time to live (TTLs – Vida útil), podem ser aplicados para expirar os dados conforme for necessário. Outra consideração a fazer pode ser avaliar se o ambiente de cache precisa ou não ser altamente disponível, o que pode ser atendido por mecanismos de memória, como o Redis. Em alguns casos, uma camada de memória pode ser usada como uma camada de armazenamento de dados independente, em vez de usar o cache de dados por meio de um local principal. Nesse cenário, é importante definir o Recovery Time Objective (RTO – Objetivo do tempo de recuperação), ou seja, o tempo necessário para a recuperação após uma interrupção, e o Recovery Point Objective (RPO – Objetivo de ponto de recuperação), que é o último momento ou transação capturada na recuperação, pertinentes aos dados armazenados no mecanismo de memória para determinar se isso é indicado. Estratégias e características de projeto de diferentes mecanismos de memória podem ser aplicadas para atender à maioria dos requisitos de RTO e RPO.
O Amazon ElastiCache é um web service que torna fácil implantar, operar e ajustar a escala de um datastore ou cache de memória na nuvem. O serviço melhora a performance de aplicativos web, o que permite recuperar informações de datastores rápidos e gerenciáveis de memória, em vez de depender inteiramente de bancos de dados armazenados em disco e de seu desempenho mais lento.
Saiba como você pode implementar uma estratégia de cache eficiente com este whitepaper técnico sobre o cache de memória.


Como a memória é infinitamente mais rápida do que um disco (SSD ou magnético), a leitura de dados de cache de memória é extremamente rápida (pode ser feita em menos de dez milissegundos). Esse acesso muito mais rápido aos dados melhora a performance geral do aplicativo.

Uma única instância de cache pode disponibilizar centenas de milhares de IOPS (operações de entrada/saída por segundo), possivelmente substituindo várias instâncias de banco de dados, o que diminui o custo total. Isso é particularmente importante se a cobrança do banco de dados principal for feita por throughput. Nesses casos, as economias de preço poderiam chegar a dezenas de pontos percentuais.

Ao redirecionar partes importantes da carga de leitura do banco de dados de back-end para a camada de memória, o cache pode reduzir a carga no banco de dados, além de protegê-lo contra uma performance mais lenta, no caso de um aumento da carga, ou até mesmo de falhas nos momentos de pico.

Um desafio comum em aplicativos modernos é administrar corretamente os períodos de pico durante a sua utilização. Os exemplos incluem aplicativos de redes sociais executados durante o Super Bowl ou em dias de eleições, sites de comércio eletrônico durante a Black Friday, etc. Uma carga maior no banco de dados resulta em latências mais elevadas para a obtenção de dados, o que torna imprevisível a performance geral dos aplicativos. Ao utilizar um cache de memória com throughput elevado, é possível mitigar esse problema.

Em muitos aplicativos, é provável que um pequeno subconjunto de dados, como o perfil de celebridades ou produtos famosos, seja acessado com mais frequência do que o restante. É possível que isso resulte em hotspots no banco de dados e exija o provisionamento em excesso de recursos de banco de dados com base nos requisitos de throughput dos dados usados com maior frequência. O armazenamento de chaves comuns em um cache de memória mitiga a necessidade de provisionamento excessivo, além de proporcionar uma performance rápida e previsível para os dados acessados com mais frequência.

Além de menor latência, os sistemas de memória também oferecem taxas de solicitação (IOPS) muito mais altas relativas a um banco de dados baseado em disco similar. Uma única instância usada como um cache lateral distribuído pode atender a centenas de milhares de solicitações por segundo.
É fácil começar a usar o cache na nuvem usando um serviço totalmente gerenciado, como o Amazon ElastiCache. Isso elimina a complexidade de configurar, gerenciar e administrar o cache, permitindo que você se dedique ao que agrega valor à sua empresa. Cadastre-se hoje mesmo no Amazon ElastiCache.




















