Linux大文件传输(转)
复制文件
- 压缩数据
- 发送到另外一台机器上
- 数据解压缩
- 校验正确性
使用ZIP+SCP
gzip -c /home/yankay/data | ssh yankay01 "gunzip -c - > /home/yankay/data"
这条命令是将/home/yankay/data经过GZIP压缩,通过ssh传输到yankay01的机器上。
scp -C -c blowfish /home/yankay/data yankay01:/home/yankay/data
这样运行效果是相同的,不通之处在于我使用了blowfish算法作为Scp的密匙算法,使用这个算法可以比默认的情况快很多。单单对与scp,使用了blowfish 吞吐量是62MB/s,不使用只有46MB/s。
性能分析
我们先定义几个变量
- 压缩工具的压缩比是 CompressRadio
- 压缩工具的压缩吞吐是CompressSpeed MB/s
- 网络传输的吞吐是 NetSpeed MB/s
由于使用了管道,管道的性能取决于管道中最慢的部分的性能,所以整体的性能是:
speed=min(NetSpeed/CompressRadio,CompressSpeed)
当压缩吞吐较网络传输慢的时候,压缩是瓶颈;但网络较慢的时候,网络传输/吞吐 是瓶颈。
根据现有的测试数据(纯文本),可以得到表格:
| 压缩比 | 吞吐量 | 千兆网卡(100MB/s)吞吐量 | 千兆网卡吞吐量,基于ssh(62MB/s) | 百兆网卡(10MB/s)吞吐量 | |
| ZLIB | 35.80% | 9.6 | 9.6 | 9.6 | 9.6 |
| LZO | 54.40% | 101.7 | 101.7 | 101.7 | 18.38235294 |
| LIBLZF | 54.60% | 134.3 | 134.3 | 113.5531136 | 18.31501832 |
| QUICKLZ | 54.90% | 183.4 | 182.1493625 | 112.9326047 | 18.21493625 |
| FASTLZ | 56.20% | 134.4 | 134.4 | 110.3202847 | 17.79359431 |
| SNAPPY | 59.80% | 189 | 167.2240803 | 103.6789298 | 16.72240803 |
| NONE | 100% | 300 | 100 | 62 | 10 |
可以看出来。在千兆网卡下,使用QuickLZ作为压缩算法,可以达到最高的性能。如果使用SSH作为数据传输通道,则远远没有达到网卡可以达到的最佳性能。在百兆网卡的情况下,各个算法相近。对比下来QuickLZ是有优势的。
对于不同的数据和不同的机器,可以得出不同的最佳压缩算法。但有一点是肯定的,尽量把瓶颈压在网络上。对于较慢的网络环境,高压缩比的算法会比较有优势;相反对于较快的网络环境,低压缩比的算法会更好。
结论
根据上面的分析结果,我们不能是用SSH作为网络传输通道,可以使用NC这个基本网络工具,提高性能。同时使用qpress作为压缩算法。
scp /usr/bin/qpress yankay01:/usr/bin/qpress
ssh yankay01 "nc -l 12345 | qpress -dio > /home/yankay/data" &
qpress -o /home/yankay/data |nc yankay01 12345
第一行是将gpress安装到远程机器上,第二行在远程机器上使用nc监听一个端口,第三行压缩并传送数据。
执行上面的命令需要2.8s。平均吞吐量为402MB/s,比使用Gzip+Scp快了16倍!!
根据上文的公式,和自己的数据,可以绘出上面的表格,就可以选择出最适合的压缩算法和传输方式。达到满意的效果。如果是一个长期运行的脚本的话,这么做是值得的。
Linux大文件传输(转)的更多相关文章
- linux大文件传输
Mysql复制,初始化服务器,备份/还原等大文件复制是很常见的任务,他们完成的实际任务可以概括为: 1,(可选)压缩文件 2,发送文件 3,解压文件 4,验证文件一致性 下面介绍几种方法: 1,最简单 ...
- WCF大文件传输服务
由于项目需要,自己写一个基于WCF的大文件传输服务雏形.觉得有一定的参考价值,因此放在网上分享. 目前版本为v1.1特点如下: 1.文件传输端口为18650 2.上传和下载文件 3.支持获取文件传输状 ...
- 转:wcf大文件传输解决之道(2)
此篇文章主要是基于http协议应用于大文件传输中的应用,现在我们先解析下wcf中编码器的定义,编码器实现了类的编码,并负责将Message内存中消息转变为网络发送的字节流或者字节缓冲区(对于发送方而言 ...
- 转:wcf大文件传输解决之道(1)
首先声明,文章思路源于MSDN中徐长龙老师的课程整理,加上自己的一些心得体会,先总结如下: 在应对与大文件传输的情况下,因为wcf默认采用的是缓存加载对象,也就是说将文件包一次性接受至缓存中,然后生成 ...
- Linux大文件分割splite
/********************************************************************** * Linux大文件分割splite * 说明: * 编 ...
- WCF大文件传输【转】
http://www.cnblogs.com/happygx/archive/2013/10/29/3393973.html WCF大文件传输 WCF传输文件的时候可以设置每次文件的传输大小,如果是小 ...
- 利用Socket进行大文件传输
分类: WINDOWS 最近接触到利用socket进行大文件传输的技术,有些心得,与大家分享.首先看看这个过程是怎么进行的(如下图): 所以,我们需要三个socket在窗体加载的时候初始化: ...
- AetherUpload大文件传输
AetherUpload-Laravel是laravel框架下的一个大文件传输组件 github:https://github.com/peinhu/AetherUpload-Laravel 文件传输 ...
- Linux命令-文件传输
Linux命令-文件传输 Linux lprm命令 Linux lprm命令用于将一个工作由打印机贮列中移除 尚未完成的打印机工作会被放在打印机贮列之中,这个命令可用来将常未送到打印机的工作取消.由于 ...
随机推荐
- XML的解析方式(DOM、SAX、StAX)
(新) XML的解析方式(DOM.SAX.StAX) 博客分类: XML 一般来说,解析XML文件存在着两种方式,一种是event-based API,比如说象SAX,XNI. 第二种是tree ...
- linux之使用cron,logrotate管理日志文件
1) logrotate配置 logrotate 程序是一个日志文件管理工具.用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”. 我们可以根据日志文件的大小,也可以根据其天数来 ...
- hdu3342 拓扑序
题意:一个QQ群里面有一群大神,他们互相帮助解决问题,然后互相膜拜,于是有些人就称别人是他师父,现在给出很多师徒关系,问是否有矛盾 拓扑序,按师徒关系建边直接拓扑序就行了. #include<s ...
- Linux驱动设计—— 内核模块(一)
Linux内核理论基础 组成Linux内核的5个子系统:进程调度(SCHED)/内存管理(MM)/虚拟文件系统(VFS)/网络接口(NET)/进程间通信(IPC). 进程调度(SCHED) 在设备驱动 ...
- SqlAlchemy初探
SqlAlchemy是Python下的一个成熟的ORM框架.下面我们对他的使用做一个简略的介绍. 0.安装 如果有pip,使用pip安装,更便捷.pip install sqlalchemy 也可以下 ...
- Android-Universal-Image-Loader开源项目的简要说明及使用实例
本文转载于:http://www.cnblogs.com/hsx514/p/3460179.html 一.核心类的说明及相关参数的说明 ImageLoaderConfiguration 1.作用:为I ...
- faster rcnn test demo ---repaired for video input and save the image, label, score et al. into .mat format
faster rcnn test demo ---repaired for video input and save the image, label, score et al. into .mat ...
- unity3d用鼠标拖动物体的一段代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 这是一段拖动物体的代码,比较简洁明了,对了解uni ...
- Nuget 摘录
1 , Creating and Publishing a Package https://docs.nuget.org/create/creating-and-publishing-a-pa ...
- MySQL查询本周、上周、本月、上个月份数据的sql代码
查询当前这周的数据 SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) ...