Valkey与Redis评估对比:开源替代方案的技术演进
#作者:朱雷
文章目录
- 1 概述
- 1.1内存数据结构存储核心特性
- 1.2主流内存数据结构存储设计与适用场景
- 1.3目前主流内存数据结构存储对比
- 2 Valkey 说明
- 2.1 哨兵架构设计
- 2.2 集群架构设计
- 2.3 valkey 使用企业和业内生态
- 3 评估指标
- 4 评估结果
1 概述
内存数据结构存储是指将数据以特定的逻辑和物理形式直接组织在计算机主内存(RAM)中,以支持高效的动态操作(如增删改查)和实时处理。其核心目标是利用内存的高速读写能力,结合合适的数据结构,满足对性能要求严苛的场景需求。
1.1内存数据结构存储核心特性
1. 超低延迟
- 内存访问速度:RAM的访问延迟在纳秒级(约50-100ns),而磁盘I/O延迟在毫秒级(约10ms),两者相差10万倍。
- 适用场景:高频交易系统、实时推荐引擎、缓存层(如Redis、Memcached)。
2. 动态操作效率 - 随机访问与原地修改:内存数据结构支持直接通过指针或偏移量访问元素,无需磁盘寻道或块读取。
- 对比磁盘存储:如B树在磁盘上高效,但内存中哈希表或跳表的查找效率更高(O(1) vs O(log n))。
3. 灵活性与可扩展性 - 动态内存分配:支持运行时按需扩展(如链表、动态数组),而磁盘存储需预分配块或处理碎片化。
- 复杂逻辑结构:内存中可高效实现图、树等复杂结构,而磁盘存储需额外设计索引或压缩策略。
1.2主流内存数据结构存储设计与适用场景
1.3目前主流内存数据结构存储对比
2 Valkey 说明
Valkey 是一个开源(BSD-3 许可)的内存数据结构存储,可用作数据库、缓存、消息代理和流引擎。Valkey 提供多种数据结构,例如 字符串、哈希、列表、集合、支持范围查询的有序集合、位图、超级日志、地理空间索引和流。Valkey 内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久化功能,并通过Valkey Sentinel提供高可用性,并通过Valkey Cluster实现自动分区。
为了实现最佳性能,Valkey 使用内存数据集。Valkey 可以通过定期将数据集转储到磁盘或将每个命令附加到基于磁盘的日志来持久化数据。如果您只需要功能丰富的联网内存缓存,也可以禁用持久化功能。Valkey 支持异步复制,具有快速无阻塞同步和网络分裂时自动重新连接以及部分重新同步的功能。可以在大多数编程语言中使用 Valkey。
该项目是在过渡到新的可用源许可证之前从开源 Redis 项目fork而来的,源于Redis 7.2.4 分支,由Redis原核心开发者组建,专注于兼容性优化和云原生适配。采用 BSD-3 协议,允许自由使用、修改和分发,并由Linux基金会管理,社区贡献者包括 AWS、阿里云、谷歌等头部企业,治理模式开放透明。
Valkey是Redis 许可证协议问题或闭源后的直接替代品,由Redis 的原社区开发者开发和维护,完全兼容 开源版本Redis 协议与架构设计,使用方式与Redis类似,用户可以像使用Redis一样使用Valkey。自项目启动以来,Valkey已经在业界被广泛使用,并且得到了亚马逊云科技的积极支持。
2.1 哨兵架构设计
Valkey Sentinel 的主要功能包括:
1. 监控 Valkey 实例状态:Valkey Sentinel 负责监控 Valkey 主从节点的状态,通过定期检查确保节点的可用性,检测节点的心跳、配置变化等情况。
2. 自动故障检测与通知:当 Valkey Sentinel 发现某个节点不可用时,会立即通知其他 Sentinel 和客户端,触发故障转移流程。
3. 自动故障转移:在主节点不可用时,Valkey Sentinel 负责选择一个合适的
从节点升级为主节点,并通知其他节点和客户端更新配置,实现自动的故障转移。
4. 配置提供:Valkey Sentinel 为客户端提供关于当前 Valkey 集群的信息,包括主从关系、故障节点等,客户端可以通过 Sentinel 获取集群配置以便进行连接。
5. 通知机制:Valkey Sentinel 通过发布订阅模式实现对节点状态变化的通知,使其他节点和客户端能够及时了解集群的变化。
2.2 集群架构设计
Valkey Cluster 架构设计是围绕高性能、高可用性和可扩展性构建的,其核心思想源于 Redis Cluster,但在实现细节和优化方向上进行了创新,以适应现代分布式系统的需求。
以下是 Valkey Cluster 架构设计的关键点和分析:
- 分布式架构与数据分片
- 数据分片(Sharding):
Valkey Cluster 将数据分散到多个节点上,每个节点负责一部分数据(称为“槽位”或“slot”)。默认情况下,数据被分为 16384 个槽位,每个槽位可以映射到集群中的任意节点。这种设计使得数据可以水平扩展,支持大规模数据存储。 - 节点角色:
集群中的节点分为两类:- 主节点(Master):负责处理读写请求,并维护槽位的数据。
- 从节点(Replica):作为主节点的副本,提供高可用性和读扩展能力。当主节点故障时,从节点可以自动提升为主节点。
- 一致性哈希:
Valkey Cluster 使用一致性哈希算法来分配槽位,确保数据均匀分布,并在节点增减时最小化数据迁移。
- 高可用性与故障转移
- 故障检测与自动恢复:
Valkey Cluster 通过节点间的 Gossip 协议定期交换状态信息,检测节点是否存活。如果主节点故障,集群会自动将从节点提升为主节点,并重新分配槽位。 - 多副本与数据持久化:
每个槽位的数据在集群中可以有多个副本(主从复制),确保数据的高可用性。同时,Valkey 支持 RDB 和 AOF 两种持久化方式,防止数据丢失。 - 手动故障转移:
除了自动故障转移,Valkey 还支持手动故障转移(如 CLUSTER FAILOVER 命令),允许管理员在维护时主动切换主节点。
- 集群通信与协议
- Gossip 协议:
Valkey Cluster 使用 Gossip 协议进行节点间的通信,传播集群状态信息(如节点上线、下线、槽位分配等)。这种协议具有去中心化、容错性强的特点。 - MOVED 重定向:
当客户端请求的槽位不在当前节点时,节点会返回 MOVED 错误,并告知客户端正确的节点地址。客户端需要重新路由请求到正确的节点。 - ASK 重定向:
在槽位迁移过程中,如果客户端请求的槽位正在迁移中,节点会返回 ASK 错误,并告知客户端临时目标节点。客户端需要先发送 ASKING 命令,再发送实际请求。
- 可扩展性与性能优化
- 水平扩展:
Valkey Cluster 支持动态添加或删除节点,集群会自动重新分配槽位,实现无缝扩展。 - 读写分离:
客户端可以配置只从从节点读取数据(READONLY 命令),减轻主节点的压力,提高读性能。 - Pipeline 与异步操作:
Valkey 支持 Pipeline 操作,允许客户端批量发送命令,减少网络往返时间。此外,异步操作(如异步复制)可以进一步提高性能。 - 内存优化:
Valkey 在内存管理上进行了优化,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等),并提供了内存淘汰策略(如 LRU、LFU)来管理内存。
- 监控与管理
- 集群状态监控:
Valkey 提供了 CLUSTER INFO、CLUSTER NODES 等命令,允许管理员查看集群状态、节点信息、槽位分配等。 - 配置管理:
管理员可以通过 CLUSTER MEET、CLUSTER ADDSLOTS 等命令动态管理集群配置。 - 慢查询日志:
Valkey 支持慢查询日志,帮助管理员识别性能瓶颈。
- 与 Redis Cluster 的区别
- 性能优化:
Valkey 在 Redis Cluster 的基础上进行了性能优化,例如改进了网络通信协议、减少了重定向开销等。 - 功能增强:
Valkey 可能增加了一些新功能(如更灵活的槽位分配策略、更高效的故障转移机制等),具体取决于其版本和实现。 - 生态兼容性:
Valkey 通常保持与 Redis Cluster 的兼容性,使得现有的 Redis 客户端和工具可以无缝迁移到 Valkey。
2.3 valkey 使用企业和业内生态
2.3.1 Valkey 的企业应用现状
1. 云服务厂商的采用
- AWS:将Valkey集成至ElastiCache服务,推出Valkey 7.2版本,提供20%-33%的成本节约,并推出Valkey Glide客户端,支持多语言(Java、Python等)及智能拓扑感知,适配微服务、实时消息等场景。
- 阿里云:作为Valkey社区核心维护者,将内部Redis优化成果(如集群无感扩缩容、主从无感HA)贡献至Valkey,并计划引入TairHash、TairString等增强型数据结构。
- 华为云:通过参与Valkey社区建设,推动Sentinel组件优化及逻辑多租引擎方案,帮助企业降低Redis使用门槛。
2. 操作系统与发行版的集成 - Arch Linux:2025年4月宣布将Valkey作为默认内存型数据库,取代Redis,成为首个在核心发行版中完成迁移的主流系统。
- 其他Linux发行版:Valkey的BSD-3协议兼容性及Redis命令兼容性,使其成为Red Hat、Ubuntu等发行版考虑替换Redis的候选方案。
3. 企业级应用场景 - 缓存与会话存储:Valkey的毫秒级延迟和高吞吐量,使其成为电商、社交平台等场景的首选。
- 实时消息队列:通过Pub/Sub模式及RDMA技术,Valkey在金融交易、IoT数据流等场景中替代Kafka或RabbitMQ。
- 分布式锁与任务调度:利用SETNX、Lua脚本等特性,Valkey在微服务架构中实现跨节点资源协调。
2.3.2 Valkey 的业内生态
1. 开源社区与基金会支持 - Linux基金会托管:Valkey由社区驱动,避免Redis因商业利益导致的许可证变更风险,吸引Redis核心贡献者加入。
- 活跃的开发者生态:GitHub上Valkey已获超2万Star,社区贡献者涵盖AWS、阿里云、谷歌等企业,形成技术迭代闭环。
2. 技术扩展与插件生态 - Valkey Over RDMA:通过RDMA技术优化网络通信,降低集群节点间延迟,适用于高频交易、AI模型推理等场景。
- 可扩展插件系统:支持自定义数据结构(如RedisJSON的替代方案)及访问模式,满足特定行业需求。
3. 商业解决方案与合作伙伴 - 云原生托管服务:AWS ElastiCache for Valkey、阿里云Tair(基于Valkey)等,提供自动化运维、监控告警等企业级功能。
- 硬件协同优化:与AWS Graviton4等ARM架构芯片深度适配,通过IO多线程技术提升性能,降低TCO。
4. 行业联盟与标准制定 - 跨云兼容性:Valkey Glide客户端通过“大多数规则算法”实现集群拓扑动态感知,确保混合云环境下的高可用性。
- 安全与合规:支持RDB+复制backlog双通道持久化,满足金融、医疗等行业的强一致性需求。
3 评估指标
4 评估结果
Valkey作为Redis社区分叉后的开源项目,凭借其开源协议优势和持续技术创新,已在AWS、阿里云、华为云等头部云厂商及Arch Linux等主流发行版中快速落地,形成了覆盖云原生、数据库、分布式系统等领域的生态格局,展现出成为新一代高性能键值存储标准的潜力。可以作为Redis存在协议风险或闭源之后的替代品