首页 文章

IOPS(在Amazon EBS中)在实践中意味着什么?

提问于
浏览
19

我有一些应用程序所需的图像 . 有许多图像(50,000)但整体尺寸很小(40 Mb) . 最初,我以为我会简单地使用S3,但上传速度很慢 . 作为一个临时解决方案,我想附上一个包含图像的EBS,这样就可以了 . 但是,阅读一下有关EBS通用(gp2)的内容,我注意到以下描述:

GP2是Amazon EC2实例的默认EBS卷类型 . 这些卷由固态驱动器(SSD)支持,适用于各种事务工作负载,包括开发/测试环境,低延迟交互式应用程序和启动卷 . GP2旨在提供一位数的毫秒延迟,提供3 IOPS / GB的一致基准性能,最高可达10,000 IOPS,并且每卷可提供高达160 MB / s的吞吐量 .

正是这3个IOPS / GB的数量令我担忧 . 这在实践中意味着什么?假设您需要为少量用户提供电子商务网站(例如,每分钟<10,000个请求),并且需要检索这些图像 . 亚马逊describes如何衡量IOPS:

当小I / O操作在物理上连续时,Amazon EBS会尝试将它们合并为单个I / O,直到最大大小 . 例如,对于SSD卷,单个1,024 KiB I / O操作将计为4个操作,而每个4 KiB的256个I / O操作将计为256个操作 .

这是否真的意味着如果我想在一秒钟内检索50个10kB的图像,我需要50 IOPS并且很容易超过3 IOPS的基线?

UPDATE

感谢Mark B的建议,我能够使用S3上传我的文件 . 但是,我仍然想知道执行常见任务所需的IOPS量,例如运行数据库或为Web应用程序提供其他文件 . 我很高兴根据您的经验听取一些关于IOPS最小值的参考值 .

2 回答

  • 4

    您缺少该语句的“ /GB ”部分 . 基线为3 IOPS per GB . 如果您的EBS卷为100GB,那么您将拥有300 IOPS的基准 . 对于GP2 EBS卷,您必须将卷的大小加倍3才能获得IOPS .

    请注意,1TB以下的任何GP2卷也能够以高达3,000 IOPS的速率突发,因此IO的任何有限增加仍应表现良好 .


    此外,我将补充说S3听起来更适合您的用例 . 如果您看到S3的上传速度较慢,那么这是一个可以解决的问题 . 您可以使用CloudFront提供可上传到的附近边缘位置 .

    根据我的经验,上传到S3的速度绝不会比上传到您的EBS卷所附加的EC2实例慢 .


    Update:

    要回答您的其他问题,所需的最低IOPS将取决于许多变量,例如可用的RAM量,您运行的应用程序类型,应用程序在内存中缓存值的程度,IO操作的平均大小等 . 确定一个确切的数字并说明你需要一个应用程序的X IOPS是非常困难的 .

    您还需要记住,任何大小不超过1TB的卷都可以在几秒钟内突破高达3,000 IOPS . 因此,即使您的应用程序在使用时需要高IOPS,如果它没有看到太多用法,IOPS突发功能可能就是它所需要的 .

    一般来说,我通常从100GB的容量开始,具有300 IOPS,并测试我的应用程序的性能 . 完全在RAM内运行的Web服务器可能永远不需要更多 . 对于像数据库这样的东西,你可能会从你认为需要的磁盘空间量开始,然后开始性能测试 . CloudWatch将显示您的应用程序正在使用的IOPS量,如果您看到它超出了您的卷的限制,那么您将知道您需要增加可用的IOPS . 冲洗并重复,直到在性能测试期间不再超出可用的IOPS .

  • 12

    @Mark B的答案可能是正确的,因为它指出你的IOP是基于你的EBS卷的大小 . 对于你想要的,S3是最好的选择 .

    但根据您的使用案例和要求,可能需要EBS . 如果要运行数据库,尤其如此 . 在这种情况下,您有几个选择 .

    您可以获得预配置IOPS - 如果您知道需要5000 IOPS,但只需要说100GB的存储空间(即使用gp2通常会为您提供大约300 IOPS),您可以使用io1卷 . 这需要额外的费用,并且您需要确保它附加到EBS优化实例,但如果需要,您可以获得高达20k的IOPS .

    如果你正在进行大量的顺序读取(在大型数据集中读取?)那么就有一种新型的EBS,st1 . 这对于500MB / s是好的,并且小于gp2的成本的1/2 .

    最后,还有另外一个你可以考虑的场景(比方说,你是一个疯子,并想尝试做一些奇怪的事情) . 如果你可以从某个地方获取存档,而你所关心的只是从一个非常快的文件系统中提供存档,你可以把它们放在一个有实例存储的实例上 . 这是一个本地连接的SSD,所以它非常快 . 唯一的缺点是,当您的实例停止时,您的数据就会消失 .

    要解决您的更新,"how many IOPS do you need for a database",答案是"it depends" . 每个数据库引擎都有不同的要求,每个数据库使用都有不同的使用模式 . 如果您想了解更多信息,请查看this . 但基本上,测试和监控 . 如果您担心,在启动时过度配置,并根据需要缩小规模 . 或者猜测,如果遇到问题就增加 - 最小化成本或为最终用户提供良好性能更重要吗?

相关问题