image.png

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

Valkey 与 Graviton 实例简介

Valkey 简介

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

主要特点:

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

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

Amazon Graviton 实例

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

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

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

全新一代 Graviton4 实例

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

image.png

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

image.png

要了解更多信息,请参阅 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

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

Valkey 环境及配置

  • OS:Amazon Linux 2023
  • EC2 实例类型,4xlarge 大小的实例

    • r6g.4xlarge / r6i.4xlarge / r7i.xlarge / r7g.4xlarge / r8g.4xlarge
    • 您可以通过 Amazon EC2 实例类型页面查看各实例的详细信息
  • Vlkey

    • 版本:valkey-8.0.1
    • 模式:单机

网络设置

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

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

测试用例说明

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

测试场景 IDio-threadspipelineEC2 实例大小CPU 内存
16不使用4xlarge16C 128G
210不使用4xlarge16C 128G
314不使用4xlarge16C 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分钟)

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

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

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

测试结果对比

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

1747271947336.jpg

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

image.png

image.png

测试结果分析:

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

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

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

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

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

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

image.png

总结与建议

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

实例选择建议:

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

工作负载优化:

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

成本效益分析:

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

迁移策略:

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

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

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

相关博客

Graviton 新品发布

现已推出:由 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 获得极致性价比

本篇作者

image.png

本期最新实验为《创新基石 —— 基于 Graviton 构建差异化生成式AI向量数据库
✨ 在本次实验中,你可以在基于 Graviton 的 EC2 实例上轻松启动 Milvus 向量数据库,加速您的生成式 AI 应用。基于 Graviton 的 EC2 实例为您提供极佳性价比的向量数据库部署选项。
📱 即刻在云上探索实验室,开启构建开发者探索之旅吧!
[点击进入实验] 构建无限, 探索启程!

亚马逊云开发者
2.9k 声望9.6k 粉丝

亚马逊云开发者社区是面向开发者交流与互动的平台。在这里,你可以分享和获取有关云计算、人工智能、IoT、区块链等相关技术和前沿知识,也可以与同行或爱好者们交流探讨,共同成长。