Copiar un archivo por un enlace lento desperdicia todo lo que ambas máquinas ya comparten. La compresión solo ayuda en un factor de dos a cuatro, y las herramientas diff habituales necesitan ambos archivos en la misma máquina, que es precisamente lo que el enlace hace imposible.

Andrew Tridgell y Paul Mackerras lo resolvieron en 1996 con un diff remoto: el receptor divide su archivo en bloques, envía sumas de verificación de cada bloque, y el emisor, en una sola pasada, encuentra cuáles de sus propios bloques coinciden en cualquier desplazamiento, usando una suma de verificación rodante lo bastante barata como para calcularla en cada posición de byte. Solo los datos no coincidentes y las referencias cruzan el enlace.

El diseño necesita solo un viaje de ida y vuelta, por lo que la latencia apenas importa, y funciona correctamente incluso cuando los archivos son bastante diferentes. Tridgell anunció la herramienta el 19 de junio de 1996 como un reemplazo de rcp con este algoritmo de actualización remota, además de un entubado (pipelining) que solapa la comunicación con el cálculo.

Calcular el diff de forma remota: enviar sumas de verificación, no contenido

Las sumas de verificación rodantes permiten al emisor escanear cada desplazamiento de forma barata

Un solo viaje de ida y vuelta lo hace rápido incluso en enlaces de alta latencia

Sumas de verificación fuertes confirman las coincidencias débiles antes de que se muevan los datos

Enviar solo los bloques no coincidentes ahorra ancho de banda en proporción a la similitud

Cuando el ancho de banda es escaso y los archivos se solapan, enviar evidencia, no datos: las sumas de verificación rodantes revelan lo que ya existe en el extremo remoto sin necesidad de tener ambos archivos en un mismo lugar.

rsync se convirtió en la herramienta estándar de Unix para copias de seguridad, réplicas y distribución de software, y su diff por sumas de verificación de bloques sigue siendo el núcleo de la herramienta hoy. El informe de 1996 sigue siendo la referencia citada para el algoritmo, y el diseño de un solo viaje de ida y vuelta influyó en sistemas de sincronización posteriores.

CONSULTA LAS PRUEBAS

Las fuentes

  1. The rsync algorithm (TR-CS-96-05) Australian National University · openresearch-repository.anu.edu.au
  2. First release of rsync - rcp replacement (announcement) LWN.net archive · static.lwn.net ·