增量传输
把仓库推送到另一台机器两次。第一次传输全部内容,第二次只传输变更部分。同一条命令,无需额外参数,无需手动记录。而且你不必凭信念接受这一点,因为推送输出会精确打印传输了多少数据。
观看教程
数据块,而非字节流
首次推送后,CLI 在两台机器上各保留一份相同的不可变基础镜像。下次推送时,只需与该基础镜像比对数据块差异,只发送不同的部分。
第一步:基线推送
rdc repo push --name my-app --machine <machine-name> --to <target-machine> 将 repository 推送到第二台机器。第一次推送会传输完整镜像,输出结果显示:传输了 2 GB,标记为 (full)。两端均保留了一份 delta 基础镜像。
输出说得很清楚:2.0 GB transferred in 44.4s (full)。整个镜像完成传输,两端各保留了一份相同的增量基础。
第二步:修改少量数据
rdc term connect --machine <machine-name> --repository my-app --command 'dd if=/dev/urandom of=delta-test.bin bs=1M count=50 status=none && ls -lh delta-test.bin' 向 repository 中写入少量新数据。
第三步:推送差异
rdc repo push --name my-app --machine <machine-name> --to <target-machine> 用相同命令再次推送:输出显示,相对于共享基础镜像,在 2 GB 的镜像中约传输了 50 MB 的 delta 内容。只有发生变化的块被传输了。
同一条命令,输出截然不同:50.8 MB transferred in 5.7s (delta vs base ..., image 2.0 GB)。变更了约五十兆字节,传输的也大约是五十兆字节,而整个镜像有两 GB。
第四步:同步完成,仅需数秒
rdc repo list --machine <target-machine> 目标机器现已保有更新后的 repository,同步成本仅为 delta 的大小。
两台机器持有相同的仓库,刷新代价只是变更量,而非数据总量。按小时频率进行机器间备份,不再昂贵。
需要精确控制?
--delta-base <guid>可指定比对基础,--strategy可选择数据块差异算法。默认情况下两者都会自动确定。
下一篇:存储管理。