Conceitos
Look-aside caching pattern
Intuição
Pense numa pessoa que guarda anotações recentes num bloco de notas na mesa, em vez de abrir o arquivo completo no armário toda vez que precisa de uma informação. Ela primeiro olha o bloco de notas; se a informação não está lá, ela vai até o armário, pega o documento, copia a informação pro bloco de notas e segue em frente. Da próxima vez que alguém perguntar a mesma coisa, ela só olha o bloco de notas — o armário só é aberto quando o bloco não tem a resposta.
Como funciona
No padrão look-aside (também chamado cache-aside), a própria aplicação é responsável por orquestrar o cache: ao precisar de um dado, ela primeiro consulta o memcached; se o item não está lá (cache miss), ela busca no banco de dados e, em seguida, grava o resultado no cache para que a próxima leitura seja servida direto da memória. O cache nunca é preenchido antecipadamente — ele só se popula conforme o uso real acontece, ou seja, é um cache 'demand-filled'. Para escritas, a aplicação grava no banco e depois invalida (remove) a entrada correspondente no cache, em vez de tentar atualizar o valor cacheado diretamente; essa invalidação é disparada observando as próprias operações de escrita que chegam ao banco, identificando quais chaves de cache correspondem aos dados alterados e apagando-as de forma direcionada. O resultado é que o memcached absorve a esmagadora maioria das leituras, e o banco relacional só é consultado em misses de cache ou em escritas.
Na prática
O Facebook escolheu esse formato — em vez de write-through, onde o cache seria atualizado no mesmo momento da escrita no banco — porque ele é mais simples de operar em escala massiva e evita manter o cache sincronizado ativamente a cada escrita; o custo é aceitar misses ocasionais e lidar com problemas derivados, como a 'manada de bois' em itens populares invalidados, que o paper resolve com um mecanismo de leases. Esse padrão hoje é o default de facto sempre que se coloca Redis ou Memcached na frente de um banco relacional, e é ensinado como opção básica de design ao lado de write-through e write-behind.
Use em um desenho
Pratique na escola de System Design os casos que dependem deste conceito.