Rsync原理的简单学习


前言

工作这么多年, 感觉对自己帮助最大的是rsync.
用了很多rsync的脚本, 甚至因为这个脚本授权了两个专利.
但是昨天晚上在跟高手聊天时发现 自己对rsync 其实不了解.
对他底层的一些算法和实现,其实都是不清不楚的.
说实话感触挺深的. 以后自己用东西,还是必须深入学习的.

网上资料的学习

假定在名为 α 和 β 的两台计算机之间同步相似的文件 A 与 B,其中 α 对文件A拥有访问权,
β 对文件 B 拥有访问权。并且假定主机 α 与 β 之间的网络带宽很小。
那么 Rsync 算法将通过下面的五个步骤来完成: β 将文件 B 分割成一组不重叠的固定大小为 S 字节的数据块。最后一块可能会比 S 小。
β 对每一个分割好的数据块执行两种校验:一种是32位的滚动弱校验,另一种是128位的 MD4 强校验。
β 将这些校验结果发给 α。
α 通过搜索文件 A 的所有大小为 S 的数据块(偏移量可以任选,不一定非要是 S 的倍数),
来寻找与文件B 的某一块有着相同的弱校验码和强校验码的数据块。
这项工作可以借助滚动校验的特性很快完成。
α 发给 β 一串指令来生成文件 A 在 β 上的备份。
这里的每一条指令要么是对文件 B 经拥有某一个数据块而不须重传的证明,要么是一个数据块,
这个数据块肯定是没有与文件 B 的任何一个数据块匹配上的。
From https://blog.csdn.net/JineD/article/details/111871170

一些简单理解

rsync的检查主要是通过 循环区块的处理.
并且感觉 他们并不是完全按照区块进行md4或者是md5的检查. 或者仅是32字节做一下简单的 checksum 能够极大额减少文件需要传输的字节.
昨天刚好学习了下split 和 cat 进行文件的切分和合并.
联想到之前BT下载时都是分块下载. 其实感觉道理应该都是相通的.
感觉可以通过一个实验的方式进行处理. 下面就是实验的时间.

实验的思路

公司内上传文件->阿里云的机器
通过 avz 参数查看文件上传时间 以及一些加速特性.
通过cat的方式进行一些文件的变更, 验证他的速度. cat 使用两种模式 尾部添加文件和头部添加文件.
验证rsync是否可以智能化的继续拧处理. 以及验证压缩文件和非压缩文件的一些处理机制.

实验结果分析

1. rsync 是分块传输. 大文件修改一部分时效率非常高,加速比超过30 很正常.
2. rsync 进行计算的原理很只能.不管是文件头新增和文件尾部新增都可以准确识别.
3. rsync 的传输可以进行压缩, 并且压缩比非常可观. 在地网络带宽情况下的性能很好.
4. rsync 的一致性检查应该是 循环模式进行check或者是md4. 不适用更高级别的checksum,避免算法消耗更多的CPU

测试过程-原始文件测试-tar包

262M 8月  16 2021 vmware_exporter.tar
262M的文件 上传完 24秒. 加速比是 2.71 time rsync -avz vmware_exporter.tar root@xx.xx.xx.xx:/
Warning: Permanently added 'xx.xx.xx.xx' (ED25519) to the list of known hosts.
sending incremental file list
vmware_exporter.tar sent 100,954,996 bytes received 35 bytes 4,120,613.51 bytes/sec
total size is 273,871,872 speedup is 2.71 real 0m24.456s

测试过程-原始文件测试-tar包-重传

不做任何修改, 直接进行文件传输. 发现不到一秒钟就可以传输完成
提示仅接收了12个字节. 怀疑应该是整个文件的 checksum. 判断完全一致就没有继续传输.
所以效率很快. time rsync -avz vmware_exporter.tar root@xx.xx.xx.xx:/
Warning: Permanently added 'xx.xx.xx.xx' (ED25519) to the list of known hosts.
sending incremental file list sent 53 bytes received 12 bytes 130.00 bytes/sec
total size is 273,871,872 speedup is 4,213,413.42 real 0m0.786s

测试过程-尾端修改文件-tar包

time cat vmware_exporter.tar zhaobsh.tar.gz >/root/vmware_exporter.tar
将文件进行一下融合增加
273M /root/vmware_exporter.tar
大概增加了11M的大小
再次进行传输, 大约7秒钟完成. 发送字节是 不到10m. 接收了 110k.
加速比是30. 感觉他做的压缩效率比tar.gz 还要高.
因为 zhaobsh.tar.gz的大小为:
11,893,322 12月 5 23:09 zhaobsh.tar.gz time rsync -avz /root/vmware_exporter.tar root@xx.xx.xx.xx:/
Warning: Permanently added 'xx.xx.xx.xx' (ED25519) to the list of known hosts.
sending incremental file list
vmware_exporter.tar sent 9,372,579 bytes received 115,924 bytes 1,265,133.73 bytes/sec
total size is 285,765,194 speedup is 30.12 real 0m7.463s

测试过程-头部修改文件-tar包

time cat  zhaobsh.tar.gz vmware_exporter.tar  >/home/vmware_exporter.tar
将文件进行一下头部增加.
文件大小类似,发现结果为: 7秒钟左右完成.
加速比也是一样的. 上传的文件大小也是类似的. time rsync -avz /home/vmware_exporter.tar root@xx.xx.xx.xx:/home/
Warning: Permanently added 'xx.xx.xx.xx' (ED25519) to the list of known hosts.
sending incremental file list
vmware_exporter.tar sent 9,372,112 bytes received 115,924 bytes 1,265,071.47 bytes/sec
total size is 285,765,194 speedup is 30.12 real 0m7.534s

tar.gz包的加速比验证

加速比为 1
原始文件的大小为: 110400785 /root/vmware_exporter.tar.gz
110,400,785 发送比实际的total size 要下, 说明效率还是很高的. time rsync -avz /root/vmware_exporter.tar.gz root@xx.xx.xx.xx:/home/
Warning: Permanently added 'xx.xx.xx.xx' (ED25519) to the list of known hosts.
sending incremental file list
vmware_exporter.tar.gz sent 109,955,873 bytes received 35 bytes 5,638,764.51 bytes/sec
total size is 110,400,785 speedup is 1.00 real 0m19.259s

Rsync原理的学习与总结的更多相关文章

  1. Jquery 实现原理深入学习(3)

    前言 1.总体结构 √ 2.构建函数 √ 3.each功能函数实现 √ 4.map功能函数实现 √ 5.sizzle初步学习 6.attr功能函数实现 7.toggleClass功能函数实现(好伤) ...

  2. Windows原理深入学习系列-信任等级检查

    这是[信安成长计划]的第 23 篇文章 0x00 目录 0x01 介绍 0x02 逆向分析 Win10_x64_20H2 0x03 WinDBG 0x04 参考文章 在之前的时候,一直以为 SACL ...

  3. Windows原理深入学习系列-强制完整性检查

    这是[信安成长计划]的第 24 篇文章 0x00 目录 0x01 介绍 0x02 逆向分析 Win10_x64_20H2 0x03 总结 0x04 参考文章 最近因为一些事情,拖更了三个周,大家见谅啊 ...

  4. sersync+rsync原理及部署

    标签:sersync+rsync部署文档 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liubao0312.blog.51ct ...

  5. DPDK Mempool 库原理(学习笔记)

    1 前置知识点学习(了解) 从CPU到实际的存储节点,依据层级划分:Channel > DIMM > Rank > Chip > Bank > Row /Column 1 ...

  6. DPDK 无锁队列Ring Library原理(学习笔记)

    参考自DPDK官方文档原文:http://doc.dpdk.org/guides-20.02/prog_guide/ring_lib.html 针对自己的理解做了一些辅助解释. 1 前置知识 1.1 ...

  7. Rsync原理介绍及配置应用

    1.前言 基于LAN或WAN的网络应用之间进行数据传输或者同步非常普遍,比如远程数据镜像.备份.复制.同步,数据下载.上传.共享等等.对此,最简单.直接的做法是对数据进行完全复制.然而,数据在网络上来 ...

  8. rsync同步工具学习笔记

    rsync同步工具 1.rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于unix/linux/windows等多种操作 ...

  9. 二级管工作原理(PN结原理)学习

    0.小叙闲言 前面已经写了两篇介绍放大器应用和MOSFET作驱动的文章:常规放大电路和差分放大电路和MOSFET使用与H桥驱动问题.但是对它们的工作原理并没有进一步研究一下,今天写下这篇文章,主要是介 ...

  10. Stanford公开课《编译原理》学习笔记(1~4课)

    目录 一. 编译的基本流程 二. Lexical Analysis(词法分析阶段) 2.1 Lexical Specification(分词原则) 2.2 Finite Automata (典型分词算 ...

随机推荐

  1. <Python全景系列-1> Hello World,1分钟配置好你的python环境

    <从此开始:1分钟配置好你的python环境> 欢迎来到我们的系列博客<Python360全景>!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题, ...

  2. Flutter Getx 状态管理 --- 响应式状态管理器

    状态管理 Get 并不是比任何其他状态管理器更好或更差,而是说你应该分析这些要点以及下面的要点来选择只用 Get,还是与其他状态管理器结合使用. Get不是其他状态管理器的敌人,因为Get是一个微框架 ...

  3. 记录:websoket切换页面后重复执行问题

    问题描述 因为项目需求,实时播放执行信息.而项目的websoket只在这个页面,会有切换情况.从websoket连接得到执行列表数据.断开重连后会传递新连接数据+旧连接数据.也就是说,如果第一次进入页 ...

  4. Python从零到壹丨带你了解图像直方图理论知识和绘制实现

    摘要:本文将从OpenCV和Matplotlib两个方面介绍如何绘制直方图,这将为图像处理像素对比提供有效支撑. 本文分享自华为云社区<[Python从零到壹] 五十.图像增强及运算篇之图像直方 ...

  5. 如何只用一个小时定制一个行业AI 模型?

    摘要:华为云通过ModelArts Pro提供更多的行业套件和工作流可以供用户直接使用,进一步降低AI行业落地难度,让传统企业客户无需掌握算法知识亦可实现自身业务与AI技术的融合. 去年,在华为开发者 ...

  6. 送你5个MindSpore算子使用经验

    摘要:MindSpore给大家提供了很多算子进行使用,今天给大家简单介绍下常用的一些算子使用时需要注意的内容. 本文分享自华为云社区<[MindSpore易点通]算子使用经验总结>,作者: ...

  7. 认识一下MRS里的“中间人”Alluxio

    摘要:Alluxio在mrs的数据处理生态中处于计算和存储之间,为上层spark.presto.mapredue.hive计算框架提供了数据抽象层,计算框架可以通过统一的客户端api和全局命名空间访问 ...

  8. PPT 常规设置

    高级设置 可以将撤销次数调大,最多 150次 默认拉到PPT中的图片是被压缩的,可以设置成不压缩(解压 PPT 可查看里面的图片大小) 字体嵌入 可将自动保存时间调短,默认保存目录我习惯先保存到桌面( ...

  9. python 搭建HTTP服务器

    WSGI(Web Server Gateway Interface,web服务器网关接口)主要规定了服务器端和应用程序之间的接口,即规定了请求的URL到后台处理函数之间的映射该如何实现.wsgiref ...

  10. 图解 Promise 实现原理(一)—— 基础实现

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/UNzYgpnKzmW6bAapYxnXRQ作者:孔垂亮 很多同学在学习 Promise 时,知 ...