Amazon ElastiCache for Redis 7 的新增功能

8 篇文章 0 订阅

Amazon ElastiCache for Redis是一种内存数据存储,可为现代应用程序提供实时、成本优化的性能。它是一项完全托管的服务,可扩展到每秒数百万次操作,响应时间为微秒。

开源Redis(“Redis OSS”)是最受欢迎的NoSQL键值存储之一,并以其出色的性能而闻名。我们的客户选择在 ElastiCache for Redis 上运行缓存,以帮助降低数据库成本并提高性能。随着他们扩展应用程序,他们对高吞吐量和大量并发连接的需求不断增长。2019 年 3 月,我们推出了增强型 I/O,使每个节点的吞吐量提高了 83%,延迟降低了 47%。2021 年 11 月,我们通过将加密卸载到非 Redis 引擎线程来提高启用 TLS 的集群的吞吐量。在这篇文章中,我们很高兴地宣布增强的 I/O 复用,这进一步提高了吞吐量和延迟,而不需要您对应用程序进行额外的更改。

ElastiCache for Redis 7 中增强的 I/O 多路复用

适用于 Redis 7 及更高版本的 ElastiCache 现在包括增强的 I/O 多路复用,可大规模显着提高吞吐量和延迟。增强型 I/O 多路复用非常适合具有多个客户端连接的吞吐量受限工作负载,其优势随着工作负载并发级别的增加而扩展。例如,与 ElastiCache for Redis 6 相比,当使用 r6g.xlarge 节点并运行 5,200 个并发客户端时,吞吐量(每秒读写操作数)提高高达 72%,P99 延迟降低高达 71%。对于这些类型的工作负载,ElastiCache for Redis 6.2 处理可能成为扩展能力的限制因素。通过增强的 I/O 多路复用,每个专用网络 I/O 线程将命令从多个客户端传输到 ElastiCache for Redis 引擎中,利用 ElastiCache for Redis 高效批量处理命令的能力。在所有 AWS 区域中使用 ElastiCache for Redis 7 时,增强型 I/O 多路复用将自动可用,且无需额外付费。请参阅ElastiCache 用户指南了解更多信息。使用 ElastiCache for Redis 版本 7 后,无需更改应用程序或服务配置即可使用增强型 I/O 多路复用。

让我们更深入地研究一下它是如何工作的。下图显示了 Redis OSS 如何处理客户端 I/O(直至 ElastiCache for Redis 6)的高级视图。

Redis OSS引擎同时为多个客户端提供服务。该引擎是单线程的,处理能力在连接的客户端之间共享。对于每个客户端,引擎处理连接、解析请求并运行命令。在这种情况下,不会使用可用的 CPU。

下图显示了具有增强型 I/O 的 ElastiCache for Redis(针对 Redis OSS 5.0.3 发布),其中可用 CPU 代表 ElastiCache for Redis 引擎用于卸载客户端连接。开源 Redis OSS 6 也采用了类似的方法,它引入了称为I/O 线程的类似概念。

通过增强的 I/O,引擎处理能力集中于运行命令而不是处理网络连接。因此,每个节点的吞吐量最多可提高 83%,延迟最多可减少 47%。通过多路复用,每个增强型 I/O 线程不再为每个客户端打开一个通道(如上图所示),而是使用 ElastiCache for Redis 引擎将命令组合到一个通道中,如下图所示。

在上图中,每个增强型 I/O 多路复用线程处理多个客户端,该线程又使用到 ElastiCache for Redis 主引擎线程的单个通道。增强型 I/O 线程收集客户端命令并将其复用到单个批次中,然后将其转发到 ElastiCache for Redis 引擎进行处理。这种技术可以更有效地运行命令,从而提高速度,正如我们在下一节中演示的那样。

性能分析

在本节中,我们将介绍内存优化的 R5 (x86) 和 R6g (ARM-Graviton2) 节点的基准测试结果。我们选择了一个典型的缓存场景,其中包括 20% SET(写入)和 80% GET(读取)命令,数据集使用 300 万个 16B 键和 512B 字符串值初始化。ElastiCache 和客户端应用程序都在同一可用区中运行。

吞吐量增益

在下图中,我们分享了针对不同节点大小执行一系列客户端并发(400 个客户端、2,000 个客户端和 5,200 个客户端)的基准运行结果。该图显示了增强型 I/O 多路复用带来的吞吐量(每秒请求数)的改进百分比。

增强型 I/O 多路复用使每秒请求量提高了 72%,全面提高了吞吐量,如上图所示。值得注意的是,系统上的客户端负载越多,改进就越高。例如,r6g.xlarge 在 400、2,000 和 5,200 个并发客户端的情况下分别显示每秒操作次数提高了 26%、48% 和 72%。下表列出了证明改进的原始数据。

ElastiCache for Redis 版本400 个客户2,000 名客户5,200 名客户
6.2.6(操作数/秒)313,143235,562202,770
7.05(操作/秒)395,819348,550349,239
改进26%48%72%

多路复用技术提高了 ElastiCache for Redis 的处理效率,类似于 Redis OSS管道功能。对于 Redis OSS 管道和 ElastiCache for Redis 增强 I/O 多路复用,命令会批量处理。然而,虽然 Redis OSS 管道批处理包括单个客户端的命令,但 ElastiCache for Redis 增强型 I/O 多路复用包括单个批处理中来自多个客户端的命令。

减少客户端延迟

不建议最大化吞吐量,这会导致 CPU 利用率峰值和响应时间减慢。为了避免这种情况,我们测试了每秒 142,000 个请求的延迟,这是 r6g.xlarge 上 ElastiCache for Redis 6.2.6 的 70% 吞吐量利用率。我们使用 ElastiCache for Redis 6 测量了客户端延迟,并将其与 ElastiCache for Redis 7 上的相同负载进行了比较。下表显示了在 r6g.xlarge 上运行的测试结果。它捕获 P50 和 P99 延迟减少的百分比。

ElastiCache for Redis 版本P50 延迟P99 延迟
6.2.6(毫秒)0.558.3
7.05(毫秒)0.442.45
减少延迟20%71%

与吞吐量增益类似,在支持增强型 I/O 多路复用的 ElastiCache 实例上可以看到客户端延迟的减少。

当 ElastiCache 为更多并发客户端提供服务时,增强的 I/O 多路复用可提供更低的延迟。这是为什么?

增强型 I/O 多路复用将来自多个客户端(有时数以千计)的命令组合到少量通道中,这相当于增强型 I/O 线程的数量。通道数量的减少增加了访问局部性,从而提高了内存缓存的使用率。例如,所有客户端共享相同的通道缓冲区,而不是为每个客户端提供读/写缓冲区。代价高昂的内存高速缓存未命中次数减少,单个命令花费的时间也缩短。结果是命令处理速度更快,从而降低了延迟并提高了吞吐量。

结论

通过增强的 I/O 多路复用,您将受益于增加的吞吐量和减少的延迟,而无需更改您的应用程序。在所有 AWS 区域中使用 ElastiCache for Redis 7 时,增强型 I/O 多路复用将自动可用,无需额外付费。

有关更多信息,请参阅支持的节点类型。首先,创建一个新集群,或使用ElastiCache 控制台升级现有集群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值