亚马逊AWS官方博客

全新 Graviton4 实例,提升 Valkey 性价比

在当今数据驱动的世界中,高性能、低延迟的数据存储和检索系统变得越来越重要。Valkey 作为一个基于 Redis 的键值存储解决方案,以其卓越的性能和灵活性而闻名。同时,AWS 的 Graviton 处理器为云计算带来了新的可能性,提供了更高的性价比。本文将探讨如何利用 Graviton 实例来进一步提升自建 Valkey 的性价比,通过一系列测试和分析,为读者提供实用的洞察和建议。

Valkey 与 Graviton 实例简介

Valkey 简介

Valkey 是一个基于 Redis 的高性能键值存储系统,专为云环境设计。它继承了 Redis 的所有优点,如快速的读写速度、丰富的数据结构支持,同时还增加了一些云原生特性,如自动伸缩、跨区域复制等。Valkey 广泛应用于缓存、会话存储、实时分析等场景,成为许多企业的首选解决方案。

主要特点:

  • 高性能:毫秒级的读写延迟
  • 可扩展性:支持横向和纵向扩展
  • 高可用性:内置故障转移和数据持久化机制
  • 丰富的数据结构:支持字符串、列表、集合、有序集合等
  • 云原生:易于在云环境中部署和管理

您可以通过查看博客文章什么是 Valkey推陈出新 – 内存 key-value 数据库 Valkey 介绍和剖析 了解更多细节。

AWS Graviton 实例

AWS Graviton 是由 AWS 设计的一系列 64 位 ARM 架构处理器,旨在为云工作负载提供最佳性价比。这些定制处理器为各种用例的 HAQM EC2 实例类型提供动力,包括通用型、计算优化型、内存优化型和存储优化型等实例类型。与传统的 x86-64 处理器相比,AWS Graviton 处理器以更低的能耗著称,使其成为许多应用程序的经济高效选择。主要特点:

  • 性价比:在 AWS 上为广泛的工作负载提供最佳性价比,与基于 x86 的 HAQM EC2 实例相比,基于 AWS Graviton 的实例可实现高达 20% 的成本节省。
  • 可运行各种工作负载:使用基于 Graviton 的实例来支持应用程序服务器、微服务、开源数据库和高性能计算(HPC)。
  • 广泛的软件支持:AWS Graviton 处理器受到许多热门的操作系统、ISV 和 AWS 合作伙伴支持。
  • 作为托管式 AWS 服务提供:基于 AWS Graviton 的实例也可用于热门的托管 AWS 服务,例如 HAQM Aurora、HAQM RDS 和 HAQM EKS。
  • 减少碳足迹:与同类 EC2 实例相比,在实现相同性能的情况下最多可节省 60% 的能源。

Graviton 实例的优势在于它能够在保持高性能的同时,显著降低运营成本。这对于像 Valkey 这样的数据密集型应用来说,可能带来显著的经济效益。

全新一代 Graviton4 实例

2023 re:Invent 大会宣布了 AWS Graviton4 处理器,该芯片使用 ARM Neoverse V2 内核定制设计的 ARM 架构构建,集成了730亿个晶体管,针对提供高性能和能效进行了优化。

由 AWS Graviton4 提供支持的 HAQM EC2 R8g 实例现已全面推出,相比基于 AWS Graviton3 的实例,其性能高出 30%。 HAQM EC2 R8g 实例非常适合数据库、内存缓存和实时大数据分析等内存密集型工作负载。

要了解更多信息,请参阅 HAQM EC2 R8g 实例

基于 Graviton4 的实例(C8g,M8g,R8g,X8g 实例)支持带宽权重配置,该特性允许您为实例配置更高的基线网络带宽,你可以通过 HAQM EC2 实例支持 VPC 和 EBS 的带宽配置 了解该特性。

要了解如何将工作负载迁移到基于 Graviton 的实例,请参阅 AWS Graviton Fast Start 迅速开启程序计划Porting Advisor for Graviton

测试环境准备

为了全面评估 Graviton 实例对 Valkey 性能的影响,我们设置了一个详细的测试环境。这个环境旨在模拟真实世界的使用场景,同时保证测试结果的可比性和可重复性。

测试客户端 memtier_benchmark

  • EC2 实例:1 * c6i.4xlarge
  • OS: HAQM Linux 2
  • memtier 测试命令参考

Valkey 环境及配置

  • OS:HAQM Linux 2023
  • EC2 实例类型,4xlarge 大小的实例
    • r6g.4xlarge / r6i.4xlarge / r7i.xlarge / r7g.4xlarge / r8g.4xlarge
    • 您可以通过 HAQM EC2 实例类型页面查看各实例的详细信息
  • Valkey
    • 版本:valkey-8.0.1
    • 模式:单机

网络设置

  • 为了最小化网络延迟的影响,我们将测试客户端实例和 Valkey 实例部署在同一个可用区内。

通过这样详细的测试环境设置,我们旨在获得全面、准确的性能数据,为 Valkey 在 Graviton 实例上的表现提供深入的洞察。

测试用例说明

Valkey 版本中加入了 IO 多线程能力。 因此这里我们主要关注在 IO 多线程的能力的提升上,我们设计了用例分别使用多种 io-threads 数值来测试性能,如下所示:

测试场景 ID io-threads pipeline EC2 实例大小 CPU 内存
1 6 不使用 4xlarge 16C 128G
2 10 不使用 4xlarge 16C 128G
3 14 不使用 4xlarge 16C 128G

测试流程及结果

配置 Valkey 服务

我们对 Valkey 进行配置,首先根据测试机型修改最大内存分配为机型最大内存的 80%,IO 线程数量根据上述测试用例进行调整。

valkey.conf 配置文件

# /etc/valkey/valkey.conf
port 6379
bind 0.0.0.0
protected-mode no
daemonize yes
maxmemory 102gb   // 4xlarge 实例内存容量的80%
maxmemory-policy allkeys-lru
io-threads 14     // 分别设置为6,10 或 14
io-threads-do-reads yes

使用 memtier-benchmark 进行测试

为了全面评估 Valkey 在 Graviton 实例上的性能表现,我们设计了一系列测试案例,涵盖了常见的操作类型和使用场景。这些测试不仅反映了基本的读写性能,还包括了更复杂的数据操作和真实世界的应用场景。

测试命令

./memtier_benchmark -t 16 -c 50 -s 10.26.90.100 -p 6379 --distinct-client-seed --command="set __key__ __data__" --key-prefix="kv_" --key-minimum=1 --key-maximum=500 --random-data --data-size=128 --test-time=180
./memtier_benchmark -t 16 -c 50 -s 10.26.90.100 -p 6379 --distinct-client-seed --command="get __key__" --key-prefix="kv_" --key-minimum=1 --key-maximum=500 --test-time=180
./memtier_benchmark -t 16 -c 50 -s 10.26.90.100 -p 6379 --distinct-client-seed --command="incr __key__" --key-prefix="int_" --key-minimum=1 --key-maximum=500 --test-time=180
./memtier_benchmark -t 16 -c 50 -s 10.26.90.100 -p 6379 --distinct-client-seed --command="lpush __key__ __data__" --key-prefix="list_" --key-minimum=1 --key-maximum=500 --random-data --data-size=128 --test-time=180
./memtier_benchmark -t 16 -c 50 -s 10.26.90.100 -p 6379 --distinct-client-seed --command="sadd __key__ __data__" --key-prefix="set_" --key-minimum=1 --key-maximum=500 --random-data --data-size=128 --test-time=180
./memtier_benchmark -t 16 -c 50 -s 10.26.90.100 -p 6379 --distinct-client-seed --command="zadd __key__ __key__ __data__" --key-prefix="" --key-minimum=1 --key-maximum=500 --random-data --data-size=128 --test-time=180
./memtier_benchmark -t 16 -c 50 -s 10.26.90.100 -p 6379 --distinct-client-seed --command="hset __key__ __data__ __data__" --key-prefix="hash_" --key-minimum=1 --key-maximum=500 --random-data --data-size=128 --test-time=180

memtier_benchmark 的选项说明

memtier_benchmark 是一款基于命令行的 redis/valkey 性能测试工具,支持多种操作命令,这里我们总结了测试所用到的命令行配置参数,具体测试的参数解析如下:

-t 16:使用 16 个线程
-c 50:每个线程使用 50 个客户端进行连接
-s 10.26.90.100:Redis 服务器的 IP 地址
-p 6379:Redis 服务器的端口号
–distinct-client-seed:为每个客户端使用不同的随机种子
–command=”set key data”:指定要执行的 Redis 命令,这里是 SET 命令
–key-prefix=”kv_”:键名的前缀
–key-minimum=1 —key-maximum=500:键名的数字范围(将被附加到前缀后)
–random-data:使用随机生成的数据
–data-size=128:设置值的大小为 128 字节
–test-time=180:测试持续时间为 180 秒(3分钟)

本次测试用到的基础操作命令如下:

  • SET: 测试基本的键值对写入性能
  • GET: 测试基本的键值对读取性能
  • INCR: 测试原子递增操作的性能
  • LPUSH: 测试列表头部插入操作的性能
  • SADD: 测试向集合添加元素的性能
  • ZADD: 测试向有序集合添加元素的性能
  • HSET: 测试设置哈希表字段的性能

通过这些多样化的测试案例,我们能够全面评估 Valkey 在 Graviton 实例上的性能特征,包括吞吐量、延迟、资源利用率等多个方面。这将帮助我们深入理解 Graviton 架构对 Valkey 性能的影响,并为潜在的用户提供有价值的参考信息。

测试结果对比

经过测试我们收集了大量数据来比较 Valkey 在各实例、各场景的性能/性价比。以下是测试数据的汇总表,表格中各个实例规格对应的数值为吞吐性能 OPS/sec。其中,以 r6i 实例性能数据 和 OD 价格作为 100% 基准值进行归一化:

测试场景 ID io-threads 设置 操作类型  r6g.xlarge  r6i.xlarge  r7g.xlarge  r7i.xlarge  r8g.xlarge
1 6 get 610,204 719,362 728,610 711,289 949,055
hset 460,859 469,996 565,182 516,309 651,796
incr 619,386 726,195 729,347 712,240 951,969
lpush 587,527 677,173 724,904 689,112 950,497
sadd 567,958 582,179 714,364 595,912 816,145
set 598,488 713,872 728,568 689,623 941,035
zadd 142,800 152,567 153,305 175,038 168,388
总计 3,587,222 4,041,344 4,344,279 4,089,523 5,428,884
总计(归一化) 89% 100% 107% 101% 134%
价格(归一化) 80% 100% 85% 105% 94%
性价比(归一化) 111% 100% 126% 96% 144%
2 10 get 745,980 749,568 959,555 661,915 1,034,752
hset 453,754 376,706 590,416 461,899 594,643
incr 789,880 757,656 858,097 778,746 1,065,879
lpush 573,095 541,704 939,322 591,138 1,009,093
sadd 475,298 484,584 562,162 490,993 855,430
set 750,113 633,099 870,231 644,662 950,244
zadd 142,033 136,725 150,802 157,264 148,215
总计 3,930,154 3,680,041 4,930,585 3,786,617 5,658,255
总计(归一化) 107% 100% 134% 103% 154%
价格(归一化) 80% 100% 85% 105% 94%
性价比(归一化) 133% 100% 158% 98% 164%
3 14 get 632,573 721,092 845,583 660,727 1,022,380
hset 355,706 373,590 481,637 400,833 547,840
incr 839,419 595,381 891,342 722,874 1,013,707
lpush 608,059 442,989 910,705 505,932 803,118
sadd 419,078 386,529 746,845 450,886 632,076
set 553,886 565,949 845,772 593,729 952,783
zadd 146,135 132,958 165,819 148,679 148,159
总计 3,554,856 3,218,488 4,887,701 3,483,660 5,120,064
总计(归一化) 110% 100% 152% 108% 159%
价格(归一化) 80% 100% 85% 105% 94%
性价比(归一化) 138% 100% 179% 103% 170%

根据该表,我们综合考虑性能和性价比,得到下面图表:

测试结果分析:

基于 Graviton 实例在性能上大幅提升,其中基于 Graviton3 的 r7g.4xlarge 和基于 Graviton4 的 r8g.4xlarge 拥有最好的性能:

  • r8g.4xlarge 相比 r6i.4xlarge,性能提升可高达 59%;相比 r7i.4xlarge,性能提升可高达 49%;
  • r7g.4xlarge 相比 r6i.4xlarge,性能提升可高达 52%;相比 r7i.4xlarge,性能提升可高达 40%;

同时,r7g.4xlarge 和 r8g.4xlarge 拥有最好的性价比:

  • r8g.4xlarge 相比 r6i.4xlarge,性价比提升可高达 70%;相比 r7i.4xlarge,性能提升可高达 68%;
  • r7g.4xlarge 相比 r6i.4xlarge,性能提升可高达 79%;相比 r7i.4xlarge,性能提升可高达 73%;

综上,基于 Graviton4 的 r8g 实例在本文各场景中都具有最好的性价比。同时,建议您基于实际工作负载和业务流量进行进一步测试,作为 Valkey 选型的依据。

你也可以通过下图查看各场景下各个操作类型,在各实例下的平均延时信息:

总结与建议

通过对 Valkey在 x86 和 Graviton 实例上的全面测试和比较,我们得出以下结论和建议:

实例选择建议:

  • 如果性能是首要考虑因素,r8g.4xlarge(基于 Graviton4)是最佳选择,它在几乎所有操作上都提供了最高的性能。
  • 如果需要平衡成本和性能,r7g.4xlarge 也是一个很好的选择,它提供了比 r6i.4xlarge 更好的性能。

工作负载优化:

  • 对于 zadd 等高延迟操作,可以考虑优化应用程序逻辑,减少这类操作的频率或批量处理。
  • 充分利用 get 和 incr 等高性能操作,这些操作在 Graviton 实例上表现特别出色。

成本效益分析:

  • Graviton 实例(r6g/r7g/r8g)不仅性能更好,通常价格也更低,提供了更好的性价比。
  • 建议进行详细的成本效益分析,考虑实际工作负载特点和预算限制。

迁移策略:

  • 如果当前使用的是 Intel 实例(如 r6i.4xlarge),建议考虑逐步迁移到 Graviton 实例。
  • 迁移之前除通过基准测试进行评估,建议基于真实业务工作负载进行充分测试,确保应用程序在 ARM 架构上正常运行。

总结来说,AWS Graviton 处理器在 Valkey 工作负载上展现出显著的性能优势,同时通常还能提供更好的成本效益。根据您的具体需求和预算,r8g.4xlarge 或 r7g.4xlarge 都是非常有竞争力的选择。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。

相关博客

Graviton 新品发布

现已推出:由 Graviton4 提供支持的内存优化型 HAQM EC2 X8g 实例

基于 AWS Graviton4 的 HAQM EC2 R8g 实例:HAQM EC2 中的最高性价比

新的存储优化型 HAQM EC2 I4g 实例:Graviton 处理器和 AWS Nitro SSD

精选技术博客

AWS Graviton4 加速 Apache APISIX 消息处理

AWS Graviton3 加速 Flink 作业执行:Benchmark

AWS Graviton3 加速 Spark 作业执行:Benchmark

在 AWS Graviton 上运行大语言模型:CPU 推理性能实测与调优指南

StarRocks on AWS Graviton3,实现 50% 以上性价比提升

Milvus 使用 HAQM Graviton3 实例实现高达 31% 的性价比提升

UnrealEngine 5 结合 HAQMGameLift 在 Graviton3 上的实践

使用 Graviton 4 构建 UE5 Dedicated Server 获得极致性价比

本篇作者

袁泉

亚马逊云科技弹性计算解决方案架构师,主要负责亚马逊云科技弹性计算相关产品的技术咨询与解决方案设计,专注于 Graviton 相关产品和方向。

张凯

亚马逊云科技解决方案架构师,主要负责基于亚马逊云科技的解决方案架构设计和的方案咨询;具有多年的架构设计、项目管理经验。