使用HTTP字节范围标头加速下载

时间:2010-11-06 15:38:24

标签: ruby http download performance

有没有人有过在多个并行请求中使用HTTP字节范围来加速下载的经验?

我有一个应用程序,需要从Web服务(1MB +)下载相当大的图像,然后将修改后的文件(调整大小和裁剪)发送到浏览器。存在许多这些图像,因此缓存可能无效 - 即缓存可能是空的。在这种情况下,我们会在等待图像下载时遇到相当大的延迟时间,500 m / s +,这是我们应用程序总响应时间的60%以上。

我想知道我是否可以通过使用一组并行HTTP范围请求来加速这些图像的下载,例如:每个线程下载100kb的数据,并将响应连接回一个完整的文件。

那里有人有这种经历吗?额外下载的开销会否定速度增加,或者这实际上是否有效?该应用程序是用ruby编写的,但任何语言的经验/示例都会有所帮助。

有关设置的一些细节:

  • 该服务没有带宽或连接限制(由我公司拥有)
  • 很难预先生成所有裁剪和调整大小的图像,有数百万的潜在排列很多
  • 很难将应用程序托管在与图像磁盘盒相同的硬件上(政治!)

由于

3 个答案:

答案 0 :(得分:1)

我已经为你从中提取图像的地方编写了后端和服务。每个网站都不同,所以基于我所做的细节可能不适用于你想要做的事情。

这是我的想法:

  • 如果您与公司签订了服务协议,那么您正在提取图像(这应该是因为您需要相当高的带宽),然后预处理其图像目录并将缩略图存储在本地,作为数据库blob或文件磁盘上有一个包含文件路径的数据库。
  • 该服务是否已将图像作为缩略图提供?他们不会向某人的浏览器发送全尺寸图像......除非他们疯狂或虐待狂,而且他们的用户都是疯狂和自虐。我们将图像预处理为三个或四个不同的缩略图大小,因此提供您想要做的事情本来是微不足道的。
  • 如果您的要求是他们所期望的,那么他们应该拥有API或至少一些资源(程序员),他们可以帮助您以最快的方式访问图像。他们实际上应该有一个专门的主机用于此目的。

作为一名摄影师,我还需要提及的是,您所做的事情可能存在版权和/或服务条款问题,因此请确保您通过咨询律师以及您所在的网站获得优惠。访问。不要认为一切都好,知道它。版权法不符合一般公众对版权的概念,因此预先聘请律师可能非常有教育意义,并且让您感觉良好。如果你已经和一个人谈过话,那么你就知道我在说什么。

答案 1 :(得分:1)

我通过谷歌搜索发现你的帖子,看看是否有人已经写了一个wget的并行模拟来做到这一点。这绝对是可能的,并且对于相对高延迟的链接上的非常大的文件会有所帮助:我已经通过多个并行TCP连接获得了> 10倍的速度提升。

也就是说,既然您的组织同时运行应用程序和Web服务,我猜您的链接是高带宽和低延迟的,所以我怀疑这种方法对您没有帮助。

由于您正在传输大量小文件(按现代标准),我怀疑您实际上是通过连接设置而不是通过传输速度进行刻录。您可以通过加载一个充满微小图像的类似页面来测试它。在您的情况下,您可能想要串行而不是并行:查看您的HTTP客户端库是否具有使用持久HTTP连接的选项,以便three-way handshake每页只执行一次或更少,而不是每个图像一次。

如果您最终对TCP延迟感到狂热,那么cheat也可能像某些主要的Web服务那样。{/ p>

(我自己的问题涉及TCP性能频谱的另一端,其中一个很长的往返时间真的开始拖累我的带宽用于多TB文件传输,所以如果你打开一个并行的HTTP库,我很乐意听到它。我找到的唯一工具,叫做“puf”,按文件而不是字节范围进行并行化。如果上面没有帮助你,你真的需要一个并行传输工具,同样可以联系:I可能已经放弃并写下来了。)

答案 2 :(得分:0)

我猜想使用任何p2p网络都没用,因为有更多的排列然后经常使用的文件。

下载并行的几个文件部分只能在慢速网络中进行改进(慢于4-10Mbps)。

要获得使用并行下载的任何改进,您需要确保有足够的服务器功率。从你当前的问题(等待超过500毫秒的连接)我假设你已经有服务器的问题:

  • 你应该添加/改进负载平衡,
  • 您应该考虑更改服务器软件以获得更高性能的内容

如果500ms是总响应时间的60%那么你的服务器就会超载,如果你认为它们不是你应该在连接/服务器性能方面寻找瓶颈。