关于S3,EBS,EFS的三角关系

我们知道,aws提供的存储服务有S3,EBS,EFS,有些同学在使用的时候会有些困扰,哪个才是最适合我自己的云存储方案呢,现在我就和大家一起来学习下aws的三个常用存储服务:Amazon Elastic Block Store (Amazon EBS), Amazon Simple Storage Service (Amazon S3), 和Amazon Elastic File System (Amazon EFS)

-- D.C

什么是Amazon EFS?

Amazon EFS 是AWS提供的NFS文件系统托管服务,能被多个Amazon EC2实例所共享。 它的工作模式类似于NAS设备,很适合用来做大数据分析多媒体处理流程 , 以及内容管理 。其实选择哪种存储服务关键取决于我们特定的系统需求,包括我们对成本的控制,性能,和访问的方式。

Amazon EFS提供简单、可扩展、完全托管的弹性 NFS 文件系统。它可按需扩展至 PB 级,而不会中断应用程序,并在添加和删除文件时自动增加和缩小,从而无需预置和管理容量以适应增长。

要注意,在考虑存储成本的同时,最好和计算资源成本同时考虑才有意义哦,另外EFS类似S3,也有非频繁访问模式(IA), 虽然工作负载模式有所不同,但客户通常会发现 80% 的文件不经常访问(并且适合 EFS IA),20% 的文件正在使用(适用于 EFS 标准),所以通过利用IA可以很好控制成本。

什么是Amazon S3?

Amazon S3 是AWS提供的对象存储服务。它是一个静态的存储服务,可用于静态网站托管,多媒体内容部署和分发(cloudfront),版本管理,大数据分析以及归档。要注意的是,S3自带数据湖的属性,可以和Athena(aws的简单sql查询服务)以及Glu(aws大数据ETL服务)搭配用于大数据分析。

什么是EBS?

Amazon EBS 是AWS提供的块存储服务。一个EBS卷可以理解为一块磁盘,用于存储数据库,部署各类分析流程等。

三类存储对比表

特点 S3 EBS EFS
存储成本 (宁夏区域为例) [标准型]
第一个50TB/月部分: 0.1755元/GB;
50TB-450TB部分: 0.1719元/GB
500TB以上/月部分:0.1629元/GB
gp2通用型SSD: 0.664元/GB-月
io1预配IOPS SSD: 存储0.764元/GB-月, 0.399元/预配置IOPS-月
st1吞吐优化HDD:0.299元/GB-月
sc1 cold HDD: 0.166元/GB-月
EBS 磁性介质:0.364元/GB-月,0.364/100万I/O请求
标准存储:2.145元/GB-月
不频繁访问存储:0.200元/GB-月
不频繁访问请求:0.071元(每GB传输数据)
预置吞吐量(MB/秒-月):42.891元(MB/S-月)
存储大小 存储对象数量无限制 最大为16TB 无限制,自动弹性扩展
文件大小 单个S3对象最小0 byte,最大5TB 无限制 单个文件最大47.9TiB
数据吞吐和I/O 支持分段上传,建议大于100MB的文件都采用该上传方式
调用PUT API进行上传的单个文件限制为5GB
基于SSD和HDD两类
如果对I/O有要求,推荐采用SDD+预留IOPS
所有连接的client:默认3GB/s,吞吐量和 IOPS 随着文件系统的扩大而扩展,可以在短时间内快速达到更高的吞吐量级别
性能 高扩展性,支持3500 PUT/LIST/DELETE 请求/秒
支持5500 GET 请求/秒
可手动扩展卷大小而不用停止实例
基准性能:3 IOPS/GB gp2
更高性能要求请选择io1
高度可扩展的托管服务
支持最高7000次/秒的文件系统操作
数据 数据存储在区域内
在一个区域内的多个可用区备份
可以通过跨区域复制(CRR)达到跨区域级的容灾
数据存储在同一可用区
可以在多个可用区创建副本提高可用性
EFS数据存储在区域内
在区域内的多可用区备份
数据访问 访问策略控制权限
可通过Internet访问
只能被一台EC2实例访问 能被1-1000s台EC2跨AZ的实例同时访问
文件系统限制 可以作为文件系统被mount(s3fs服务), 但不推荐。
默认情况下桶的权限不会自动传递到桶内的文件夹。
支持各类文件系统,包括ext3和ext4 EC2的文件存储服务
EFS还能基于AWS Direct Connect为本地服务器提供NFS服务
支持的加密机制 服务器端加密(SSE-Amazon S3, SSE-KMS, SSE-C)
客户端加密(CMK+客户端master key)
AWS KMS托管的CMK和AES 256-bit 加密标准 AWS KMS托管的CMK和AES 256-bit 加密标准
访问控制 设置桶策略和用户策略
通过ACLs(access control list)来管理访问
基于IAM角色的预签名 URL访问
安全组
NACL
基于用户的授权(如IAM)
安全组
基于用户的授权(如IAM)
可用性 一年内99.99%的可用性 99.99%可用性 高可用性
可用区容灾 能承受2个可用区挂掉 不能承受所在可用区挂掉(如果没有及时创建EBS镜像的话) 分布式存储
多个可用区
能承受1个可用区挂掉
持久性 99.999999999% 是普通硬盘的20倍 高持久性
最终一致性问题 S3 在所有区域提供PUTS和DELETES的最终一致性 无此问题 无此问题

总结

综上,在这三个存储选项中,S3最便宜,可以配置为从任何地方访问,适用于采用一次写入、多次读取的应用。

再看看EFS和EBS的成本对比,EFS 的价格要比EBS贵,但更便宜的EBS一次只能让你的一个AmazonEC2实例去访问,这就很难应用于集群或分布式应用程序的分析场景。然而EBS可以提供比EFS更强的性能。所以简单理解,EFS 其实是比EBS多了一个共享网络存储的功能,关键还是看我们的实际需求了。

静态EBS VS 自动扩展EFS

举个例子,我们使用EBS和使用EFS的区别可以比作你需要将汽车停放在家庭车库,还是将汽车停放在租赁停车场。使用EBS就像在你自己的私人车库停车:你经常使用你的车,而且这个空间非常安全。使用EFS更像是在一个大的出租停车场停车:有很多人,包括你自己,共享一个公共空间来容纳大量的个人。让我们看看AWS EBS和AWS EFS之间的类比在现实生活中是如何工作的。

car

EBS通常用于持久块存储。它非常适合于需要高IOPS或吞吐量的数据库和其他低延迟交互式应用程序,特别是具有一致和可预测性能的低延迟应用程序。现在,有一种观点认为可以使用EFS而不是EBS,这样就不必担心空间问题了。但是,回到我们的类比,建立一个巨大的停车场来为你的车提供额外的空间有时候并不是一个明智的想法:它让你花费更多,很多空间将被闲置。而EBS卷可以通过一个API调用进行放大或缩小,而无需停止实例。

那么,什么时候使用EFS呢?EFS是为大数据工作负载和分析应用程序生成的大量数据而设计的;大量的数据对于连接EBS的EC2实例来说是不可能进行访问处理和分析的。因此,在存储共享、媒体处理工作流、内容管理和web服务方面,EFS比EBS更具优势,尽管EBS的成本更低。

便宜S3 VS 高性能EFS

现在让我们看看EFS vs S3。由于S3的最终一致性问题,与EFS相比,S3的速度可能稍慢一些,而后者EFS具有最高的I/O性能模式,具有更高的写入速度和吞吐量。

EFS可以在任何时间点被同一区域内多个可用区的多个EC2实例访问;S3可以通过API被任何地方所访问。S3保证了11个9的持久性,EFS暂时没有公布,帐户可以启动的EFS实例的数量也有一定限制。

最后:在成本和必要性上寻求平衡

EBS与S3、EFS与S3、EBS与EFS之间的决定因素很可能取决于你兜里有多少钱来支付存储费用。

所以,S3看起来是最便宜的,但在性能方面,Amazon EBS由于可以提供高IOPS,速度最快,但是在共享和可弹性伸缩的文件系统方面,Amazon EFS是最好的选择。

没有完美的产品,只有完美的平衡。