Skip to content
Latchkey

O Que É um Remote Cache?

Um remote cache move o seu cache do disco local para armazenamento compartilhado, para que resultados de uma máquina possam ser reutilizados por todas as outras máquinas e execuções.

O caching só ajuda se o cache sobreviver. Em runners de CI efêmeros o disco local é apagado após cada job, então um cache apenas local está vazio toda vez. Um remote cache resolve isso armazenando artifacts centralmente onde qualquer runner pode buscá-los.

Por que caches locais falham no CI

Runners hospedados e gerenciados geralmente são VMs novas. O primeiro job popula um cache local; o segundo job roda em uma VM diferente que nunca o vê. A taxa de hit de um cache local no CI é efetivamente zero.

Como funciona um remote cache

  • Uma etapa calcula uma key a partir das suas entradas e pede essa key ao serviço de cache.
  • Em um hit, ela baixa o artifact armazenado e pula o trabalho.
  • Em um miss, ela faz o trabalho e faz upload do resultado sob essa key para a próxima vez.

Um pequeno exemplo

O --remote_cache=grpc://cache.internal do Bazel aponta cada build para um cache compartilhado. Uma execução de CI que compila um módulo faz upload do resultado; a próxima execução, em um runner diferente, faz o download dele em vez de recompilar - mesmo que nenhum estado local tenha sobrevivido.

Caminhos de leitura direta e escrita

Branches confiáveis normalmente escrevem no cache; pull requests frequentemente apenas leem, para que uma mudança não confiável não possa envenenar resultados compartilhados. O armazenamento de apoio é geralmente um object store como o S3.

Uma nota da Latchkey

A Latchkey roda o backend do cache na mesma região que os seus runners gerenciados, então as leituras e escritas do remote cache usam um caminho de baixa latência e evitam custos de egress da internet pública.

Principais conclusões

  • Um remote cache vive em armazenamento compartilhado para que qualquer runner possa reutilizar resultados.
  • Ele é essencial em runners efêmeros, onde caches locais nunca dão hit.
  • Restrinja as escritas no cache a branches confiáveis para evitar envenenamento.

Guias relacionados