使用作业队列上传到AWS S3存储桶


Uploading to an AWS S3 bucket using a Job Queues

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

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

我的问题是:

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

理想情况下,您不希望您的主应用程序服务器在文件上传过程中被绑定(既到应用程序服务器,也到S3)。

CORS(跨来源资源共享)的存在正是为了避免这种情况。您可以直接从客户端将文件上传到S3,让amazon担心处理来自并发用户的多次上传。它让你的应用程序做它最擅长的事情,而不必担心上传本身。

这个SO问题讨论了同样的问题,有几个可定制的插件,比如fine uploader,可以用进度条等来包装。

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