Copiar um arquivo por um link lento desperdiça tudo o que ambas as máquinas já compartilham. A compressão ajuda apenas por um fator de dois a quatro, e as ferramentas de diff comuns precisam dos dois arquivos na mesma máquina, o que é exatamente o que o link torna impossível.
Andrew Tridgell e Paul Mackerras resolveram isso em 1996 com um diff remoto: o receptor divide seu arquivo em blocos, envia checksums de cada bloco, e o emissor, em uma única passagem, descobre quais dos seus próprios blocos correspondem em qualquer deslocamento, usando um checksum rolante barato o suficiente para ser calculado em cada posição de byte. Apenas dados não correspondentes e referências cruzam a rede.
O projeto precisa de apenas uma ida e volta, então a latência quase não importa, e funciona corretamente mesmo quando os arquivos são bastante diferentes. Tridgell anunciou a ferramenta em 19 de junho de 1996 como um substituto do rcp com esse algoritmo de atualização remota, além de pipelining que sobrepõe comunicação e computação.
Calcular o diff remotamente: enviar checksums, não conteúdo
Checksums rolantes permitem ao emissor varrer cada deslocamento de forma barata
Uma única ida e volta o torna rápido mesmo em links de alta latência
Checksums fortes confirmam correspondências fracas antes de os dados se moverem
Enviar apenas blocos não correspondentes economiza largura de banda proporcionalmente à semelhança
Quando a largura de banda é escassa e os arquivos se sobrepõem, envie evidências, não dados: checksums rolantes revelam o que já existe no outro extremo sem precisar dos dois arquivos em um só lugar.
O rsync tornou-se a ferramenta Unix padrão para backups, espelhos e distribuição de software, e seu diff por checksums de blocos continua sendo o núcleo da ferramenta até hoje. O relatório de 1996 ainda é a referência citada para o algoritmo, e o projeto de uma única ida e volta influenciou sistemas de sincronização posteriores.
CONFIRA AS EVIDÊNCIAS
As fontes
- The rsync algorithm (TR-CS-96-05) Australian National University · openresearch-repository.anu.edu.au
- First release of rsync - rcp replacement (announcement) LWN.net archive · static.lwn.net ·