해결책
느린 링크로 파일을 복사하면 두 기계가 이미 공유하고 있는 모든 것을 낭비하게 된다. 압축은 2~4배 정도의 도움만 되고, 일반적인 diff 도구는 두 파일이 같은 기계에 있어야 하는데, 바로 그 점이 링크 때문에 불가능해진다.
Andrew Tridgell과 Paul Mackerras는 1996년 원격 diff로 이 문제를 해결했다. 수신 측은 자신의 파일을 블록으로 나누어 각 블록의 체크섬을 보내고, 송신 측은 한 번의 패스로 모든 바이트 위치에서 계산하기에 충분히 저렴한 롤링 체크섬을 사용하여 자신의 블록 중 어느 것이 임의의 오프셋에서 일치하는지 찾는다. 일치하지 않는 데이터와 참조만이 네트워크를 건너간다.
이 설계는 한 번의 왕복만 필요하므로 지연 시간이 거의 문제되지 않으며, 파일이 상당히 다르더라도 올바르게 작동한다. Tridgell은 1996년 6월 19일 이 원격 업데이트 알고리즘과 통신과 계산을 겹치는 파이프라이닝을 갖춘 rcp 대체 도구로 이 도구를 발표했다.
달성한 것
원격으로 diff를 계산한다: 콘텐츠가 아닌 체크섬을 보낸다
롤링 체크섬 덕분에 송신 측이 모든 오프셋을 저렴하게 스캔할 수 있다
한 번의 왕복으로 높은 지연 시간의 링크에서도 빠르다
강력한 체크섬이 데이터가 이동하기 전에 약한 일치를 확인한다
일치하지 않는 블록만 보내면 유사성에 비례하여 대역폭이 절약된다
대역폭이 부족하고 파일이 겹칠 때는 데이터가 아닌 증거를 보내라: 롤링 체크섬은 두 파일을 한곳에 둘 필요 없이 반대편에 이미 무엇이 존재하는지 드러낸다.
그 후
rsync는 백업, 미러링, 소프트웨어 배포를 위한 표준 Unix 도구가 되었으며, 그 블록 체크섬 diff는 오늘날에도 이 도구의 핵심으로 남아 있다. 1996년 보고서는 여전히 이 알고리즘에 대해 인용되는 참고 문헌이며, 한 번의 왕복 설계는 이후의 동기화 시스템에 영향을 주었다.
근거 확인하기
출처
- 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 ·