ruby - 使用 HTTP 字节范围 header 加速下载

标签 ruby http download performance

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

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

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

有没有人有过这样的经历?额外下载的开销是否会抵消速度的提高,或者这种技术是否真的有效?该应用程序是用 ruby​​ 编写的,但任何语言的经验/示例都会有所帮助。

有关设置的一些细节:

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

谢谢

最佳答案

我通过谷歌搜索找到了您的帖子,看看是否有人已经编写了 wget 的并行模拟来执行此操作。这绝对是可能的,并且对通过相对高延迟链接的非常大的文件很有帮助:我已经通过多个并行 TCP 连接将速度提高了 10 倍以上。

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

由于您正在传输大量小文件(按照现代标准),我怀疑您实际上是被连接设置而不是传输速度所困扰。您可以通过加载充满小图像的类似页面来对此进行测试。在您的情况下,您可能希望串行而不是并行:查看您的 HTTP 客户端库是否有使用持久 HTTP 连接的选项,以便 three-way handshake每页仅完成一次或更少,而不是每张图像一次。

如果您最终对 TCP 延迟非常狂热,也可以 cheat ,正如某些主要网络服务所喜欢的那样。

(我自己的问题涉及 TCP 性能范围的另一端,较长的往返时间确实开始拖累我的多 TB 文件传输带宽,所以如果你打开一个并行 HTTP 库,我很想听听。我发现的唯一工具,称为“puf”,按文件而不是字节范围并行化。如果以上对您没有帮助并且您确实需要并行传输工具,请同样联系:我到时候可能已经放弃写了。)

关于ruby - 使用 HTTP 字节范围 header 加速下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4113760/

相关文章:

ruby - 如何在 Ruby 中表达无穷大?

ruby - Sinatra 应用程序未部署到 Heroku,rackup 崩溃

http - beego POST 请求体始终为空

php - 如何欺骗网站推荐人?

python - 从Python 3中的Web服务下载文件

python - Google App Engine 批量下载

ruby - 我怎样才能像在 Gemfile 中指定的那样安装 gem?

ruby - 什么是用于在大型 Rails 站点上构建灵活的垃圾邮件检测的优秀开源包?

apache - 以编程方式将用户名和密码发送到 Apache Web 服务器

javascript - Onedrive cors 在 javascript 中下载