Para melhorar o gerenciamento do cache de imagens no aplicativo Android, Os engenheiros da Grab fizeram a transição de um cache menos usado recentemente (LRU) para um cache menos usado recentemente (TLRU) com reconhecimento de tempopermitindo-lhes recuperar o armazenamento de forma mais eficaz, sem degradar a experiência do usuário ou aumentar os custos do servidor.
O aplicativo Grab Android usado Deslizar como sua principal estrutura de carregamento de imagens, incluindo um cache LRU para armazenar imagens localmente, a fim de reduzir chamadas de rede, melhorar os tempos de carregamento e reduzir os custos do servidor. No entanto, as análises mostraram que o uso de um cache LRU de 100 MB apresentava deficiências significativas: muitas vezes ele se enchia rapidamente para muitos usuários, levando à degradação do desempenho, enquanto em outros casos as imagens permaneciam em cache por meses se o cache nunca excedesse o limite de tamanho, desperdiçando assim armazenamento.
Para contornar essas limitações, eles decidiram estender o LRU com expiração baseada no tempo. TLRU usa três parâmetros, Hora de viver (TTL), que determina quando uma entrada de cache é considerada expirada; um limite mínimo de tamanho de cacheo que garante que as imagens essenciais permaneçam em cache mesmo quando expirarem se o cache estiver subpovoado; e tamanho máximo do cacheque impõe o limite superior de armazenamento.
Em vez de implementar o TLRU do zero, os engenheiros da Grab optaram por fazer um fork do Glide e estender seu DiskLruCache implementação, aproveitando sua “base madura e testada em batalha”
Essa implementação é amplamente adotada em todo o ecossistema Android e lida com casos extremos complexos, como recuperação de falhas, segurança de thread e otimização de desempenho que exigiriam um esforço substancial para replicação.
O DiskLruCache precisava ser estendido em três dimensões, adicionando suporte para rastrear o horário do último acesso, implementando uma lógica de despejo baseada em tempo e incluindo um mecanismo de migração para caches de usuários existentes.
Os horários do último acesso eram necessários para classificar as entradas do cache pelo acesso mais recente e precisavam ser mantidos durante as reinicializações do aplicativo. A lógica de despejo baseada em tempo foi executada em cada acesso ao cache para verificar se a entrada acessada menos recentemente expirou antes de removê-la. Para a migração de cache existente, o principal desafio era atribuir carimbos de data e hora do último acesso às entradas LRU. Como as APIs do sistema de arquivos não forneciam uma fonte confiável, os engenheiros do Grab decidiram atribuir o carimbo de data/hora da migração a todas as entradas:
Essa abordagem preserva todo o conteúdo armazenado em cache e estabelece uma linha de base consistente, embora seja necessário aguardar um período TTL para obter todos os benefícios da remoção. Também garantimos a compatibilidade bidirecional – a implementação original do LRU pode ler arquivos de diário do TLRU ignorando os sufixos de carimbo de data/hora, permitindo reversões seguras, se necessário.
Outro desafio foi encontrar valores de configuração ideais, baseados em experimentos controlados.
Nosso critério de sucesso é uma redução na taxa de acertos do cache de não mais que 3 pontos percentuais (pp) durante a transição para TLRU. Por exemplo, uma redução de 59% para 56% na taxa de acertos resultaria em um aumento de 7% nas solicitações do servidor. Esse limite equilibra a otimização do armazenamento com um impacto aceitável no desempenho.
Usando essa abordagem, 95% dos usuários do aplicativo observaram uma redução de 50 MB no tamanho do cache, com os 5% principais obtendo economias ainda maiores. Com base nesses resultados, os engenheiros da Grab estimaram que poderiam recuperar terabytes de armazenamento entre dispositivos, mantendo a taxa de acertos do cache dentro de limites aceitáveis e sem aumentar os custos do servidor.
A postagem original fornece detalhes altamente valiosos sobre o comportamento do LRU e a implementação do TLRU que podem ser abordados aqui. Certifique-se de lê-lo para obter todos os detalhes.
Deseja saber mais sobre Programação e Desenvolvimento Clique Aqui!
pegue o cache de imagem tlru,Desenvolvimento,Arquitetura e Design,Código aberto,Móvel,Android,Cache
