Utilizando cache para otimizar o desempenho do Amazon S3
Tags: aws, amazon, cloud, braziliandevs
Published: 2022-08-27 05:51:30

**Intro**

Fala galera, neste post veermos algumas maneiras de utilizar cache para otimizar o desempenho do Amazon S3. Mas antes, vamos entender melhor o que é o Amazon S3 e o que é cache.

**Amazon S3**

O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos que oferece escalabilidade, disponibilidade de dados, segurança e performance líderes do setor. Clientes de todos os portes e setores podem armazenar e proteger qualquer quantidade de dados de praticamente qualquer caso de uso, como data lakes, aplicações nativas da nuvem e aplicações móveis. Na figura abaixo, podemos ver as várias utilidades do Amazon S3.

![Possibilidades do Amazon S3](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4tbqm3t32eu0cmeea58d.png) 

**Amazon S3 Free Tier**

O nível gratuito da AWS oferece aos clientes a capacidade de explorar e testar gratuitamente produtos da AWS até os limites especificados para cada serviço. O nível gratuito é composto por três tipos diferentes de ofertas: um nível gratuito de 12 meses, uma oferta sempre gratuita e testes de curto prazo.

O free tier do Amazon S3 possui um nível gratuito de 12 meses e conta com 5GB de armazenamento padrão, 20000 solicitações do tipo GET e 2000 solicitações do tipo PUT.

![Free Tier Amazon S3](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6cmnh7k6h1bcdk8epum6.png)
 
**O que é o armazenamento em cache?**

Na área de computação, um cache é uma camada de armazenamento físico 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 armazenamento em cache permite reutilizar com eficiência dados recuperados ou computados anteriormente.

![Cache](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pwgw1jwwhyi3tnov6n3z.png)

**Como funciona o armazenamento em cache?**

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.

**Utilizando o cache para conteúdo acessado com frequência**

Muitos aplicativos que armazenam dados no Amazon S3 atendem a um “conjunto de trabalho” de dados solicitados repetidamente pelos usuários. Por exemplo, se uma carga de trabalho estiver enviando solicitações GET repetidas para um conjunto comum de objetos, você poderá usar um cache como Amazon [CloudFront](https://docs.aws.amazon.com/cloudfront/index.html), [Amazon ElastiCache](https://docs.aws.amazon.com/elasticache/index.html) ou [AWS Elemental MediaStore](https://docs.aws.amazon.com/mediastore/index.html) para otimizar o desempenho.

A adoção bem-sucedida do cache pode resultar em baixa latência e altas taxas de transferência de dados, o que traz uma experiência  muito boa para o usuário. Os aplicativos que usam armazenamento em cache também enviam menos solicitações diretas ao Amazon S3, o que pode ajudar a reduzir os custos de solicitação, o que é excelente.

**Amazon Cloudfront**

O Amazon CloudFront é uma rede de entrega de conteúdo (Content delivery network ou CDN) rápida que armazena em cache de forma transparente os dados do Amazon S3 em um grande conjunto de pontos de presença (PoPs) distribuídos geograficamente. O Amazon CloudFront usa uma rede global de mais de 410 pontos de presença em mais de 90 cidades em 47 países. Quando os objetos podem ser acessados de várias regiões ou pela Internet, o CloudFront permite que os dados sejam armazenados em cache perto dos usuários que estão acessando os objetos. Isso pode resultar em entrega de alto desempenho de conteúdo popular do Amazon S3.

![Uso do Amazon Cloudfront](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6d1dr30cga9nkvpx7lqg.png) 

**Amazon Elasticache**

O Amazon ElastiCache é um cache gerenciado em memória. Com o ElastiCache, é possível provisionar instâncias do Amazon EC2 que armazenam objetos em cache na memória. Esse armazenamento em cache resulta em redução de ordens de magnitude na latência de GET e aumentos substanciais na taxa de transferência de download. Para usar o ElastiCache, você modifica a lógica do aplicativo para preencher o cache com objetos ativos e verificar se há objetos ativos no cache antes de solicitá-los ao Amazon S3. 

![Amazon Elasticache](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/91jz8mfazyyx0rd4lyl8.png)

**AWS Elemental MediaStore**

O AWS Elemental MediaStore é um sistema de armazenamento em cache e distribuição de conteúdo criado especificamente para fluxos de trabalho de vídeo e entrega de mídia do Amazon S3. O MediaStore fornece APIs de armazenamento de ponta a ponta especificamente para vídeo e é recomendado para cargas de trabalho de vídeo sensíveis ao desempenho.

![AWS Elemental MediaStore](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yg8ha5a398ldtukt191o.png)

**Conclusão**

Neste post, descrevemos como o uso de cache pode ser vantajoso para o desempenho do Amazon S3, além de ser uma boa prática de design pattern. Também observamos alguns outros serviços da Amazon que podem ser usados em conjunto com o Amazon S3 para a adoção do cache como o Amazon Cloudfront, Amazon Elasticache e AWS Elemental MediaStore.

Por fim, espero que tenham gostado e fiquem ligados para mais posts como esse. 

Até a próxima!