Tipos de Cache e Estratégias de Atualização

No items found.
8/10/2020
Tales Morais
Tales Morais
Infrastructure Specialist

Mineiro, nerd por natureza, viciado em automatizar coisas (e em séries)

Está sem tempo para ler? Aperte o play para escutar o artigo.

Cache é uma técnica largamente utilizada nas arquiteturas de aplicações modernas, usada para melhorar o tempo de carregamento de informações. Normalmente, é utilizada duas razões:

  1. A informação é armazenada “mais próxima” do cliente (seja por estar em um dispositivo mais rápido, por distância física ou qualquer outro motivo);
  2. Em sistemas de alta concorrência, diminui o acesso ao ponto na arquitetura de maior concorrência, diminuindo assim a latência geral e picos de utilização do sistema.



Tipos de Cache


  • Client Caching: Fica no “client side”, seja no sistema operacional, no navegador (exemplo: cache dos navegadores) ou em ambos;
  • Server Caching: O provedor da aplicação fica responsável por “cachear” a informação. Podem ser de 2 tipos:
  • Default caching: Utiliza o disco — que é um recurso mais barato e menos limitado. Exemplos: proxies reversos, Varnish;
  • In-memory caching: Utiliza a memória — tem menos latência. Exemplos: Memcached, Redis, etc.
  • Distributed Caching: A informação fica em uma outra camada externa da aplicação. Exemplo: Akamai.



Estratégias de atualização de Cache


Visto que a capacidade de armazenamento do cache é sempre limitada (ao tamanho do disco e/ou da memória) e que as informações podem estar sendo atualizadas a todo o momento, uma grande questão que deve-se considerar é quando e como atualizar as informações contidas no cache.

Com uma escolha adequada da estratégia, é possível racionalizar mais o uso da capacidade de armazenamento, reduzir a latência do dado e diminuir a carga em cima dos dispositivos (como o banco de dados).

Existem várias estratégias de caching, mas abordaremos 4 delas:


Cache-aside





Fluxo

(1) Cliente procura o dado no cache. Não tendo, gera um “cache miss”.

(2) Cliente busca o dado do DB.

(3) Cliente adiciona o dado ao cache.


Características

  • Memcached é geralmente usado dessa maneira.
  • A aplicação é responsável pela leitura e gravação no banco de dados.
  • O cache não interage diretamente com o banco de dados.


Desvantagem

  • Cada cache miss resulta em três viagens, o que pode causar um atraso sensível.
  • Os dados podem ficar obsoletos se forem atualizados no banco de dados.
  • Também é conhecido como carregamento lento (lazy loading). Somente os dados solicitados são armazenados em cache.




Write-through





Fluxo

(1) Cliente procura o dado no cache.

(2) Cache lê/grava dado no banco de dados.

(3) Cache retorna dado ao cliente.


Características

  • A aplicação usa o cache como o armazenador das informações.
  • Cache é o responsável por ler e gravar no banco de dados.
  • Leituras subsequentes à gravação são rápidas. Os usuários são mais tolerantes à latência de escrita do que de leitura.
  • Os dados no cache não ficam desatualizados.


Desvantagem

  • Tem uma operação um pouco mais lenta para escrita.
  • Quando um novo nó é criado (falha ou upscaling), o novo nó não terá o dado em cache até que ele seja atualizado no banco de dados.
  • A maioria dos dados gravados pode nunca ser lida.



Outras estratégias

Estratégias de caching podem ser criadas a todo momento, respeitando uma necessidade específica de cada aplicação. De maneira geral, essas duas formas apresentadas são satisfatórias na grande maioria das vezes.

Dois exemplos de outras estratégias de caching já bem conhecidas são:

  • Write-back — exatamente como a write-through, porém gravando no banco de dados de forma assíncrona.
  • Refresh-ahead — dados são trazidos ao cache de forma preditiva, porém sua implementação normalmente é muito complicada e, por vezes, o cache não é tão efetivo

Essas estratégias são, muitas vezes, difíceis de serem implantadas. Geralmente, necessitam ajustes no funcionamento da aplicação e, frequentemente, não alcançam uma performance boa o suficiente para justificar o esforço de pesquisa, implantação e aprendizado.


Conclusão

Ao escolher usar um cache, é muito importante saber exatamente em qual contexto e como ele será utilizado, pois uma estratégia de cache errada pode causar lentidão na aplicação e, em casos extremos, até perda de dados.

Espero com este artigo ter esclarecido um pouco o que são caches e como funcionam. Caso ainda esteja com alguma dúvida, entre em contato! Quem sabe não complementamos este artigo com sua colaboração! 


O que você achou deste conteúdo?
Quer receber nossos conteúdos?
Seu cadastro foi efetuado com sucesso! Enviaremos as novidades no seu email.
Oops! Something went wrong while submitting the form.