在当今数据驱动的世界中,高性能、低延迟的数据存储和检索系统变得越来越重要。Valkey 作为一个基于 Redis 的键值存储解决方案,以其卓越的性能和灵活性而闻名。同时,亚马逊云科技的 Graviton 处理器为云计算带来了新的可能性,提供了更高的性价比。本文将探讨如何利用 Graviton 实例来进一步提升自建 Valkey 的性价比,通过一系列测试和分析,为读者提供实用的洞察和建议。
Valkey 是一个基于 Redis 的高性能键值存储系统,专为云环境设计。它继承了 Redis 的所有优点,如快速的读写速度、丰富的数据结构支持,同时还增加了一些云原生特性,如自动伸缩、跨区域复制等。Valkey 广泛应用于缓存、会话存储、实时分析等场景,成为许多企业的首选解决方案。
主要特点:
您可以通过查看博客文章什么是 Valkey 和推陈出新 – 内存 key-value 数据库 Valkey 介绍和剖析 了解更多细节。
Amazon Graviton 是由亚马逊云科技设计的一系列 64 位 ARM 架构处理器,旨在为云工作负载提供最佳性价比。这些定制处理器为各种用例的 Amazon EC2 实例类型提供动力,包括通用型、计算优化型、内存优化型和存储优化型等实例类型。与传统的 x86-64 处理器相比,Amazon Graviton 处理器以更低的能耗著称,使其成为许多应用程序的经济高效选择。主要特点:
Graviton 实例的优势在于它能够在保持高性能的同时,显著降低运营成本。这对于像 Valkey 这样的数据密集型应用来说,可能带来显著的经济效益。
2023 re:Invent 大会宣布了 Amazon Graviton4 处理器,该芯片使用 ARM Neoverse V2 内核定制设计的 ARM 架构构建,集成了730亿个晶体管,针对提供高性能和能效进行了优化。
由 AWmazon Graviton4 提供支持的 Amazon EC2 R8g 实例现已全面推出,相比基于 Amazon Graviton3 的实例,其性能高出 30%。 Amazon EC2 R8g 实例非常适合数据库、内存缓存和实时大数据分析等内存密集型工作负载。
要了解更多信息,请参阅 Amazon EC2 R8g 实例。
基于 Graviton4 的实例(C8g,M8g,R8g,X8g 实例)支持带宽权重配置,该特性允许您为实例配置更高的基线网络带宽,你可以通过 Amazon EC2 实例支持 VPC 和 EBS 的带宽配置 了解该特性。
要了解如何将工作负载迁移到基于 Graviton 的实例,请参阅 Amazon Graviton Fast Start 迅速开启程序计划和 Porting Advisor for Graviton。
为了全面评估 Graviton 实例对 Valkey 性能的影响,我们设置了一个详细的测试环境。这个环境旨在模拟真实世界的使用场景,同时保证测试结果的可比性和可重复性。
测试客户端 memtier_benchmark
Valkey 环境及配置
EC2 实例类型,4xlarge 大小的实例
Vlkey
网络设置
通过这样详细的测试环境设置,我们旨在获得全面、准确的性能数据,为 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 进行配置,首先根据测试机型修改最大内存分配为机型最大内存的 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
为了全面评估 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分钟)
本次测试用到的基础操作命令如下:
通过这些多样化的测试案例,我们能够全面评估 Valkey 在 Graviton 实例上的性能特征,包括吞吐量、延迟、资源利用率等多个方面。这将帮助我们深入理解 Graviton 架构对 Valkey 性能的影响,并为潜在的用户提供有价值的参考信息。
经过测试我们收集了大量数据来比较 Valkey 在各实例、各场景的性能/性价比。以下是测试数据的汇总表,表格中各个实例规格对应的数值为吞吐性能 OPS/sec。其中,以 r6i 实例性能数据 和 OD 价格作为 100% 基准值进行归一化:
根据该表,我们综合考虑性能和性价比,得到下面图表:
测试结果分析:
基于 Graviton 实例在性能上大幅提升,其中基于 Graviton3 的 r7g.4xlarge 和基于 Graviton4 的 r8g.4xlarge 拥有最好的性能:
同时,r7g.4xlarge 和 r8g.4xlarge 拥有最好的性价比:
综上,基于 Graviton4 的 r8g 实例在本文各场景中都具有最好的性价比。同时,建议您基于实际工作负载和业务流量进行进一步测试,作为 Valkey 选型的依据。
你也可以通过下图查看各场景下各个操作类型,在各实例下的平均延时信息:
通过对 Valkey在 x86 和 Graviton 实例上的全面测试和比较,我们得出以下结论和建议:
实例选择建议:
工作负载优化:
成本效益分析:
迁移策略:
总结来说,Amazoniton 处理器在 Valkey 工作负载上展现出显著的性能优势,同时通常还能提供更好的成本效益。根据您的具体需求和预算,r8g.4xlarge 或 r7g.4xlarge 都是非常有竞争力的选择。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。
现已推出:由 Graviton4 提供支持的内存优化型 Amazon EC2 X8g 实例
基于 AWS Graviton4 的 Amazon EC2 R8g 实例:Amazon EC2 中的最高性价比
新的存储优化型 Amazon 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 使用 Amazon Graviton3 实例实现高达 31% 的性价比提升
UnrealEngine 5 结合 AmazonGameLift 在 Graviton3 上的实践
使用 Graviton 4 构建 UE5 Dedicated Server 获得极致性价比
本篇作者
本期最新实验为《创新基石 —— 基于 Graviton 构建差异化生成式AI向量数据库》
✨ 在本次实验中,你可以在基于 Graviton 的 EC2 实例上轻松启动 Milvus 向量数据库,加速您的生成式 AI 应用。基于 Graviton 的 EC2 实例为您提供极佳性价比的向量数据库部署选项。
📱 即刻在云上探索实验室,开启构建开发者探索之旅吧!
⏩[点击进入实验] 构建无限, 探索启程!