连接NY和AMS的许多链路通常是饱和的。 这意味着,如果与我们的连接可以提供相比,对它们进行传输(例如,以1MB / s移动300GB)将需要一个年龄。
我遇到过去的问题,就像3年前,当我真的是编程和Linux的新手时,我得出结论,我将发布在这篇文章的底部。 但是,它很脏,我不喜欢它。 脚本不是现在的样子,因为它是为了一个非常具体的环境而写的,但它给了你这个想法。
我的问题是,你知道有什么更好的替代方法来快速传输文件吗?
#!/bin/sh upto="$1" filepath="$2" remotepath="$3" if [ ! -f ${filepath} ] then exit 0 fi password=$(/all/script/password 10) filesize=$(du -b ${2} | sed 's/\([0-9]*\)\(.*\)/\1/') if [ $filesize -gt 5368709120 ]; then parts="80" elif [ $filesize -gt 2147483648 ]; then parts="50" elif [ $filesize -gt 1310720 ]; then parts="20" else parts="2" fi splitsize=$(($filesize / $parts)) split -b "$splitsize" -a 2 "$2" /all/tmp/cup/${password}_ #UPLOAD declare -a pwait for tmpfile in /all/tmp/cup/${password}_* do scp ${tmpfile} root@${upto}.domain.com:/all/tmp/cup/ & array_lenght=${#pwait[@]} pwait[${array_lenght}]=$! done #ATTENDERE for prid in ${pwait[@]} do wait $prid done #UNISCI FILE REMOTO ssh root@${upto}.domain.com "cat /all/tmp/cup/${password}_* > ${remotepath} && wait && rm -f /all/tmp/cup/${password}_*" #RIMUOVI ROBA DI TROPPO LA #eval ssh root@${upto}.domain.com rm -f /all/tmp/cup/${password}* #REMOVE HERE rm -f /all/tmp/cup/${password}_* exit 0
假设你的networking没有饱和(与你在这个问题中说的相反),你应该调整你的链接来处理像Andrew这样的(相对)高带宽延迟产品 。 (在那个链接引用的文章包括一些信息,在什么时候调整,为什么。)
如果实际上你的networking链路已经饱和(移动的数据量最大),唯一的解决办法就是增加更多的带宽(两个站点之间有更多的光纤中继线,支付另一个运营商的转接费来卸载一些高峰期的stream量,或者如果您使用支持更高CIR的“专用”链路/向环路中添加更多电路)。
你怎么能区分这个区别?
那么,如果开始更多的stream可以让你的速度更快,你还没有达到你的链接。 从美国到欧洲的往返时间相对较长(相比于本地networking上的往返时间),您可能会受到影响。
(这里有一个收益递减点,因为更多TCP连接的开销最终会导致其他瓶颈出现。)
如果添加更多的数据stream不会导致速度的净增加(两个数据stream以一个净速度的一半运行),则您的链路已经饱和,您需要增加带宽以提高性能。
你应该尽量减less被pipe道上的数据,如果合适的话,使用rsync或者类似的协议(rsync最适合于小规模的变化集合到大量的数据集合)。
永远不要低估FedEx过夜包裹带有几个硬盘的情况。 特别是对于初始同步。
我会检查TCP / IP优化选项,例如窗口缩放,重传,路由表以及icmp。 如果这一切都工作正常,并且操作系统上的networking堆栈不是Windows XP或Centos 5或比Vista更早的任何东西,那么您应该可以确定multithreadingnetworking连接不是必需的。 或者,它不会超过20%的提高,所以实际上,它只是对文件系统进行碎片整理,甚至更慢。