首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在高延迟和高带宽链路上传输文件的最快方法是什么?

在高延迟和高带宽链路上传输文件的最快方法是什么?
EN

Stack Overflow用户
提问于 2016-06-24 13:21:33
回答 1查看 6.4K关注 0票数 6

我试图通过高延迟和高带宽链路传输文件。不幸的是,当我使用rsync时,我的传输速度只占用我可用带宽的一小部分。我的总传输时间比我预期的要长得多(即传输时间=字节/每秒可用带宽)!

在高延迟和高带宽链路上传输文件最快的way1是什么?

例如:

  • 延迟大于900 ms延迟(往返时间)
  • 带宽512 kbit/s

1即利用大部分可用带宽

EN

回答 1

Stack Overflow用户

发布于 2016-06-24 13:21:33

当在高延迟和高带宽情况下使用rsync时,您的每个连接传输速度将比可用带宽为slower1。对于给出的例子,您的预期传输速度将是56.25 KiB,或者小于可用带宽的10%。

一种解决方案是在并行rsync中运行N 进程。

代码语言:javascript
复制
#!/bin/bash

# tar up the files
tar -cvzf x.tar ${list_of_files}

# [optional]
# compute the md5sum
md5sum x.tar > x.tar.md5sum

# break the large tar file into N files (i.e. x.tar would become x.tar.1 ... x.tar.N)
# TODO

# start N `rsync` processes in parallel 
for ((i=1;i<=N;i++)); do rsync -avzh x.tar.${i} ${destination} & done

# wait for the transfers to finish
wait && echo "success" || echo "fail" && exit 1

# stitch the N files back together into x.tar
TODO

# [optional... but gives everyone a nice warm and fuzzy]
# copy the md5sum and verify your files (even though `rsync` already did so)
scp x.tar.md5sum ${destination}
ssh ${destination_machine} "cd ${path} && md5sum -c x.tar.md5sum && echo 'PASS (files verified with md5sum)' || echo 'FAIL (file verification failed md5sum)' && exit 1"
# done!

为什么在这个例子中你的传输速度慢?

一句话:带宽延迟积 (实际上有三个词)

这是一个高延迟和高带宽链路的例子。有些人可能会使用像rsync这样的工具来传输数据。如果运行一个rsync实例(或类似的实例,也使用TCP或类似TCP协议),则不会使用可用带宽。

放缓的原因与TCP (或类似TCP的协议)在发送更多数据之前需要ACK的往返性质有关。这个问题被正式称为带宽延迟积。每个连接速度都会受到延迟而不是带宽的限制。

具体到给出的例子,理论速度将是56.25 KiB或不到10%的可用带宽。

限制是每个连接。因此,仅使用一个rsync进行文件传输将无法充分利用您的带宽。

解决方案1:

使用不同的程序,它不使用类似TCP的协议,但仍然通过其他方式保证您的数据(快速google搜索类似于uftp,它通过UDP协议传输数据,而不是TCP)。不幸的是,到本文撰写之时,uftp还没有在许多发行版中重新发布。

解决方案2:

继续使用一个rsync并更改双方的TCP网络参数,但这需要专家知识,而我目前还没有这些知识。

解决方案3:

如本问题开头所述,并行运行多个rsync进程。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38014501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档