AWS EFS、EBS和S3之间有什么区别?它们应该在什么情况下使用?

401

根据这个问题的标题,AWS EFS、EBS和S3之间的实际区别是什么?

我对每个的理解:

  • S3是一个可以在任何地方访问的存储设施
  • EBS是您可以挂载到EC2上的设备
  • EFS是您可以挂载到EC2上的文件系统

那么为什么要使用EBS而不是EFS?它们似乎具有相同的用例,但只存在一些语义差异?尽管EFS在各个可用区之间进行了复制,而EBS只是一个挂载的设备。我想我的EBS的了解不够,因此无法区分。

为什么选择S3而不是EFS?它们都存储文件,可以扩展并且可以复制。我想使用S3时必须使用SDK,而使用EFS作为文件系统时,您可以使用所选编程语言的标准I/O方法来创建文件。但这是唯一的真正区别吗?


6
EFS类似于NFS。EBS本质上是一种SAN。S3有点像WebDav。Glacier很可能是蓝光DVD。 - Neil McGuigan
13个回答

546

一个词的回答:钱 :D

在US-East-1存储1 GB: (更新于2016年12月20日)

  • Glacier: $0.004/月(注:2016年有大幅度价格下调)
  • S3: $0.023/月
  • S3-IA (2015年9月发布): $0.0125/月 (需额外支付$0.01/GB检索费用)
  • EBS: $0.045-$0.1/月(根据速度决定,固态硬盘或非固态硬盘)+ IOPS成本
  • EFS: $0.3/月

以下是临时存储数据的其他选项:

  • SNS
  • SQS
  • Kinesis stream
  • DynamoDB, SimpleDB

上述成本仅为样本。不同地区可能存在差异,并且随时可能发生变化。此外,还需要支付数据传输(上传至互联网)的额外成本。但它们显示了服务价格之间的比率

这些服务之间还有很多差异:

EFS是:

  • 已经推出预览版,但可能还未在您所在的地区提供服务
  • 网络文件系统(这意味着它可能具有更大的延迟,但可以在多个实例之间共享,甚至跨区域)。
  • 与EBS相比较昂贵(约高出10倍),但提供了额外的功能。
  • 它是一个高可用性的服务。
  • 它是一个托管服务。
  • 您可以将EFS存储附加到EC2实例上。
  • 多个EC2实例可以同时访问它。
  • 自2016年12月20日起,您可以通过直接连接将EFS存储直接附加到本地服务器。 ()

EBS是:

  • 一种块存储(因此需要格式化),这意味着您可以选择想要的文件系统类型。
  • 由于它是块存储,您可以使用多个块存储的Raid 1(或0或10)
  • 它非常快
  • 相对便宜
  • 根据亚马逊的新公告,您可以在SSD上每个存储中存储高达16TB的数据。
  • 您可以对EBS进行快照(在运行时),以备份原因
  • 但它只存在于特定地区。虽然您可以将其迁移到另一个地区,但您不能跨地区访问它(仅当您通过EC2共享它时才可以;但这意味着您拥有一个文件服务器)
  • 您需要一个EC2实例来附加它
  • 新功能(2017年2月15日):现在您可以在卷正在使用时增加卷大小、调整性能或更改卷类型。更改生效时,您可以继续使用应用程序。

S3是:

  • 一个对象存储(不是文件系统)。
  • 您可以存储文件和“文件夹”,但不能像传统文件系统那样具有锁定、权限等。
  • 这意味着,默认情况下,您不能只挂载S3并将其用作Web服务器。
  • 但它非常适合为网站存储图像和视频。
  • 非常适合短期归档(例如几周)。它也适用于长期归档,但Glacier更具成本效益。
  • 非常适合存储日志。
  • 您可以从每个区域访问数据(可能会产生额外费用)。
  • 高度可用,冗余。基本上不可能丢失数据(99.999999999%的耐久性,99.9的正常运行时间SLA)。
  • 比EBS便宜得多。
  • 您可以直接向互联网提供内容,甚至可以在没有EC2实例的情况下直接从S3运行完整(静态)网站。

Glacier是:

  • 长期归档存储
  • 存储非常便宜
  • 检索可能非常昂贵
  • 需要最多4小时来“读回”您的数据(因此只存储您知道不需要长时间检索的项目)

正如JDL的评论中提到的那样,价格方面有几个有趣的方面。例如Glacier、S3、EFS根据您的使用情况为您分配存储空间,而在EBS中,您需要预定义分配的存储空间。这意味着您需要过度估计。(虽然很容易向您的EBS卷添加更多存储空间,但这需要一些工程,这意味着您总是“超额支付”您的EBS存储空间,这使其变得更加昂贵。)

来源:AWS Storage Update – New Lower Cost S3 Storage Option & Glacier Price Reduction


10
如果需要快速恢复数据,Glacier的费用非常昂贵。http://liangzan.net/aws-glacier-calculator/ - Anatoly
8
不同意" S3比EBS便宜"的说法。使用S3时,您只能免费进行2000次PUT操作和20000次GET操作。而使用EBS,您可以免费进行200万次I/O操作。这里是我的QA链接http://stackoverflow.com/questions/34048866/aws-ec2-doesnt-display-instance-usage-report-why-answered。 - Green
3
读取 2,000,000 次 S3 数据的成本约为 0.4 美元,写入 2,000,000 次的成本约为 5 美元... 但最重要的是,你需要根据任务选择正确的存储方式。S3 最适合用于大型、不太频繁更改但广泛访问的文件。(当然也有很多例外情况 :D) - Adam Ocsvari
4
不错的比较。但EBS和EFS之间的另一个主要区别是,EBS是固定的存储量。因此,是的,1GB的比较是不同的,但为什么要创建一个1GB的EBS分区呢?最少,如果您将创建一个10GB的分区,那么您要为存储在这10GB数据中的同样1GB数据支付0.5-1.0美元。根据您需要存储数据的速度增长以及希望继续支付多少未使用空间费用,EFS可能是更好的选择。 - JDL
3
值得注意的是:EFS目前只支持Linux,不支持Windows。 - Andrew Clark
显示剩余10条评论

132

我也是。那些提问或投票的人(不是回答)根本不知道UFS和NFS系统之间的区别。 - BMW
5
同样,这是使用S3和EBS的区别-- S3和EFS适用于跨多个服务器共享数据,而EBS则不行。 - Geoffrey Wiseman
1
同时,EFS不能用作CDN的源,S3更适合这个角色。如果您有许多需要上载到CDN的资产,最好使用S3。 - Moses Liao GZ

83

修正比较:

  • S3是一个可以随处访问的存储设施。
  • EBS是一种可以挂载到EC2上的设备。
  • EFS是一种文件系统,可以同时挂载到多个EC2实例上。

目前比较EFS和EBS还为时过早- EFS的性能和可靠性都还不确定。

何时应该使用S3?

  • 您不需要将文件“本地化”到一个或多个EC2实例中。
  • (实际上)无限容量
  • 内置的Web服务、身份验证功能

2
我最近在West-2设置了一个EFS卷,但似乎在处理大文件时出现了写入问题。例如,创建Docker容器时会失败并显示“文件过大”的错误,同时创建SQLite数据库也失败了。而在使用EBS卷时并没有遇到这些问题。因此,目前EFS可能存在可用性/可靠性问题需要“修复”。 - DKebler

9
除了价格和功能,吞吐量也会有很大的差异(如用户user1677120所述):

EBS

引用自EBS文档
| EBS volume | Throughput |           Throughput          |
|    type    |   MiB/s    |         dependent on..        |
|------------|------------|-------------------------------|
| gp2 (SSD)  | 128-160    | volume size                   |
| io1 (SSD)  | 0.25-500   | IOPS (256Kib/s per IOPS)      |
| st1 (HDD)  | 20-500     | volume size (40Mib/s per TiB) |
| sc1 (HDD)  | 6-250      | volume size (12Mib/s per TiB) |

请注意,对于 io1、st1 和 sc1 存储类型,您可以将吞吐量流量突发到至少 125 MiB/s,但取决于卷大小,可以达到 500 MiB/s。

您可以通过例如将 EBS 卷部署为 RAID0来进一步增加吞吐量。

EFS

引用自EFS文档

| Filesystem |    Base    |   Burst    |
|    Size    | Throughput | Throughput |
|    GiB     |   MiB/s    |   MiB/s    |
|------------|------------|------------|
|         10 |        0.5 |        100 |
|        256 |       12.5 |        100 |
|        512 |       25.0 |        100 |
|       1024 |       50.0 |        100 |
|       1536 |       75.0 |        150 |
|       2048 |      100.0 |        200 |
|       3072 |      150.0 |        300 |
|       4096 |      200.0 |        400 |

基础吞吐量是有保证的,突发吞吐量则使用您在基础吞吐量以下时收集到的信用点(因此您只能在有限的时间内使用,有关更多详细信息,请参见这里)。

S3

S3是完全不同的东西,因此无法与EBS和EFS进行比较。另外:S3没有公布吞吐量指标。您可以通过并行下载(我在某个地方读到AWS表示这样可以实现基本无限的吞吐量),或将CloudFront与混合使用来提高吞吐量。

8
补充一下:EFS的(突发)读/写性能取决于所获得的信用点。信用点的获取取决于您存储在其中的数据量。数据越多->信用点越多。这意味着,当您只需要少量经常读写的存储空间时,您很快就会用完信用点,吞吐量降至约50kb/s。 唯一解决此问题的方法(在我的情况下)是添加大型虚拟文件以增加信用点的获取速度。但更多的存储->更高的成本。

2
这太慢了。起初我以为这是 OP 的错误,但在检查文档后发现它是正确的(截至2017年)。 - Jakobovski

6
AWS(亚马逊网络服务)以其广泛的产品线而闻名。有一些AWS的专家知道如何和什么时候使用哪个Amazon产品执行哪个任务,但我们大部分人都迫切需要帮助。
AWS提供三种常见的存储服务:S3、Elastic Block Store(EBS)和Elastic File System(EFS),它们具有不同的功能和提供各种级别的性能、成本、可用性和可扩展性。我们将比较这些存储选项的性能、成本和访问存储数据的可用性,以及它们的用例。
AWS存储选项:
Amazon S3是一种基本的对象存储服务,可用于托管网站图像和视频,以及数据分析、智能手机和Web应用程序。数据在对象存储中作为对象进行管理,这意味着所有数据类型都以其原生格式存储。在对象存储中,没有文件关系的层次结构,数据对象可以分散在许多计算机上。您可以从任何带有Internet连接的计算机使用S3服务。
AWS EBS提供持久的块级数据存储。块存储系统比标准文件存储更灵活,并提供更好的容量,因为文件存储在称为块的多个卷中,这些卷充当单独的硬盘驱动器。必须使用EBS挂载Amazon EC2实例。业务连续性、软件测试和数据库管理是使用情况的示例。
AWS EFS是一个共享的、弹性的文件存储框架,可以根据文件添加和删除进行扩展和收缩。它遵循传统的文件存储模型,将数据组织成文件夹和子目录。EFS对于内容管理系统和SaaS应用程序非常有用。EFS可以同时挂载在多个EC2实例上。
哪种AWS云存储服务最好?
像往常一样,这取决于情况。
仅针对数据存储而言,Amazon S3是最便宜的选择。但是,S3还有其他价格标准,包括每次上传的成本、S3分析和从S3传输出的数据的每GB成本。EFS的成本结构最为简单明了。
Amazon S3是可从任何地方访问的云存储服务。AWS EBS只能在一个区域内访问,而多个EFS实例可以在多个区域间共享文件。
在IOPS和延迟方面,EBS和EFS都优于Amazon S3。
通过单个API调用,EBS可以进行缩放。由于比EFS更便宜,因此您可以使用EBS进行数据库备份和其他需要可靠、可预测性能的低延迟交互应用程序。
大量数据,例如大型分析工作负载,更适合EFS。由于此类数据无法存储在允许EBS中的单个EC2实例上,因此用户必须将数据分解并在EBS实例之间分布。EFS服务允许同时访问数千个EC2实例,从而可以实时处理和分析大量数据。

4

EBS是简单的——块级存储可以附加到来自同一可用区的实例上,并且不受实例寿命的影响而生存。

然而,EFS和S3之间有一个有趣的区别,并且需要确定其正确的用例。

费用:EFS的成本约为S3的10倍。

用例:

  • 每当我们有数千个需要同时处理文件的实例时,建议使用EFS而不是S3。
  • 还要注意,S3是基于对象的存储,而EFS是基于文件的,这意味着每当我们需要持续更新(刷新)文件时,应该使用EFS。
  • S3最终一致性,而EFS强一致。如果无法承受最终一致性,则应使用EFS

1
S3现在支持强一致性:https://aws.amazon.com/fr/s3/consistency/ - Clément Duveau
请问您能否详细解释一下为什么在同时访问(如您第一个案例中)时建议使用EFS而不是S3? - Krupa
2
@Krupa:与S3相比,EFS在同一文件上允许更多每秒读/写操作。EFS - 在通用模式下,每秒有35,000个文件操作的限制。读取数据或元数据的操作消耗一个文件操作,写入数据或更新元数据的操作消耗五个文件操作。即最多可以每秒进行35,000次读操作、7,000次写操作或两者的某种组合。S3 - 每个存储桶中每个前缀每秒可进行3,500次PUT/COPY/POST/DELETE或5,500次GET/HEAD请求。 - Tejaskumar

3
简单来说,Amazon EBS 提供块级别的存储。 Amazon EFS 提供网络附加的共享文件存储。 Amazon S3 提供对象存储。

1
AWS EFS、EBS 和 S3。从功能角度来看,以下是它们的区别: EFS:
  1. 网络文件系统: 可在多台服务器之间共享,甚至跨地区进行共享。但在 EBS 上不可实现该功能。可以用于存储 ETL 程序,而不会存在安全风险。

  2. 高可用性和可扩展性的服务。

  3. 运行任何需要高工作量、可扩展存储且需要快速输出的应用程序。

  4. 它可以提供更高的吞吐量。即使对于高达 500,000 IOPS 或每秒 10 GB 的工作负载,也能匹配突然的文件系统增长。

  5. 抬起和转移应用程序支持:EFS 是弹性的、可用的和可扩展的,可以让你轻松快速地移动企业应用程序,而不需要重新设计它们。

  6. 大数据分析:它具有运行大数据应用程序的能力,这些应用程序需要大量的节点吞吐量、低延迟的文件访问和写后读操作。

EBS:
  1. 对于NoSQL数据库,EBS提供了低延迟性能和可靠性,以满足其高峰性能的需求。

S3:

强大的性能、可扩展性和可用性:Amazon S3可以在无需资源采购周期或预先投资的情况下扩展存储资源。

2)数据湖和大数据分析:创建一个数据湖来保存原始数据的本地格式,然后使用机器学习工具进行分析,以获取洞见。

  1. 备份和恢复:安全、强大的备份和恢复解决方案
  2. 数据归档
  3. S3是一个对象存储库,非常适合存储大量备份或用户文件。与EBS或EFS不同,S3不受EC2的限制。存储在S3存储桶中的文件可以通过编程方式或直接从AWS CloudFront等服务访问。许多网站使用它来保存其内容和媒体文件,这些文件可以通过AWS CloudFront有效地提供服务。

1
EBS和EFS的主要区别在于,EBS只能从特定AWS区域内的单个EC2实例访问,而EFS允许您在多个区域和实例之间挂载文件系统。
最后,Amazon S3是一个对象存储器,适用于存储大量备份或用户文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接