【问题标题】:Uploading to an AWS S3 bucket using a Job Queues使用作业队列上传到 AWS S3 存储桶
【发布时间】:2014-04-18 22:03:30
【问题描述】:

我正在开发一个将在 AWS 上的弹性环境中运行的应用程序(具有自动缩放功能的 Ec2 实例)。所有的应用程序都是用 PHP 开发的。

该应用的核心是基于将文件安全地存储在 S3 存储桶中。由于用户不需要知道它保存在哪里,我想我可以让这个文件临时存储在 EC2 实例中,然后使用作业队列(Amazon SQS)将它异步移动到 S3 以避免重复等待时间并为 s3 问题提供更好的支持(它们不常见,但可能发生)。

我的问题是:

  1. 这种方法听起来不错还是我遗漏了什么?
  2. 在处理队列中的作业时,工作实例必须连接到原始 s3 实例,从中检索文件,然后将其上传到 s3?
  3. 如何避免自动缩放时出现问题?在我将文件存储到 S3 存储桶之前,可以删除一个实例。

【问题讨论】:

  • 文件预计有多大? ec2 实例和 s3 之间的带宽将比您的大多数用户和 s3 高得多。通常我在上传时直接传输文件。我将作业用于需要对文件进行的任何后期处理。
  • 它们不应大于 15mb。但是使用 SQS 队列进行此操作可以让我处理 s3 停机时间或问题
  • 现在通过添加 SQS,您必须担心 SQS 失败,或者作业没有被拾取,或者在作业可以传输文件之前实例被终止。 15MB 一点也不大。如果上传时无法传输到 s3,我只会认为上传失败或不完整。您将这种大小的文件上传到 s3 的时间只需几秒钟。

标签: php amazon-web-services amazon-ec2 amazon-s3 amazon-sqs


【解决方案1】:

理想情况下,您不希望您的主应用服务器在文件上传期间被捆绑(包括到应用服务器以及随后到 S3)。

CORS (Cross Origin Resource Sharing) 的存在正是为了避免这种情况。您可以直接从客户端将文件上传到 S3,让亚马逊担心处理来自并发用户的多个上传。它可以让您的应用做它最擅长的事情,而不必担心上传本身。

This SO question 讨论了同样的问题,并且有几个可自定义的插件,比如精细的上传器,可以用进度条等围绕这个问题。

这完全消除了使用任何类型队列的需要。如果您需要在上传后进行某些簿记操作,您可以在上传完成后使用文件信息等简单地对您的服务器进行 ajax 调用。它还应该解决您可能因自动缩放而删除实例的任何问题因为一切都是客户端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 2018-08-29
    • 2021-04-03
    • 2017-04-19
    • 1970-01-01
    相关资源
    最近更新 更多