【问题标题】:Http multirange requests slowHttp多范围请求慢
【发布时间】:2015-12-29 14:40:49
【问题描述】:

我在服务器上有 8gb 文件,我想使用 http 多范围请求从该文件下载 1.5gb。我使用卷曲。

除第一个请求外,所有请求都均匀分布在文件上,包含 500mb 的大范围(总共有 161 个请求)。

我发现,第一个大范围请求的下载时间约为 40 秒,总时间约为 560 秒。这意味着,我下载 500mb 40 秒,下载 1gb 520 秒。因此,对于均匀分布的请求,我的速度减慢了 6 倍。我还注意到,当这种均匀分布的请求执行时,下载速率会下降约 6-8 倍。

我不明白,为什么会这样。每个请求中的范围都按偏移量增加排序,所以我不明白,为什么我们会出现这样的减速。你能解释一下,什么会导致这样的混乱?此外,如何提高此类请求集的性能?

如果需要,我可以提供一组请求和时间安排。

【问题讨论】:

    标签: curl httprequest http-range


    【解决方案1】:

    您没有给我们太多工作,但您可能需要检查/考虑以下几点:

    • 您实际上是在执行具有多个范围的单个请求,还是执行多个请求,每个请求具有单独的范围?

    • 您确定您的服务器(和脚本,如果是脚本)确实支持字节范围请求吗?

    • 您是从静态文件下载,还是从服务器动态生成的文件下载?如果是后者,请考虑每个请求意味着服务器可能需要重新生成完整文件,然后才能仅发送您感兴趣的部分。

    • 无论如何,在实际下载之前,每个请求都需要花费一点时间来建立(TCP 连接、SSL/TLS 握手(如果适用)、HTTP 请求)。如果您使用单独的 curl 调用或禁用 keep-alives,则尤其如此

    多范围请求的原因是什么?您确定下载整个文件(并可能在客户端进行一些后处理)不仅更快/更简单吗?

    【讨论】:

    • 1) 是的,每个请求都是具有多个范围的请求。 2)我使用最新的 apache 服务器。据我了解,它支持开箱即用的此类请求。 3)它是静态文件。服务器无法更改。 4)是的,我使用单独的 curl 调用进行测试。但正如我理解的那样,初始化的一些开销无法达到 6 倍的减速。我无法下载整个文件,因为它也适用于带宽较小的网络。在我的情况下,第一个请求(范围很大)以大约 13Mb/秒的速度执行,但其余请求的速度下降到 2Mb/秒。
    • 您能否更明确地说明不同的请求以及每个请求的范围?你说的是多个范围,但是你说的是多个请求......你能提供具体的调用示例(如果可能的话,包括一个下载的 URL)?
    • 是的,我有多个具有多个范围的请求。在这里,您可以找到运行一堆请求(来自 requests.txt)dropbox.com/s/25jbzwswak8o98f/test_set.zip?dl=0 的 python 脚本存档,并将每个请求的时间和内存写入标准输出。所以要重现,你可以从官方网站启动本地 apache 服务器,然后放一些文件(~2gb)到它。我还将请求减少到 2gb 范围,所以现在我尝试从 2gb 文件下载 1.5gb。
    猜你喜欢
    • 2011-01-18
    • 2023-03-08
    • 2015-02-04
    • 1970-01-01
    • 2012-01-07
    • 2016-08-03
    • 2012-08-02
    • 1970-01-01
    • 2012-03-07
    相关资源
    最近更新 更多