我正在开发一个应用程序,该应用程序将在AWS上的弹性环境中运行(具有自动缩放功能的Ec2实例)。所有的应用程序都是用PHP开发的。
该应用程序的核心是将文件安全存储在S3存储桶中。由于用户不需要知道文件保存在哪里,我想我可以将文件临时存储在EC2实例中,然后使用作业队列(Amazon SQS)异步移动到S3,以避免重复等待时间,并更好地支持S3问题(这些问题并不常见,但可能会发生)。
我的问题是:
- 这种方法听起来不错吗?还是我遗漏了什么
- 当处理队列中的作业时,worker实例必须连接到原始s3实例,从中检索文件,然后将其上传到s3
- 如何避免在自动缩放时出现问题?在我将文件存储到S3存储桶之前,可以删除一个实例
理想情况下,您不希望您的主应用程序服务器在文件上传过程中被绑定(既到应用程序服务器,也到S3)。
CORS(跨来源资源共享)的存在正是为了避免这种情况。您可以直接从客户端将文件上传到S3,让amazon担心处理来自并发用户的多次上传。它让你的应用程序做它最擅长的事情,而不必担心上传本身。
这个SO问题讨论了同样的问题,有几个可定制的插件,比如fine uploader,可以用进度条等来包装。
这完全消除了使用任何类型的队列的需要。如果你需要在上传后进行某些记账操作,你只需在上传完成后用文件信息等对服务器进行ajax调用。它还应该解决你可能担心的由于自动缩放而删除实例的问题,因为一切都是客户端的。