通过 Redis Enterprise,我们最近启用了将基于 RAM 的存储扩展到闪存的能力。不要将其与某种形式的持久化混淆——这是一种让 Redis 在需要时突破服务器 RAM 界限,进入闪存存储的方法。随着闪存(基于 NVMe 的 SSD 存储)的进步,其性能变得非常可行,尽管仍不如单独使用 RAM 快。这使您能够拥有混合存储——数据根据需要快速地在 RAM 和闪存之间移动,这一切都由 Redis Enterprise 管理,无需更改您的代码。
让我们看看 Redis Enterprise 在闪存上的性能特点,以及如何自行测试性能。我们建议按照我们文档中所述直接安装 Redis Enterprise。虽然我们提供了如何使用 Docker 安装 Redis Enterprise 进行产品测试的说明,但在这种情况下,该方法不会获得最高性能。
为了最好地利用闪存能力,我们建议使用 i3.2xlarge AWS 实例。这些实例配备了非易失性内存 এক্সপ্রেস (NVMe) SSD 驱动器,这是高性能混合内存扩展的关键。测试设置如下:
负载生成由 memtier_benchmark 提供。它应该与您的集群位于同一区域/可用区/子网,但应位于专用实例中。
本次基准测试,我们将重点关注具有复制功能的集群。以下是我们的测试设置的更多规格:
内存限制 | 100 GB | RAM+闪存中的存储限制。 |
RAM 限制 | 30% | 键和“热值”始终存储在 RAM 中。 |
数据持久化 | 无 | 未启用持久化以简化设置并减少测试中的变量。 |
集群 / 分片 | 是 – 2 个分片 | 每个节点上有一个主分片和一个从分片。 |
复制 | 是 (已勾选) | 复制在部署中很常见,因此包含在此基准测试中,尽管 Redis Enterprise 结合闪存并不强制要求复制。 |
其余所有设置应使用默认值。
我们将使用 memtier_benchmark 并使用以下参数填充数据库
$ memtier_benchmark -s your-nodes-fully-qualified-name-or-ip-endpoint -p your-endpoint-port --hide-histogram --key-maximum=75000000 -n allkeys -d 500 --key-pattern=P:P --ratio=1:0
您需要修改红色标记的两项的值。您可以在 Redis Enterprise 控制面板上找到端点地址和端口,方法是在“数据库”页面上选择您的数据库,然后点击“配置”选项卡;表格中应该有一行类似于此的内容
此基准测试将向数据库中填充 7500 万个键,每个键的载荷为 500 字节。
下一步是集中您的键——实际上,我们将把靠近中位数的键加载到 RAM 中,其余的则放在闪存中。这个过程可以模拟更真实的访问模式,并控制基准测试原本的随机性(这种随机性不会反映真实的访问模式)。这也意味着后续的测试将更加一致。您可以阅读我们在之前关于 memtier_benchmark 的博客文章中对此功能的更多介绍。
为了集中,我们将通过运行以下命令在 RAM 中生成约 2050 万个条目
$ memtier_benchmark -s your-nodes-fully-qualified-name-or-ip-endpoint -p your-endpoint-port --hide-histogram --key-minimum=27250000 --key-maximum=47750000 -n allkeys --key-pattern=P:P --ratio=0:1
现在我们已经准备好了数据库,让我们开始生成一些负载吧。
$ memtier_benchmark -s your-nodes-fully-qualified-name-or-ip-endpoint -p your-endpoint-port --pipeline=11 -c 20 -t 1 -d 500 --key-maximum=75000000 --key-pattern=G:G --key-stddev=5125000 --ratio=1:1 --distinct-client-seed --randomize --test-time=600 --run-count=1 --out-file=test.out
测试运行后,您将能够在 Redis Enterprise 控制面板中监控结果。在这种访问模式下,您应该会看到约 115,000 ops/sec 的吞吐量,延迟低于毫秒。同样重要的是要注意,如果您查看 memtier_benchmark 本身的输出,可能会看到较低的值,但这考虑了网络延迟,因此并非直接测量 Redis Enterprise 的性能。
这项实验表明,在一个拥有两个服务节点的三节点集群上仅运行四个分片,就可以实现平均超过 100,000 ops/sec 的吞吐量和低于毫秒的延迟,这满足了许多实际数据库用例的性能要求。如果需要更高的吞吐量或内存,可以通过添加更多分片和节点来扩展您的集群。
如果您想构建一个纯 RAM 版本的数据库,您需要的节点数量将是三倍。这反过来意味着运行数据库的基础设施成本将是三倍。使用闪存作为 RAM 扩展提供了相当大的节省。
要开始使用 Redis Enterprise Flash,请访问此处的快速设置说明。要了解有关 Redis Flash 架构的更多信息,请参阅Redis Enterprise Flash 架构博客文章。您可以在此处免费试用 Redis Enterprise Flash。最后,要了解有关 Redis Enterprise 结合闪存扩展的性能特点的更多信息,请联系我们。