文件服务架构&成本分析

时间:2016-03-15 06:54:01

标签: amazon-s3 amazon-ec2 network-programming cloud storage

上下文

我正在开发一个

的webapp
  1. 从用户那里获取网址
  2. 将相关文件下载并存储到我的服务器上
  3. 用户可以在文件最终到期并删除之前随时从我的服务器获取文件
  4. 我打算在AWS上部署此应用程序。更具体地说,使用EC2和S3。

    挑战

    我正在努力想出一种既经济又高效的设计来提供这项服务。

    分析

    使用以下假设:

    • 下载的文件仅供一位用户使用,即提供URL并启动下载的用户
    • 用户只能从服务器获取一次文件
    • 该文件只会在删除前最多24小时停留在服务器上
    • 文件大小在100MB - 5GB范围内

    考虑以下申请流程:

    1. Internet→EC2:将文件下载到本地存储
    2. EC2→S3:将下载的文件上传到S3,删除EC2上的本地副本
    3. EC2→用户:为用户提供从S3提取的直接URL
    4. S3→user:用户从S3
    5. 获取文件
    6. S3:24小时后删除文件。
    7. 在网络性能方面,由于EC2限制下载和上传带宽,因此步骤1和2将成为瓶颈。步骤4应该不是问题,因为S3负责将文件传输给最终用户。

      就成本而言,固定成本是EC2实例,主要可变成本是第4步,其中AWS在数据传输中收取0.09 $ / GB。由于文件在24小时后被删除,因此存储费用相对较小。

      问题

      1. 我是否正确识别了此应用程序流程中的性能瓶颈?

      2. 我的成本分析是否正确?

      3. 这是成本方面的最佳流程吗?有没有办法进一步降低成本?

      4. 由于步骤1和步骤2(从Internet下载并上传到S3)在同时下载多个大文件时将非常耗费带宽,是否会显着影响我的服务器响应常规API请求的响应能力?我应该使用专用的EC2实例来处理来自客户端的API调用,还有另一个专用的EC2实例用于下载和上传?这将使设计稍微复杂化,因为我还必须管理两个实例之间的通信。

2 个答案:

答案 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