亚马逊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 未来更多的性能改进。

祝您顺利缓存!

Original URL: https://aws.amazon.com/blogs/database/achieve-over-500-million-requests-per-second-per-cluster-with-amazon-elasticache-for-redis-7-1/

本篇作者

Mickey Hoter

Amazon ElastiCache 团队的首席产品经理。他在软件产品开发方面拥有 20 多年的经验,曾担任开发人员、团队负责人、小组经理和产品经理。在加入 AWS 之前,Mickey 曾在 SAP、Informatica 等大型公司以及 Zend 和 ClickTale 等初创企业工作。工作之余,他大部分时间都沉浸在大自然中,他的大部分爱好也都与大自然有关。

Dan Touitou

AWS 的首席工程师,专注于提高 ElastiCache Redis 的效率。他在优化网络和安全设备及存储系统的软件方面拥有丰富的经验。作为一名创业者,他与他人共同创立了 Riverhead Networks,该公司后来被 Cisco Systems 收购,他在那里担任杰出工程师。随后,Dan 担任华为技术的首席技术官和 Orchestra Group 的首席科学家。Dan 获得了特拉维夫大学的计算机科学博士学位。他因引入和首次实施软件事务存储器而获得了 2012 年分布式计算领域的 Dijkstra 奖,并共同发明了 40 多项专利。在业余时间,Dan 喜欢与家人和朋友在一起,接触新技术。作为一项爱好,他还会专门制作发烧友级音箱。