Cache | System Design
- Cache | System Design
Quando usar
- Deve ser analisado a questão de sobrecarga do banco. As vezes não é necessário usar o cache, talvez uma otimização de consulta, uma view já solucionaria
- Precisa ter métricas para colocar cache. Usa se um APM para monitorar para tomar a decisão. Com isso você descobre onde está o gargalho e tenta melhorar aquele ponto, seja com cache, seja com índice no banco ou outra estratégia.
Informações
- IMPORTANTE: Se for criar várias máquinas com kubernetes, o cache fornecido pela aplicação fica na máquina e cada máquina vai ter o seu cache. Nesses casos seria o correto usar o Redis
- CDNs são usados para cachear arquivos estáticos. Algumas emissoras de televisão usam e a NetFlix também
- Quando pensar em adicionar um cache, deve ser analisado se as informações no cache não vão ficar desatualizadas
- Deve se analisar o Reade-Write Ratio, pois pode ser 1/10, ou seja, mais escritas que leitura e isso faria com que o cache ficasse desatualizado
- Deve ser pensando também no Cache eviction que é, o que vai acontecer com os dados quando não tiver mais memória
-
Explicação do cache eviction
"Cache eviction" é um termo usado em computação para descrever o processo de remoção de dados de um cache. Um cache é uma camada de armazenamento temporário que guarda cópias de dados frequentemente acessados, visando acelerar o acesso a esses dados. Como o espaço em cache é geralmente limitado, eventualmente se torna necessário remover alguns dados para dar espaço a novos. Esse processo de remoção é chamado de "eviction" (despejo, em tradução livre).
Existem vários algoritmos de cache eviction, cada um com sua própria estratégia para decidir quais dados remover. Alguns dos mais comuns incluem:
-
Least Recently Used (LRU) (DEFAULT): Este algoritmo remove os dados que foram usados há mais tempo. O raciocínio é que se um dado não foi acessado recentemente, é menos provável que seja acessado novamente em breve.
-
First In, First Out (FIFO): Aqui, os dados são removidos na ordem em que foram adicionados ao cache. O primeiro dado que entrou é o primeiro a ser removido, independentemente de sua frequência ou recenticidade de acesso.
-
Least Frequently Used (LFU): Este algoritmo dá prioridade para a remoção de dados que foram menos acessados. A ideia é que dados raramente acessados são menos valiosos para manter no cache.
-
Random Replacement (RR): Como o nome sugere, este algoritmo remove um dado aleatório do cache. É simples e não requer o rastreamento do histórico de acesso dos dados, mas pode não ser tão eficiente quanto outros métodos.
Cada algoritmo tem seus prós e contras e pode ser mais adequado para diferentes tipos de aplicações e padrões de acesso a dados. A escolha do algoritmo de eviction certo é crucial para garantir a eficiência do cache, maximizando o benefício de ter dados rapidamente acessíveis sem consumir recursos desnecessariamente.
-
-
- O Expiration Policy é o tempo que o cache irá ficar em memória
- É usado a sigla TTL (Time to Live)
🔍 Leia estratégias:
𝗖 𝗮𝗰𝗵𝗲 𝗔𝘀𝗶𝗱𝗲 (carregamento lento)
- Como funciona: primeiro tenta o cache e depois busca no banco de dados em caso de falha no cache
- Uso: quando as falhas de cache são raras ou a latência de uma falha de cache + leitura do banco de dados é aceitável
𝗥𝗲𝗮𝗱 𝗧𝗵𝗿𝗼𝘂𝗴𝗵
- Como funciona: o cache lida com leituras de banco de dados, buscando de forma transparente os dados ausentes em caso de perda de cache
- Uso: abstrai a lógica do banco de dados do código do aplicativo. Mantém o cache preenchido de forma consistente, lidando com erros automaticamente
📝 Estratégias de escrita:
𝗪𝗿𝗶𝘁𝗲 𝗔𝗿𝗼𝘂𝗻𝗱
- Como funciona: As escritas ignoram o cache e vão direto para o BD
- Uso: quando os dados gravados não serão lidos imediatamente do cache
𝗪𝗿𝗶𝘁𝗲 𝗕𝗮𝗰𝗸 (gravação atrasada)
- Como funciona: grava primeiro no cache, depois grava assíncronamente no banco de dados
- Uso: em ambientes com uso intenso de gravação, onde uma leve perda de dados é tolerável
𝗪𝗿𝗶𝘁𝗲 𝗧𝗵𝗿𝗼𝘂𝗴𝗵
- Como funciona: gravação imediata no cache e no banco de dados
- Uso: quando a consistência dos dados é crítica
🚀 Uso na vida real: