Tudo o que você precisa saber sobre armazenamento em cache



Dia bom.

Apresento a você a tradução do artigo "Tudo o que você precisa saber sobre Cache - Design de Sistemas", de Animesh Gaitonde.

Introdução


Você notou que, ao navegar em uma página da Web com uma conexão de Internet ruim, o texto é carregado na frente de imagens de alta qualidade? No entanto, quando você visita a mesma página novamente, ela carrega muito mais rapidamente. Quando você visita um novo site, leva muito mais tempo para fazer o download do que para baixar sites visitados com frequência, como o Facebook ou a Amazon. Você sabe por que isso está acontecendo? É tudo sobre cache.



É assim que minha página do Instagram se parece com uma conexão lenta. Como você pode ver, o texto é exibido enquanto as imagens ainda não foram carregadas.

É muito importante fornecer a melhor experiência com o aplicativo para reter e envolver os usuários. Em um mundo moderno onde reina o espírito de competição, os negócios sofrem muito devido à pouca experiência do usuário. Imagine que você está assistindo sua série favorita ou fazendo streaming de vídeo em um site, mas o vídeo é constantemente interrompido para carregamento adicional (buffer). Por quanto tempo você aguentará essa "atitude" e retornará a esse site?

O armazenamento em cache trabalha com o princípio de "localização de links". O cache é um armazém de dados local para acelerar a recuperação de informações e a recuperação de dados. O principal objetivo do cache é reduzir o atraso na leitura de dados e aumentar a taxa de transferência do aplicativo. Vejamos alguns exemplos da vida real.

Uso de cache


Suponha que você faça o jantar todos os dias. Para cozinhar, você precisa de vários ingredientes, vegetais, especiarias, etc. No entanto, você vai à loja todos os dias para isso? Isso pode ser bastante oneroso e demorado. Claro, a primeira coisa que você olha dentro do armário na cozinha ou na geladeira. Isso ajuda a evitar uma viagem desnecessária ao supermercado.



Sua geladeira é uma espécie de cache para vegetais. A vantagem óbvia desse cache é uma economia significativa no tempo de preparação do jantar.

Como o cache funciona?


Aplicativos de servidor normalmente armazenam dados em um banco de dados. Quando um cliente solicita dados, o aplicativo envia uma solicitação ao banco de dados, recebe dados de lá e os envia ao cliente. O servidor de banco de dados está offline e pode estar localizado em um computador diferente daquele em que o servidor de aplicativos está localizado.



A leitura de dados do banco de dados é um processo muito lento, porque você precisa enviar uma solicitação e executar E / S para obter dados do sistema de arquivos. Se os dados estiverem armazenados no cache, a operação de leitura será muito rápida. Quando um cliente solicita repetidamente os mesmos dados, faz sentido retornar dados do cache em vez do banco de dados.

Por exemplo: se um tweet for viral, todos os clientes solicitarão dados para o mesmo tweet. Como o Twitter tem milhões de usuários, o uso de um cache evita milhões de consultas ao banco de dados.

Assim, o cache reduz a carga no banco de dados. Se os dados solicitados estiverem no cache, a solicitação do banco de dados será redirecionada (interceptada). Você pode desenhar alguma analogia com uma tabela de hash que armazena pares de valores-chave.

O diagrama a seguir mostra o processo de leitura de dados do cache:



Conceitos de cache de chaves


Time to Live (TTL)


Esses são os limites da quantidade de dados que podem ser armazenados no cache. Você deve excluir entradas no cache que o servidor de aplicativos não precisa mais.

No caso da Netflix, o servidor armazenará em cache os programas mais vistos ou populares. Não há necessidade de mostrar em cache que ninguém está assistindo.

Por exemplo: o cache da série Paper House é mais racional que o filme de Indiana Jones.

Excluir política


Em algum momento, o cache está cheio. Portanto, surge a necessidade de excluir dados antigos (irrelevantes) e substituí-los por novas (relevantes) informações.

Existem várias políticas para limpar o cache, como "antigo (usado menos recentemente)" (LRU menos usado recentemente), "raramente solicitado (menos usado)" (LFU menos usado), "último (usado mais recentemente)" ( Utilizado Mais Recentemente, MRU). Essas políticas excluem dados do cache de acordo com um princípio específico.

Velho


Os dados que não são solicitados há muito tempo são excluídos do cache. Assim que o cache estiver cheio, os dados antigos serão excluídos e novos dados serão adicionados.

Suponha que o Facebook armazene em cache fotos de celebridades. A análise das solicitações de assinantes indica a relevância de novas fotos. Quando o cache estiver cheio, a foto mais antiga será excluída.

Raramente solicitado


O LFU rastreia a frequência ou o número de solicitações de dados. Quando o tamanho do cache se aproximar do valor limite, os dados mais raramente solicitados serão excluídos.

Quando inserimos o texto, o telefone começa a oferecer várias opções para finalizar a palavra, uma das quais pode ser selecionada em vez do conjunto completo (preenchimento automático). O software do smartphone armazena em cache as palavras digitadas com mais freqüência.



Palavras raramente digitadas são posteriormente excluídas desse cache. No exemplo acima, se você usar as palavras "recurso", "recursos", "pluma" etc. etc., depois de algum tempo, o telefone deixará de lhe oferecer "talento", pois ele será removido do cache.

Último


Nesta política, os dados mais recentes estão sujeitos a exclusão, é dada preferência a dados mais antigos armazenados no cache. Essa estratégia é usada se o modelo de aquisição de dados for tal que o usuário esteja menos interessado em recuperar os dados mais recentes. Considere um exemplo.



Aplicativos de namoro como o Tinder geralmente armazenam em cache todos os parceiros em potencial (possíveis correspondências ou preferências) do usuário. Quando um usuário percorre um feed movendo um perfil específico de um parceiro em potencial para a esquerda ou para a direita, o aplicativo não deve mais recomendar esse perfil a ele. Se isso acontecer, levará a uma má experiência do usuário.

Nesse caso, é necessário excluir os dados mais recentes. O aplicativo deve excluir os perfis visualizados do cache.

Tipos de cache


Gravação em cache


Como o nome indica, os dados são gravados primeiro no cache e depois no banco de dados. Isso garante a consistência dos dados no cache e no banco de dados. Cada leitura de dados do cache corresponde ao registro mais recente.



A desvantagem dessa abordagem é o aumento do tempo de gravação. Não é adequado para sistemas muito carregados com operações frequentes de gravação de dados. No entanto, é ótimo para aplicativos que costumam reler dados armazenados no banco de dados. A escrita lenta é compensada pela leitura e consistência rápidas.

Entrada de cache


Uma alternativa à primeira abordagem é gravar dados no cache e adicionar uma observação sobre alterações de dados para a atualização subsequente no banco de dados.



Usando operações assíncronas periódicas, você pode ler dados atualizados no cache e fazer alterações nos dados correspondentes no banco de dados. Essa abordagem não aumenta as operações de leitura / gravação. A única desvantagem aqui é o atraso na sincronização entre o cache e o banco de dados. Isso pode levar ao fato de que aplicativos que dependem do banco de dados como fonte de verdade lerão dados desatualizados.

O YouTube, por exemplo, usa essa abordagem para armazenar informações sobre o número de visualizações de um vídeo específico. Atualizar o banco de dados para cada exibição do vídeo viral será muito caro. A melhor solução é gravar dados no cache e sincronizar com o banco de dados.

Registro de desvio de cache


Vários aplicativos de servidor nem sempre lêem os dados mais recentes. Nesse caso, uma entrada de desvio de cache é usada.



Nesta abordagem, o banco de dados é atualizado sem um cache. Isso evita o carregamento de dados não reclamados no cache. No entanto, se o aplicativo ainda solicitar os dados mais recentes que não estão no cache, isso levará ao carregamento desses dados do banco de dados com todas as conseqüências resultantes.

Exemplos de uso de cache distribuído


Lista de projetos de cache aberto:

  • Redis
  • Memcached
  • Voltdb
  • Aerospike dbs
  • Apache inflamado

Obrigado pela atenção.

All Articles