亚马逊AWS官方博客
借助 Amazon ElastiCache for Redis 7.1,可实现每个集群每秒超过 5 亿个请求
Amazon ElastiCache for Redis 是一项完全托管的服务,与 Redis API 兼容。ElastiCache 是一种快速的内存数据存储,许多客户选择这种存储来为一些对性能最为敏感的实时应用程序提供支持。今天,我们很高兴地与大家分享,通过从 ElastiCache for Redis 7.0 升级到 7.1,您现在可以有效地最大程度提高性能,并且可以在微秒级响应时间内扩展为每秒 5 亿个请求(RPS)。
此次发布是我们持续努力帮助您充分发挥 ElastiCache 性能的最新举措。2023 年 2 月,我们发布了具有增强型 I/O 多路复用功能的 ElastiCache for Redis 7.0,该服务非常适合具有多个客户端连接的吞吐量限制型工作负载,其优势可以随工作负载并发水平而扩展。举个例子,在使用 r6g.xlarge 节点并运行 5200 个并发客户端时,与 ElastiCache for Redis 6 相比,您最多可以将吞吐量(每秒读写操作数)提高 72%,P99 延迟最多降低 71%。它将许多客户端请求合并到一个通道,提高了 Redis 主线程的效率,如下图所示。
2023 年 8 月,我们宣布支持 Graviton3(M7g 和 R7g)实例,与 Graviton2 相比,除了增强型输入/输出多路复用带来的改进外,Graviton3 的 RPS 最多可提高 28%,P99 延迟最多可降低 21%。
现在,在具有至少 8 个物理内核(Graviton 为 2xlarge,x86 为 4xlarge)的实例上,使用 ElastiCache for Redis v7.1 最多可将性能提升一倍。与 7.0 版相比,它的吞吐量最多可提高 100%,P99 延迟最多可降低 50%。在足够大的节点(例如 r7g.4xlarge)上,您可以实现每个节点每秒超过 100 万个请求(RPS),每个集群 5 亿个 RPS。这一性能飞跃是通过我们称之为表示层卸载和内存访问分摊的技术实现的。在这篇文章中,我们将更详细地讨论这些技术并提供性能分析。
Redis 表示层卸载
ElastiCache for Redis 使用增强型 I/O 线程来处理网络 I/O 和传传输层安全性协议(TLS)加密。在 7.1 版中,我们扩展了增强型 I/O 线程功能,使其还能处理表示层逻辑。我们所说的表示层是指增强型 I/O 线程现在不仅会读取客户端输入,还会将输入解析为 Redis 二进制命令格式,然后将其转发到主线程运行。同样,在响应路径上,主线程会将二进制格式的输出重定向回增强型 I/O 线程。增强型 I/O 线程将格式化响应并将其发送到客户端。如下图所示,通过将这项工作推送到专用线程,我们既能更充分地利用并行机制和每个实例中的可用 CPU 内核,也能让 Redis 主线程做它最擅长的工作,即运行命令。
内存访问分摊
随机内存访问是一项高成本的操作,会影响内存密集型应用程序的效率。现在,我们引入了内存访问分摊(MAA),这是一种用于降低内存访问成本的技术,尤其适用于大型动态数据结构,例如在 Redis 中使用的结构。MAA 将许多数据结构操作的步骤交错在一起,以确保并行访问内存并减少内存访问延迟。在 ElastiCache for Redis 7.1 中,我们在 Redis 字典中应用了这种方法,使哈希查找和加速命令减少多达 60%。以下示例对此进行了描述,其中,Redis 主处理线程从增强型 I/O 线程接收三个已解析的命令。接下来,它交错执行字典查找程序,以同时将所需数据预取到 CPU 缓存中。在我们的简单示例中,Redis 主线程从增强型 I/O 线程接收以下命令:GET "19"、GET "65"
和 GET "23"
。
主线程现在从 Redis 字典中检索这些密钥。在 ElastiCache 7.0 版中,Redis 字典中的哈希表遍历将串行运行,而 Redis 会低效等待内存。然而,在版本 7.1 中,三个哈希表遍历交错以获得并行内存请求。
性能分析
为了对使用 ElastiCache for Redis 7.1 可以实现的性能提升进行基准测试,我们将其与 7.0 版本进行了比较。我们使用了典型的基准测试设置,以及行业标准的 Redis 基准测试工具,其中包括 20% 的 SET(写入)和 80% 的 GET(读取)命令。所有测试均使用 500 个客户端、80% 的 GET 命令和 20% 的 SET 命令在填充有 300 万个 16 字节密钥和 512 字节字符串值的数据库上运行。ElastiCache 节点和客户端应用程序均在同一 AWS 可用区内运行。
每秒请求次数增益
下图详细介绍了在不同节点大小上运行基准测试的结果。它捕获了 ElastiCache for Redis 7.1 中引入的每秒请求数(RPS)的百分比改进,并与 7.0 进行了比较。
我们观察到所有不同节点都实现了至少 100%(双倍)的改进,这着实令人兴奋。这意味着 r7g.4xlarge 及更高版本可实现每秒超过 100 万个请求。在同一个基准测试中,我们还测量了命令延迟。下图显示了引入的 P99 延迟改进。
延迟降低
我们观察到,即使在最大 RPS 的峰值负载下,我们也能够在所有节点大小上将每个节点的 P99 延迟降低 50% 以上,将每个请求的延迟加速到小于 1 毫秒。吞吐量翻了一番,同时延迟减少了一半。
总结
在大于 xlarge 的节点上,无论您的集群大小或模式如何,无论是否使用 TLS,ElastiCache for Redis 7.1 中引入的改进都能提供更好的性能。升级到最新的 ElastiCache,享受速度带来的快感,无需额外付费,也无需对应用程序进行任何更改。ElastiCache for Redis 7.1 现已在所有亚马逊云科技区域推出。
有关更多信息,请参阅支持的版本。首先,使用 ElastiCache 控制台创建新集群或升级现有集群。
敬请关注 ElastiCache for Redis 未来更多的性能改进。
祝您顺利缓存!