

# PERF03-BP05 Implementar padrões de acesso a dados que utilizam cache
<a name="perf_data_access_patterns_caching"></a>

 Implemente padrões de acesso que possam se beneficiar do armazenamento em cache de dados para recuperação rápida de dados acessados com frequência. 

 **Práticas comuns que devem ser evitadas:** 
+  Armazenar em cache dados que mudam com frequência. 
+  Depender dos dados em cache como se estivessem armazenados de forma durável e sempre disponíveis. 
+  Não levar em conta a consistência dos seus dados em cache. 
+  Não monitorar a eficiência da sua implementação de cache. 

 **Benefícios de implementar esta prática recomendada:** armazenar dados em um cache pode melhorar a latência de leitura, o throughput de leitura, a experiência do usuário e a eficiência geral, além de reduzir custos. 

 **Nível de risco exposto se esta prática recomendada não for estabelecida:** Médio 

## Orientação para implementação
<a name="implementation-guidance"></a>

 Um cache é um componente de software ou hardware destinado a armazenar dados para que futuras solicitações dos mesmos dados possam ser atendidas com maior rapidez e eficiência. Os dados armazenados em um cache podem ser reconstruídos se perdidos, repetindo um cálculo anterior ou obtendo-os de outro datastore. 

 O armazenamento de dados em cache pode ser uma das estratégias mais eficazes para melhorar a performance geral da aplicação e reduzir a carga sobre as fontes de dados primárias subjacentes. Os dados podem ser armazenados em vários níveis na aplicação, como dentro da aplicação e fazendo chamadas remotas, o que é conhecido como *cache do lado do cliente*, ou usando um serviço secundário rápido para armazenar os dados, conhecido como *cache remoto*. 

 **Armazenamento em cache no lado do cliente** 

 Com o armazenamento em cache no lado do cliente, cada cliente (uma aplicação ou serviço que consulta o datastore de backend) pode armazenar os resultados de suas consultas exclusivas localmente por um período especificado. Isso pode reduzir o número de solicitações na rede para um datastore ao verificar primeiro o cache do cliente local. Se os resultados não estiverem presentes, a aplicação poderá então consultar o datastore e armazenar esses resultados localmente. Esse padrão permite que cada cliente armazene dados no local mais próximo (o próprio cliente), resultando na menor latência possível. Os clientes também podem continuar a atender algumas consultas quando o datastore de backend não está disponível, aumentando a disponibilidade geral do sistema. 

 Uma desvantagem dessa abordagem é que, quando vários clientes estão envolvidos, eles podem armazenar os mesmos dados em cache localmente. Isso resulta no uso de armazenamento duplicado e na inconsistência de dados entre esses clientes. Um cliente pode armazenar em cache os resultados de uma consulta e, um minuto depois, outro cliente pode executar a mesma consulta e obter um resultado diferente. 

 **Armazenamento em cache remoto** 

 Para resolver o problema de dados duplicados entre clientes, um serviço externo rápido ou *cache remoto* pode ser usado para armazenar os dados consultados. Em vez de verificar um datastore local, cada cliente verificará o cache remoto antes de consultar o datastore de backend. Essa estratégia permite respostas mais consistentes entre clientes, melhor eficiência nos dados armazenados e um volume maior de dados em cache, pois o espaço de armazenamento é dimensionado independentemente dos clientes. 

 A desvantagem de um cache remoto é que o sistema geral pode ter uma latência maior, pois é necessário um salto de rede adicional para verificar o cache remoto. O cache do lado do cliente pode ser usado junto com o armazenamento em cache remoto para o armazenamento em vários níveis para melhorar a latência. 

### Etapas de implementação
<a name="implementation-steps"></a>
+  Identifique bancos de dados, APIs e serviços de rede que poderiam se beneficiar do armazenamento em cache. Serviços que têm workloads de leitura pesadas, uma alta taxa de leitura e gravação ou que são caros para escalar são candidatos ao armazenamento em cache. 
  +  [Armazenamento em cache de banco de dados](https://aws.amazon.com/caching/database-caching/) 
  +  [Habilitar o armazenamento em cache de APIs para melhorar a capacidade de resposta](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html) 
+  Identifique o tipo apropriado de estratégia de armazenamento em cache que melhor se adapte ao seu padrão de acesso. 
  +  [Estratégias de armazenamento em cache](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Strategies.html) 
  +  [Soluções de armazenamento em cache da AWS](https://aws.amazon.com/caching/aws-caching/) 
+  Siga as [práticas recomendadas de armazenamento em cache](https://aws.amazon.com/caching/best-practices/) para seu datastore. 
+  Configure uma estratégia de invalidação de cache, como um time-to-live (TTL), para todos os dados que equilibre a atualização dos dados e reduza a pressão sobre o datastore de backend. 
+  Habilite recursos como novas tentativas automáticas de conexão, recuo exponencial, tempos limite no lado do cliente e pool de conexões no cliente, se disponíveis, pois eles podem melhorar a performance e a confiabilidade. 
  +  [Práticas recomendadas: clientes Redis e Amazon ElastiCache (Redis OSS)](https://aws.amazon.com/blogs/database/best-practices-redis-clients-and-amazon-elasticache-for-redis/) 
+  Monitore a taxa de acertos de cache com uma meta de 80% ou mais. Valores mais baixos podem indicar tamanho insuficiente do cache ou um padrão de acesso que não se beneficia do armazenamento em cache. 
  +  [Que métricas devo monitorar?](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheMetrics.WhichShouldIMonitor.html) 
  +  [Práticas recomendadas para monitorar workloads do Redis no Amazon ElastiCache](https://www.youtube.com/watch?v=c-hTMLN35BY) 
  +  [Monitorar as práticas recomendadas com o Amazon ElastiCache (Redis OSS) usando o Amazon CloudWatch](https://aws.amazon.com/blogs/database/monitoring-best-practices-with-amazon-elasticache-for-redis-using-amazon-cloudwatch/) 
+  Implemente a [replicação de dados](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Replication.Redis.Groups.html) para descarregar as leituras em várias instâncias e melhorar a performance e a disponibilidade da leitura de dados. 

## Recursos
<a name="resources"></a>

 **Documentos relacionados:** 
+  [Usar a Lente do Well-Architected para o Amazon ElastiCache](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/WellArchitechtedLens.html) 
+  [Monitorar as práticas recomendadas com o Amazon ElastiCache (Redis OSS) usando o Amazon CloudWatch](https://aws.amazon.com/blogs/database/monitoring-best-practices-with-amazon-elasticache-for-redis-using-amazon-cloudwatch/) 
+  [Que métricas devo monitorar?](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheMetrics.WhichShouldIMonitor.html) 
+  [Whitepaper Performance em grande escala com o Amazon ElastiCache](https://docs.aws.amazon.com/whitepapers/latest/scale-performance-elasticache/scale-performance-elasticache.html) 
+  [Desafios e estratégias de armazenamento em cache](https://aws.amazon.com/builders-library/caching-challenges-and-strategies/) 

 **Vídeos relacionados:** 
+  [Plano de aprendizado do Amazon ElastiCache](https://pages.awscloud.com/GLB-WBNR-AWS-OTT-2021_LP_0003-DAT_AmazonElastiCache.html) 
+  [Design para o sucesso com as práticas recomendadas do Amazon ElastiCache ](https://youtu.be/_4SkEy6r-C4) 
+ [AWS re:Invent 2020: Design para o sucesso com as práticas recomendadas do Amazon ElastiCache](https://www.youtube.com/watch?v=_4SkEy6r-C4)
+ [AWS re:Invent 2023 [LANÇAMENTO]: Introdução ao Amazon ElastiCache sem servidor](https://www.youtube.com/watch?v=YYStP97pbXo)
+ [AWS re:Invent 2022: Cinco excelentes formas de reimaginar sua camada de dados com o Redis](https://www.youtube.com/watch?v=CD1kvauvKII)
+ [AWS re:Invent 2021: Mergulho profundo no Amazon ElastiCache (Redis OSS)](https://www.youtube.com/watch?v=QEKDpToureQ)

 **Exemplos relacionados:** 
+  [Como aumentar a performance de bancos de dados MySQL com o Amazon ElastiCache (Redis OSS)](https://aws.amazon.com/getting-started/hands-on/boosting-mysql-database-performance-with-amazon-elasticache-for-redis/) 