上下文
我正在开发一个
的webapp我打算在AWS上部署此应用程序。更具体地说,使用EC2和S3。
挑战
我正在努力想出一种既经济又高效的设计来提供这项服务。
分析
使用以下假设:
考虑以下申请流程:
在网络性能方面,由于EC2限制下载和上传带宽,因此步骤1和2将成为瓶颈。步骤4应该不是问题,因为S3负责将文件传输给最终用户。
就成本而言,固定成本是EC2实例,主要可变成本是第4步,其中AWS在数据传输中收取0.09 $ / GB。由于文件在24小时后被删除,因此存储费用相对较小。
问题
我是否正确识别了此应用程序流程中的性能瓶颈?
我的成本分析是否正确?
这是成本方面的最佳流程吗?有没有办法进一步降低成本?
由于步骤1和步骤2(从Internet下载并上传到S3)在同时下载多个大文件时将非常耗费带宽,是否会显着影响我的服务器响应常规API请求的响应能力?我应该使用专用的EC2实例来处理来自客户端的API调用,还有另一个专用的EC2实例用于下载和上传?这将使设计稍微复杂化,因为我还必须管理两个实例之间的通信。
答案 0 :(得分:2)
您可以使用更多AWS服务吗?你知道AWS Lambda吗? https://aws.amazon.com/lambda/details/它可以执行操作以响应操作,例如它可以在下载后立即从S3删除文件。 http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html 一旦您超越AWS Lambda的学习曲线,这就减轻了跟踪下载和删除下载的需求。它还可以处理其他处理,因此您只需从EC2上传到S3。
关于成本,S3具有不同的质量水平,并且"减少了冗余"可能足以满足您的需求,节省一点钱。
答案 1 :(得分:1)
如何让客户端直接将文件上传到S3?
您的应用程序将生成预先签名的URL,以便您可以控制哪些用户可以上载文件,但之后客户端将直接与S3进行交互。这将删除昂贵的下载然后上传"步骤1和步骤1中的过程2。
请参阅此文档http://docs.aws.amazon.com/AmazonS3/latest/dev/PresignedUrlUploadObject.html