对于熟悉 Redis 的用户来说,创建保证 ACID 式(原子性、一致性、隔离性、持久性)操作的配置应该相对简单:只需创建一个具有“主”角色的单个 Redis 实例,并将其配置为每次写入都使用 AOF(“appendfsync always”)写入持久化存储设备。此配置通过以下方式提供 ACID 特性
话虽如此,大多数 Redis 用户更倾向于不在此配置下运行 Redis,因为它会极大地影响性能。例如,如果持久化存储当前繁忙,Redis 会暂停请求的执行,直到存储再次可用为止。
考虑到这一点,我们想确定 Redis Enterprise (Redise) 集群处理 ACID 事务的速度有多快。我们在 Redise 架构中进行了一些内置增强,可以在 ACID 配置下实现更好的性能,其中包括
我们在 AWS VPC 内部署了以下基准测试配置
尽管我们测试了多种类型的负载,包括不同的读/写比例;不同的对象大小(从 100B 到 6KB);不同数量的连接;使用和不使用管线化;对于持久化“写入”操作,我们无法获得低于 1 毫秒的延迟,其中延迟是从请求的第一个字节到达集群的时间到“写入”响应的第一个字节发送回客户端的时间来衡量的。最后,我们测试了通过单个连接发送单个请求,但仍然无法获得低于 2-3 毫秒的延迟。我们进行了更深入的分析,发现在 ACID 配置下,AWS 云上的任何实例与 EBS 存储之间的延迟都无法低于两毫秒。
由于我们大多数客户希望延迟低于 1 毫秒,我们决定寻找替代方案。
简而言之,VMAX 是基于简单、智能、模块化存储策略构建的存储阵列系列。它整合了一个动态虚拟矩阵接口,连接和共享所有 VMAX 引擎之间的资源,使存储阵列能够从入门级配置无缝扩展到全球最大的存储阵列。
在性能方面,VMAX 可以从一扩展到最多八个引擎(V-Bricks)。每个引擎包括双控制器,每个控制器配备双路 Intel CPU、前端和后端连接、硬件压缩模块、Infiniband 内部网络以及一个大型镜像和持久化缓存。所有写入操作一旦注册到 VMAX 缓存,就会立即向主机确认,稍后(可能在多次更新后)才会写入闪存。读取操作也受益于 VMAX 的大容量缓存。当请求读取不在缓存中的数据时,FlashBoost 技术将 I/O 直接从后端(闪存)传送到前端(主机),稍后会缓存在缓存中以便将来访问。
我们设置了以下基准测试环境
以下是一些更多细节
正如预期,‘读取’密集型测试提供了最好的结果;话虽如此,我们非常惊讶地看到,在 100B 项大小的标准 1:1 读/写用例中,达到了超过 660K ops/秒的性能,而在写入密集型场景中,吞吐量仅略低(即 640K op/秒)。我们对 6000B 的结果也印象深刻,即使在写入密集型场景下,例如单个集群节点上的亚毫秒级延迟下达到了 80K ops/秒。
我们惊讶(并高兴)地发现,使用 Dell-EMC VMAX 等高端持久化存储设备,单个 Redise 集群节点可以在保持亚毫秒级数据库延迟的同时,支持超过 650K ACID ops/秒。
另一方面,我们失望地看到,在最先进的云存储基础设施(即 AWS io1 EBS)上,我们无法在亚毫秒级延迟下运行单个持久化操作。尽管有众多先进技术和公共云服务可用,但仍有很长的路要走。
完整的《Redis 与 Dell-EMC VMAX 性能评估测试和最佳实践》可在我们的网站上找到此处。
memtier_benchmark 参数
每次测试均使用以下 memtier_benchmark 参数运行