在数据传输的时候,我们希望实现以下目标:
1. 使用多线程传输,加速下载速度
2. 数据在传输过程中,进行流式md5计算,避免在传输完毕之后校验大文件
3. 支持断点续传
4. 支持http协议和ftp协议
5. 代码尽可能的简单,利于维护

实现目标
1. 使用多线程传输,加速下载速度
2. 数据在传输过程中,进行流式md5计算,避免在传输完毕之后校验大文件
3. 支持断点续传
4. 支持http协议和ftp协议
5. 代码尽可能的简单,利于维护

系统依赖
1. perl,版本>=5.8.5
2. linux or windows

目前实现的功能
支持FTP和HTTP下载
支持断点续传(HTTP and FTP)
多线程下载加速(线程数目可以任意指定)
支持限速
 下载的同时进行流式的md5计算,下载完毕即可生成整个文件的md5(可以使用参数指定是否需要计算md5)
命令行参数选项类似于wget
跨平台(windows && linux)
使用示例
./lwget -v 输出帮助信息

命令行参数解释
 -d|--debug : 输出debug信息,比如FTP或者HTTP的连接信息
 -c|--continue: 是否需要续传
 -b|--block-size : 指定数据分块大小,默认为3M,测试得出性价比较高
 -s|--limit-rate: 最大速度,默认为25M/s
 -o|--output-file : 下载到本地的文件命名,不指定默认采用源文件名
 -n|--thread-num:下载线程数目,默认为4,建议保持在16以下
 -m|--md5 : 指定是否计算文件md5,-m表示计算md5,且md5文件的命名为输出文件.md5;-m foo.md5 则指定md5文件名称为foo.md5
 -q|--quiet : 屏幕不打印信息,类似于wget -q参数
 -h|--help : 输出帮助信息
 -v|-- version : 打印版本信息

使用范例
性能测试
情景一

情景二

说明:
1. 采用HTTP协议下载对上下游的消耗更少
2. FTP协议下载时,多线程(10个线程以上),大文件(10G左右)会对上游造成较大的压力(cpu_idle降到50%),对下游无特别影响
3. 如果不计算md5,对下游的压力会变的更小
4. 在高速网络中,性能不如wget,wget可以下载到100m/s,而lwget只能达到80m/s的速度,且系统的负载要比使用wget高
5. 限速在20M/s以下的时候,和wget的性能比较接近.
优缺点
优点
 在低速网络中,下载速度很快(很容易的维持在20m/s)
 边下载边计算md5,避免了在文件下载完之后计算md5耗时耗资源(11G的文件做md5校验耗时在5分钟左右,使用lwget可以免去这个时间和消耗)
 lwget代码简洁(只有19K),易于维护
 很方便的支持续传(FTP 和 HTTP)
 可以在windows下直接使用
缺点
 在高速下载的时候,性能不如wget

 不支持整个目录下载

【本文首发于:百度运维空间】http://hi.baidu.com/ops_bd/blog/item/a73b9e2bad1bf1ff8b1399ac.html
【关注百度技术沙龙】

转载于:https://blog.51cto.com/baidutech/748333

基于流式的md5计算-多线程下载工具Lwget介绍相关推荐

  1. 2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《数据可视化:构建实时动态运营数据分析大屏》篇...

    实验背景介绍 了解更多2017云栖大会·杭州峰会 TechInsight & Workshop. 本手册为云栖大会Workshop之<在线用户行为分析:基于流式计算的数据处理及应用> ...

  2. 大数据workshop:《在线用户行为分析:基于流式计算的数据处理及应用》之《实时数据分析:海量日志数据多维透视》篇...

    实验背景介绍 了解更多2017云栖大会·成都峰会 TechInsight & Workshop. 本手册为云栖大会Workshop之<在线用户行为分析:基于流式计算的数据处理及应用> ...

  3. 2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《数据可视化:构建实时动态运营数据分析大屏》篇

    点击有惊喜 实验背景介绍 了解更多2017云栖大会·杭州峰会 TechInsight & Workshop. 本手册为云栖大会Workshop之<在线用户行为分析:基于流式计算的数据处理 ...

  4. 基于流式输入输出 使用Java借助GSON库 实现对大型asc文件的读入解析 并输出为JSON文件

    基于流式输入输出 使用Java借助GSON库 实现对大型asc文件的读入解析 并输出为JSON文件 致谢 1 为什么要使用流式输入输出(使用情景) 2 目标.主要思路及相关方法 2.1 目标 2.2 ...

  5. 竖流式沉淀池三角堰计算_竖流式沉淀池设计计算

    竖流式沉淀池设计计算 池中废水竖向流动的沉淀池. 池体平面图形为圆形或方形, 水由设在 池中心的进水管自上而下进入池内(管中流速应小于 30mm/s ) ,管 下设伞形挡板使废水在池中均匀分布后沿整个 ...

  6. 辅流式沉淀池固体负荷计算方法_辐流式沉淀池设计计算

    普通辐流式沉淀池设计计算(中心进水周边出水)1.每座池表面积A1(m^2) Qmax=2450 n=2q0=2 A1=Qmax/(n*q0)=612.5 其中: Qmax--最大设计流量(m^3/h) ...

  7. 【Linux】多线程下载工具axel的安装和使用

    多线程下载工具axel的安装和使用 Axel的安装 Axel命令及参数说明 下载单个文件 用不同的名称保存文件 限制下载速度 限制连接数 恢复未完成的下载 不显示文件下载进度 替换进度条 常见用法 A ...

  8. Java之多线程下载工具类

    1.多线程下载工具类 import java.net.URL; import java.io.InputStream; import java.io.RandomAccessFile; import ...

  9. Ubuntu 环境中多线程下载工具Axel的安装与使用

    今天用Ubuntu系统下载一个文件的时候,对方服务器的速度非常的慢,并且速度会越来越慢.一般下载到10%的时候,速度就会几乎为零. 于是我尝试找找类似迅雷的下载工具软件,发现迅雷并没有提供Linux版 ...

最新文章

  1. 「Mysql数据库」MySQL数据库开发的 36 条军规!
  2. 噪声dba是什么单位_在职DBA : 工作多年为什么还是选择报读工商管理博士
  3. 摄影技巧的种类之一             ——街拍技巧
  4. 谈均值、方差、标准差、协方差的概念及意义
  5. 专访蒋彪:JavaEE是企业级开发首选
  6. 使用Event Bus模式解耦Android App组件间通信
  7. Android之Input子系统事件分发流程
  8. shop--6.店铺注册--店铺注册之Service层的实现
  9. Spring IOC 容器源码分析 - 循环依赖的解决办法 1
  10. Linq的Distinct太不给力了
  11. JavaScript的特效
  12. aspen怎么做灵敏度分析_灵敏度分析_aspen
  13. 西门子定位器6DR5010-0NN00-0AA0
  14. 中国海外文物拍卖天价
  15. android开发代码实现对Apk签名,如何对apk进行签名
  16. 【软件测试基础知识】SDK是什么?
  17. 中文 NLP(7) -- CTB语义组块说明
  18. 【LittleVGL】stm32f412-discovery探索板-ft6x06驱动问题
  19. 网络营销信息传递的基本要素
  20. 我的一个项目:项目可行性分析报告

热门文章

  1. linux的veth导致网络不通,linux的veth对网桥通信实验
  2. Java项目:在线商城系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
  3. mysql四维数组_MySQL如何实现数组功能
  4. 《深入理解计算机系统》第十章——系统级I/0
  5. fsum函数测试以及分析
  6. ios app内嵌入http服务器
  7. java 套接字关联的通道_Java 通道教程 – NIO 2.0
  8. .net里鼠标选中的text数据怎么获取_Python数据科学实践 | 爬虫1
  9. python二分法求解_Python使用二分法求平方根的简单示例
  10. js 获取当前时间 随记