我应该将图像保存在 EBS 还是 S3 上?

我应该将图像保存在 EBS 还是 S3 上?

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

我已经附加了一个用于存储 MySQL 数据的 EBS 卷。在我的 Web 应用程序中,人们可能会上传图像,我应该保留这些图像。

我认为有两种选择:

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

以下是我的笔记,请对它们保持怀疑,因为我的专业不是服务器,而是软件开发。

  • EBS 加:S3 存储更昂贵。(0.15 美元/Gb > 0.1 美元/Gb)

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

  • S3 加:从 EBS 提供静态文件可能会导致 I/O 成本,尽管这种成本可能很小。

  • EBS 加:人们说 EBS 更快。

  • S3 加:人们说 S3 的持久性更安全。

  • EBS 加:无需学习 API:直接将图像保存到 EBS 卷即可。

我无法决定,请求指导。

答案1

就成本而言,S3 的成本并不一定高于 EBS。如果您有 15 GB 的 EBS 卷,则无论其中包含 1 GB 的数据还是尚未包含任何数据,您都需要为所有存储付费。使用 S3,您只需为实际存储的数据付费。

您的策略应该是使用 EBS 作为已安装的卷,但始终将 EBS 备份到 S3。过去有一种方法可以使用 S3 和缓存作为已安装的卷(称为 PersistentFS),但现在已经不存在了。因此,请安装一个 EBS 卷,然后将其备份到 S3。

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

  • EBS 只能与 EC2 实例一起使用,而 S3 也可以在 EC2 之外使用
  • EBS 显示为可安装卷,而 S3 需要软件来读取和写入数据
  • EBS 可以容纳的数据量比 S3 少
  • EBS 一次只能由一个 EC2 实例使用,而 S3 可以由多个实例使用
  • S3 通常会出现写入延迟,而 EBS 则不会
  • S3 是冗余的(我认为是 6 份),而 EBS 不是。 http://www-differencebetween.net/technology/internet/difference-between-amazon-s3-and-amazon-ebs/

  • 在性能方面,S3 具有更高的延迟,并且延迟变化也更大。S3 写入延迟也可能高于读取延迟。另一方面,EBS 具有较低的延迟和较小的变化。它还具有写回缓存,可实现极低的写入延迟。 http://www-cloudiquity.com/2009/03/differences-between-s3-and-ebs/

  • EBS(包含 20 GB 的修改数据)的预期年故障率为 0.1% 到 0.5%。

  • 使用 EBS,您需要为卷大小每月每 GB 支付 0.10 美元,无论您是否在该卷上存储了任何数据。
  • 使用 S3,您需要每月为每 GB 支付 0.15 美元的快照费用 - 仅适用于实际存储的数据。

  • EBS 的可靠性取决于维护最近的快照。正如亚马逊在http://www-amazon.com/b/ref=sc_fe_c_0_201590011_1?node=689343011,EBS 的可靠性取决于卷上存储的未使用快照备份到 S3 的数据量。因此,要实现 EBS 的耐用性,重要的是通过频繁拍摄快照来保留备份到 S3 的卷上的数据。

  • 您将为 EBS 卷大小每月支付 0.10 美元/GB,并为 S3 快照每月支付 0.15 美元/GB。但多个快照会以增量方式存储。如果您的设备有 100 GB 的数据,但自上次快照以来只有 5 GB 的数据发生了变化,则只有额外的 5 GB 快照数据会存储回 Amazon S3。 http://aws.amazon.com/ebs/

答案2

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

  2. 什么更安全?根据亚马逊的说法,S3 确实比 EBS 更安全,但我认为这没什么大不了的,因为您可以定期轻松地将 EBS 备份到 S3 上。

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

  4. 安全性。将用户上传的文件托管在 Web 应用程序之外会更加安全 - 黑客更难以将恶意内容上传到您的 Web 应用程序服务器。

  5. 速度。我不认为 tomcat 提供的 EBS 托管文件会比 S3 上托管的文件更快,尤其是在使用 CloudFrond (CDN) 时。

我推荐的另一个选择是设置一个单独的轻量级 Web 服务器(nginx 非常适合此类任务)来提供来自 EBS 的静态内容。此解决方案将相当快速、安全(如果从单独的实例提供服务)且经济高效。

答案3

从 EBS 提供静态信息可能会对我的 Web 服务器的性能产生负面影响

那么,您的静态数据量是多少?如果低于 1Gb,则很可能停留在缓存中,因此根本不会影响性能。

答案4

如果您有大量流量和用户,您可能希望使用 S3,因为它允许用作 CDN。如果您预计有大量用户数据,则可能需要考虑成本。对于 S3,您必须按 GET/PUT 付费,因此许多小文件将花费您。使用 EC2 映像上的 EBS,您只需支付带宽费用。

我建议你计算一下数字。另外看看你的应用程序更容易做什么。

相关内容