【问题标题】:S3 direct upload performanceS3直接上传性能
【发布时间】:2015-02-04 12:39:29
【问题描述】:

所以我面临一个选择,是直接上传到 S3 还是通过我的服务器代理图像然后到 S3。

我确实需要在上传图片后处理它们,创建拇指和不同的版本。

所以,简而言之,我想知道哪种方法更好,从那些以前可能做过的方法中。

选择1.直接上传到S3

  • 用户上传到 S3
  • 后台工作人员从 S3 下载新图像
  • 图像已处理
  • 图片上传到 S3

选择 2. 通过服务器上传

  • 用户上传到服务器
  • 图像已处理
  • 图片上传到 S3

看这个,似乎直接上传到 S3 实际上比首先通过我的服务器要慢。但是,当直接进入 S3 时,初始上传对服务器造成的负载是否超过了额外的下载步骤?

是否还涉及其他因素,例如每种情况下的网络性能和类似情况?

【问题讨论】:

    标签: amazon-s3 upload server


    【解决方案1】:

    我是一个使用 S3 存储的大项目的成员。

    官方 S3 上传并非 100% 完美。

    是否选择您提到的其中之一非常重要。 因为每一种都有不同的优点和缺点。

    如果你想在客户端做超载,你应该选择第一个 由于某些原因,端而不是服务器端 1. 服务器规格低或繁忙 2.大客户端上传文件大。 3.客户想立即知道上传的结果,想对上传的文件进行下一步操作。但是你应该犯严重的错误 在上传程序中处理登录。否则,您可能会遭受 客户的抱怨。

    .

    如果你想获得更高的可靠性,你应该选择第二个 在结构或开发环境方面的上传过程。因为S3上传是HTTP协议所以很 速度很慢,有时它可能会在上传方面造成过载​​。如果有 客户端的一些异常情况,例如停止上传或网络 问题,您可能会遇到处理这种情况的问题。所以它是 稳定地再次在服务器端上传文件,因为错误处理是 正如下面链接中提到的亚马逊一样必不可少。

    http://docs.aws.amazon.com/AmazonS3/latest/dev/ErrorBestPractices.html URL 提到“在设计与 Amazon S3 一起使用的应用程序时,正确处理 Amazon S3 错误非常重要......”

    另外,我建议您仅使用来自 Amazon 的官方 API 来处理错误,而不是使用插件或 S3 应用程序。 :)

    【讨论】:

      【解决方案2】:

      就性能而言,直接上传到 S3 是更好的解决方案。原因是S3的可扩展性很强,也就是说:如果使用一个线程上传文件到S3,速度是1M/s,如果使用10个线程,速度大约是10M/s。

      对于你的问题,如果你有很多用户同时上传文件,S3 可以处理这些性能较差的请求。由于直接将文件上传到服务器,它要求你的服务器可以同时处理许多请求时间,如果你的实现是可销售的,它可能有机会在性能上击败 S3。

      但解决方案 1 的成本更高,因为它有更多的交易,而且还有数据传出。

      【讨论】:

      • 我的实现是可扩展的,我有多个服务器,每个服务器都有一个 Sidekiq,运行工人。我只需要在接收文件的同一台服务器上运行 Sidekiq 作业。这可能会导致某些服务器的过度使用,但我认为负载均衡器会解决这个问题。
      • 如果负载均衡器运行良好,那么解决方案 2 应该具有更好的性能,因为它只需要一次上传。
      【解决方案3】:

      直接上传到 S3 的一个问题是您正在上传到存储桶的位置,而您的服务器可能分布在世界各地的多个位置。 (例如,如果您在多个 EC 2 区域中运行服务器)。在这种情况下,您会发现与直接访问 S3 相比,访问服务器的延迟更低(传输速率更高)。

      此外,如果您将数据传输到在同一区域的 EC2 上运行的服务器,则可能不会从 S3 产生转出费用。否则,Matt 是对的 - 从 S3 传输数据,您需要支付 0.02 美元到 0.25 美元/GB 的费用。

      迈克

      【讨论】:

        猜你喜欢
        • 2019-04-05
        • 1970-01-01
        • 2014-06-24
        • 2018-09-13
        • 2011-05-12
        • 1970-01-01
        • 2011-09-01
        • 2012-03-14
        • 2018-12-31
        相关资源
        最近更新 更多