我应该坚持在EBS或S3上的图像?

我正在将我的Java,Tomcat,MySQL服务器迁移到AWS EC2。

我已经附加了一个EBS卷用于存储MySQL数据。 在我的Web应用程序中,人们可以上传图片,我应该坚持。

我脑海中有两种select:

  1. 将上传的图像保存到EBS卷。
  2. 使用S3服务。

以下是我的笔记,请对他们持怀疑态度,因为我的专长不在服务器上,而在软件开发上。

  • EBS plus :S3存储更贵。 (0.15 $ / Gb> 0.1 $ / Gb)

  • S3 plus :从EBS提供静态文件可能会影响我的Web服务器的性能。 这是真的? 服务图像是否会显着影响服务器性能? 对于S3,我的服务器将不负责提供静态文件。

  • S3 plus :从EBS提供静态文件可能会导致I / O成本,尽pipe它可能很小。

  • EBS加上 :人们说EBS更快。

  • S3 plus :人们说S3对于持久性更安全。

  • EBS plus :不需要学习API:将图像保存到EBS卷很简单。

我不能决定,而是在寻求指导。

在成本方面,S3不一定会比EBS成本高。 如果您拥有15 GB的EBS卷,则无论是否包含1 GB的数据,或者甚至没有数据,都需要为所有存储进行支付。 使用S3,您只需支付实际存储的数据。

您的策略应该是使用EBS进行安装,但总是将EBS备份到S3。 过去有一种方法可以使用S3加载caching来装载卷(称为PersistentFS),但现在已经不存在了。 因此,安装EBS卷,然后将其备份到S3。

以下是支持该build议的一些事实以及EBS和S3的一般比较:

  1. 成本:在S3上保存图像会花费更多,尤其是在使用CloudFront的情况下。 亚马逊对stream量和GET / PUT请求收取费用,GET / PUT请求的成本甚至可能高于小文件的stream量成本。

  2. 什么更安全? 根据亚马逊,S3是比EBS更安全的存储,但我认为这不是什么大问题,因为您可以定期将EBS备份到S3上。

  3. API:S3 API非常简单,将文件保存到S3上并不是什么大问题。

  4. 安全。 将用户上传的文件从Web应用程序中分离出来更安全 – 难以将黑客内容上传到您的Web应用程序服务器上。

  5. 速度。 我不认为由tomcat服务的EBS托pipe文件可能比在S3上托pipe的文件更快,特别是在使用CloudFrond(CDN)时。

我build议的另一个select是设置一个单独的轻量级web服务器(nginx适用于这样的任务)来提供来自EBS的静态内容。 这个解决scheme将是相当快速,安全(如果从一个单独的实例提供)和成本效益。

从EBS服务静态可能会影响我的Web服务器的性能

那么,你的静态数据量是多less? 如果它低于1Gb,它很可能会粘在caching中,因此不会影响性能。

你的stream量是多less? 是否值得使用S3作为内容分发networking,还是使用普通的S3?

使用EBS的驱动器使用S3而不是本地存储器会复杂多less? 静态数据传输可能是一个取决于您的应用程序的因素。

如果你将有一些严重的stream量和用户,你可能想要使用S3,因为它允许使用CDN。 如果您需要大量的用户数据,则可能需要考虑成本。 对于S3你必须支付每个GET / PUT,所以很多小文件将花费你。 EBS上的EC2图像,你只会支付带宽。

我build议你运行数字。 另请参阅您的应用程序要做什么更容易。