dot 速度的未来将在您所在的城市举办的活动中到来。

加入我们在 Redis 发布活动

Amazon PIOPS 真的比标准 EBS 好吗?

更新:阅读我们的后续文章 第二篇 – 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 次,并计算了平均结果。我们的测试组合包括

  1. 每台负载生成机上 100 和 500 个连接(总共 200 和 1000 个连接)
  2. 100B 和 1KB 对象大小
  3. 50%/50% 读/写场景,以及 100% 写场景(用于对 EBS 加载)
服务器设置
操作系统:Ubuntu 12.04 LTS(64 位)
内核:3.2.0-23-virtual
Amazon 区域:US-EAST-1
测试的 Amazon 实例:m2.2xlarge & m2.4xlarge

EBS 卷设置

标准 EBS 卷:2 x 1TB RAID0(条带化)
PIOPS 卷:2 x 100GB 1000IOPs 预置 RAID0(条带化)
RAID 设置
RAID 软件:MD
MD 版本:v3.2.5

RAID 配置

mdadm –create ebs-stripe –name ebs-stripe –homehost any –raid-devices 2 /dev/xvdj /dev/xvdk –chunk 256 –level 0        #其中 xvdj 和 xvdk 是每个 1TB 的 ebs 卷

基准测试结果 注意,我们选择展示来自 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$648200 美元 + 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,296200 美元 + 0.01 美元(每百万次 I/O)1,496 美元 + 0.01 美元(每百万次 I/O)标准 EBS 的成本将比 PIOPS 低,最多可达 91.5K 次写入/秒(假设平均每次 I/O 有 40 个合并的请求,平均大小为 1KB)
PIOPS EBS1,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 团队对我们的基准测试发表评论,并将确保分享我们发现的任何新信息。