更新:阅读我们的后续文章 第二篇 – Amazon SSD PIOPS 真的更好吗?
两个月前,亚马逊推出了其 EBS 预置 IOPS (PIOPS),用于在云中运行高性能数据库,并推出了 EBS 优化实例,以在 EC2 和 EBS 之间提供专用吞吐量。作为 Redis 云 服务的提供商,我们想知道 PIOPS EBS 与 EBS 优化实例的性能是否真的比标准 EBS 与非优化实例对 Redis 更好。请注意,最近亚马逊发布了其新的 RDS 预置 IOPS。但是,它不适用于 Redis,因此本文不会讨论它。
在 AWS 上运行 Redis 对 Redis 用户来说一直是一个 挑战,主要是因为 EBS 的网络和 I/O 吞吐量缓慢且不可预测。虽然 Redis 是一个纯内存数据存储系统,它从 RAM 中提供所有服务,但它还有两种 持久存储机制,以提高持久性:AOF(追加式日志文件)和快照。这些机制在与持久存储交互时非常有效,因为它们仅使用顺序写入,没有寻道时间。因此,即使在非 SSD 硬件上,Redis 也可以与数据持久性很好地运行。
话虽如此,我们还是决定对亚马逊的 EBS PIOPS 进行一些基准测试,因为缓慢的存储设备仍然可能对 Redis 造成很大的困扰。当 AOF“每秒 fsync”策略因缓慢的磁盘 I/O 而阻塞整个 Redis 操作时,就会出现这种情况。此外,用于点时间快照或 AOF 重写的后台保存需要更长的时间,因此会使用更多内存进行写时复制,从而留给应用程序的可用内存更少。您可能已经看到 详细的帖子,来自 Strattalux,比较了使用 EBS 优化和非优化实例的 PIOPS EBS 与标准 EBS 的性能。虽然他们的测试很有趣,但我们认为我们会更深入地研究一下,看看一个简单的 Redis 应用程序的性能是否受到不同存储架构的影响。因此,我们非常具体,只测试了顺序写入的性能,忽略了随机读写和顺序读取等其他情况。
为了进行基准测试,我们还审查了成本影响,并使用了我们认为更优化的标准 EBS 性能配置(1 x 1TB EBS 卷与 10 x 100 GB RAID0 EBS,来自一个关于 标准 EBS 性能 的非常有教育意义的博客,作者是来自 Netflix 的 Adrian Cockcroft)。因此,让我们直接进入我们的测试的详细信息…
基准测试设置 我们使用了以下设置:带优化实例的 PIOPS EBS(即带 EBS 优化属性设置为真的 m2.4xlarge)与带非优化实例的标准 EBS(带 EBS 优化属性设置为假的 m2.4xlarge)。我们还测试了另一种设置,其中我们比较了非优化实例上的 PIOPS EBS 与标准 EBS(m2.2xlarge)。我们的目的是看看那些由于各种原因(例如成本)无法使用 EBS 优化实例的 AWS 用户是否可以从新的 PIOPS EBS 中获益。这些结果与上面描述的设置非常相似。对于所有测试,我们使用了 2 台 m1.xlarge 实例来运行我们的 memtier_benchmark 负载生成工具(memtier_benchmark 是我们开发的用于测试 Redis 和 Memcached 数据存储的先进负载生成工具,我们将在我们的 github 帐户中很快分享)。我们在每个配置上运行了 8 次测试以模拟 Redis 应用程序,然后运行了每个测试 3 次,并计算了平均结果。我们的测试组合包括
基准测试结果 注意,我们选择展示来自 1KB 对象大小测试的结果,这些测试会对 EBS 加载更大的压力。 RPS(每秒请求数) 延迟 上面显示了我们两个 memteir_benchmark 工具汇总的 RPS 和延迟结果。我们的延迟测试考虑了网络往返时间、Redis 处理时间以及 memtier_benchmark 工具解析结果所花费的时间。如您所见,所有测试中的 RPS 和延迟大致相同,虽然存在一些差异,这可能是由于测试期间 AWS 基础设施的波动造成的。不用说,Redis 在磁盘访问次数更少的情况下运行得更好。 iostats
上面的结果来自在测试运行期间执行的 iostats 命令(这是一个有用的 AWS 论坛帖子,解释了如何解释 Linux iostats)。我们每 2.5 秒运行一次 iostats,并汇总来自两个 EBS 卷的结果。这些图表只展示了与 Redis 相关的性能参数——“读取”参数没有展示,因为它们在这些测试期间始终为零。如您所见,除了偶尔出现的一些故障外,iostats 显示了两种 EBS 配置的大致相同结果。 设置成本 如前所述,我们想了解标准与 PIOPS EBS 选项的成本影响,因此我们比较了使用 us-east-1(弗吉尼亚北部)中的 Amazon EC2 按需价格的每月设置成本
实例成本 | EBS 成本 | 总计 | 评论 | |
设置 #1 | ||||
标准 EBS | $648 | 200 美元 + 0.01 美元(每百万次 I/O) | 848 美元 + 0.01 美元(每百万次 I/O) | 标准 EBS 的成本将比 PIOPS 低,最多可达 37.5K 次写入/秒(假设平均每次 I/O 有 40 个合并的请求,平均大小为 1KB) |
PIOPS EBS | $648 | $225 | $873 | |
设置 #2 | ||||
标准 EBS | $1,296 | 200 美元 + 0.01 美元(每百万次 I/O) | 1,496 美元 + 0.01 美元(每百万次 I/O) | 标准 EBS 的成本将比 PIOPS 低,最多可达 91.5K 次写入/秒(假设平均每次 I/O 有 40 个合并的请求,平均大小为 1KB) |
PIOPS EBS | 1,296 美元 + 36 美元(ebs-优化)= 1332 美元 | $225 | $1,557 |
结论 在对 AWS 上的 Redis 进行 32 次密集测试(每次测试运行 3 次迭代,总共 96 次测试迭代)后,我们发现非优化 EBS 实例和优化 EBS 实例在使用 Amazon 的 PIOPS EBS 对 Redis 时效果都不佳。根据我们的结果,使用正确的标准 EBS 配置可以提供与 PIOPS EBS 相同甚至更好的性能,而且实际上可以节省您的资金。请记住,这些发现代表了一种特定的存储使用模式(仅顺序写入),因此如果您有不同的存储访问模式,您可能需要查看 Stratalux 测试结果(同时考虑我们建议的不同的标准 EBS 配置)。鉴于这些结果,我们计划继续在标准 EBS 配置上运行 Garantia Data 的集群。我们欢迎 Amazon EBS 团队对我们的基准测试发表评论,并将确保分享我们发现的任何新信息。