dot Redis 8 发布了——而且它是开源的

了解更多

Amazon PIOPS 真的比标准 EBS 更好吗?

更新:请阅读我们的后续文章第二轮测试 – Amazon SSD PIOPS 真的更好吗?

两个月前,亚马逊推出了其 EBS 预置 IOPS (PIOPS),用于在云中运行高性能数据库,并引入了 EBS 优化型实例,以在 EC2 和 EBS 之间提供专用吞吐量。作为 Redis Cloud 服务的提供商,我们想知道 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 重写的后台保存需要更长时间,因此会使用更多的内存进行写时复制(copy-on-write),从而留给您的应用程序的内存减少。您可能已经看过来自 Strattalux详细文章,该文章比较了使用 EBS 优化型和非优化型实例时 PIOPS EBS 与标准 EBS 的性能。虽然他们的测试很有趣,但我们认为我们可以更深入地挖掘,检查简单的 Redis 应用程序的性能是否受不同存储架构的影响。因此,我们非常具体,只测试了顺序写入的性能,忽略了随机读/写和顺序读等其他场景。

对于我们的基准测试,我们还回顾了成本影响,并使用了我们认为更优的标准 EBS 性能配置(1 个 1TB EBS 卷 vs. 10 个 100GB RAID0 EBS,这参考了来自 Netflix 的 Adrian Cockcroft 关于标准 EBS 性能的一篇非常有教育意义的博客)。因此,话不多说,以下是我们的测试详情……

基准测试设置 我们使用了以下设置:PIOPS EBS 搭配优化型实例(即设置了 EBS-Optimized 属性为 true 的 m2.4xlarge)与标准 EBS 搭配非优化型实例(设置了 EBS-Optimized 属性为 false 的 m2.4xlarge)。我们还测试了另一种设置,其中我们比较了 PIOPS EBS 与标准 EBS 在非优化型实例(m2.2xlarge)上的表现。我们的目的是查看因各种原因(例如成本)无法使用 EBS 优化型实例的 AWS 用户是否可以从新的 PIOPS EBS 中受益。这些结果与上述设置非常相似。在所有测试中,我们使用了 2 个运行 memtier_benchmark 负载生成工具的 m1.xlarge 实例(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
亚马逊区域: US-EAST-1
测试的亚马逊实例: 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 配置的结果大致相同。设置成本 如前所述,我们想了解标准 EBS 与 PIOPS EBS 选项的成本影响,因此我们使用 us-east-1(北弗吉尼亚)区域的 Amazon EC2 按需价格比较了每月的设置成本

 实例成本EBS 成本总计评论
设置#1    
标准 EBS$648$200 + $0.01 (每 100 万次 I/O)$848 + $0.01 (每 100 万次 I/O)对于高达 37.5K 次写入/秒的情况,标准 EBS 成本低于 PIOPS(假设每次 I/O 平均合并 40 个请求,平均大小为 1KB)
PIOPS EBS$648$225$873 
设置#2    
标准 EBS$1,296$200 + $0.01 (每 100 万次 I/O)$1,496 + $0.01 (每 100 万次 I/O)对于高达 91.5K 次写入/秒的情况,标准 EBS 成本低于 PIOPS(假设每次 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 的集群。我们欢迎亚马逊 EBS 团队对我们的基准测试提出意见,并且我们一定会分享我们发现的任何新信息。