首页 > 解决方案 > 并行文件下载

问题描述

这是一个基本问题,但我希望有更多网络经验的人提供更全面的答案。

假设我在外部服务器上有 3 个文件,每个文件 1GB。要下载它们,我会这样做:

$ wget https://server.com/file1.mov

就并行执行这三个项目而言(例如,在三个单独的选项卡/外壳/线程中),或者串联执行,例如:

$  wget https://server.com/file1.mov \
&& wget https://server.com/file2.mov \
&& wget https://server.com/file3.mov \

在以下情况下:

  1. 我有一个非常快的本地下载连接,而服务器要慢得多(例如,假设服务器需要 15 秒来生成每个文件)。
  2. 我的本地下载连接很慢,而服务器的上传带宽要快得多。
  3. 两者相对来说是一样的。

对于第一种情况,我们显然希望使用并行下载,如果外部服务器上存在相当于固定开销成本的情况,但对于其他两种情况,为什么一个更好比另一个?

标签: performancenetworkingdownloadwgetbandwidth

解决方案


对于所有这三种情况,实际结果取决于许多限制因素。您已经列出了下载和上传带宽,但瓶颈也可能在磁盘 I/O、CPU 和 RAM 以及数据传输协议和其他数量上。

一般来说,分段文件传输是获取数据的优选方式,因为它减少了 TCP 拥塞控制(假设我们使用 TCP 协议)和异构环境的影响。正如这篇“在广域网上传输高带宽数据的应用技术”(Jason Lee、Dan Gunter、Brian Tierney)论文中所述:

“TCP 通过不断增加窗口大小来探测连接的可用带宽,直到数据包丢失,此时它将窗口减半并再次开始“加速”连接。带宽延迟乘积越高,这种上升所需的时间就越长,在此期间使用的可用带宽就越少。”</p>

“为了改善这种网络成为瓶颈的情况,可以使用并行流。该技术是通过将要传输的数据分成 N 个部分并使用单独的 TCP 连接传输每个部分来实现的。N 个并行流的效果是将单个流所经历的带宽延迟产品减少 N 倍,因为它们都共享单个流带宽 (u)。合理的 q (<0.001) 值的随机数据包丢失通常一次发生在一个流中,因此它们对总吞吐量的影响将减少 N 倍。当与拥塞链路上的连接竞争时,每个流并行流将不太可能因为丢包而被选中,

值得一提的是,拥塞算法在带宽分配中发挥着重要作用,但仍需要根据网络“类别”进行设置。宽带、卫星、3G、WiFi - 它们都具有由物理环境决定的特性,而 CWND 实施的性能不同。

要考虑的另一件事是拥塞网络中并行与并发数据传输的行为。从理论上讲,您传输的数据越多,阻塞网络和激活 ISP 端策略的机会就越大,这些策略将开始丢弃或调整连接。然而,即使在这种情况下,使用几个小的并行链接而不是一个大的连接交换数据的概率也更高。

同样,这是一个非常笼统的解释,连接吞吐量可能会因各种因素而显着变化。也可能会发现自己处于一种情况,即单个连接的性能与多线程相当,同时不需要额外的工作和代码来实现。


推荐阅读