Valkey 单点性能比肩 Redis 集群了?Valkey8.0 新特性分析|得物技术

一、 背景

Valkey 社区于 2024 年 09 月发布了 Valkey8.0 正式版,在之前的文章《Redis 是单线程模型?》中,我们提到,Redis 社区在 Redis6.0 中引入了多线程 IO 特性,将 Redis 单节点访问请求从 10W/s 提升到 20W/s,而在 Valkey8.0 版本中,通过引入异步 IO 线程、内存预取(Prefetch)、内存访问分摊(MAA)等新特性,并且除了将读写网络数据卸载到 IO 线程执行外,还会将 event 事件循环、对象内存释放等耗时动作也卸载到 IO 线程执行,使得 Valkey 单节点访问请求可以提升到 100W/s,大幅提升 Valkey 单节点性能。

Valkey 8.0中引入的异步 IO 与 Redis 6.0 中的多线程 IO 有什么区别?Valkey8.0 中如何应用内存预取和内存访问分摊技术进一步来提升性能的?本篇文章让我们来一起看看。

  • 2024 年,Redis 商业支持公司 Redis Labs 宣布 Redis 核心代码的许可证从 BSD 变更为 RSALv2 ,明确禁止云厂商提供 Redis 托管服务,这一决定直接导致社区分裂。
  • 为维护开源自由,Linux 基金会联合多家科技公司(包括 AWS、Google Cloud、Oracle 等)宣布支持 Valkey ,Valkey 基于 Redis 7.2.4 开发,作为 Redis 的替代分支。
  • Valkey8.0 为 Valkey 社区发布的首个主要大版本。
  • 最新消息,在 Redis 项目创始人 antirez 今年加入 Redis 商业公司 5 个月后,Redis 宣传从 Redis8 开始,Redis 项目重新开源。

二、 异步 IO 线程背景

Redis6.0多线程IO

在 Redis 6.0 中引入了多线程 IO 特性,用来处理网络数据的读写和协议解析,读写数据执行流程如下所示:

在这里插入图片描述

在 Redis6.0 中,读数据流程是主线程先将所有可读客户端加入一个队列,全部处理完后,再通过 RR 算法将这些可读客户端分配给 IO 线程,由 IO 线程执行读数据;写数据流程类似处理。

尽管引入多线程 IO 大幅提升了 Redis 性能,但是 Redis6.0 的多线程 IO 仍然存在一些不足:

  • 主线程在处理客户端命令时,IO 线程会均处于空闲状态;由于主线程会阻塞等待所有 IO 线程完成读写数据,主线程在执行 IO 相关任务期间的性能受到最慢 IO 线程速度的限制
  • 由于主线程同步等待 IO 线程,IO 线程仅执行读取解析和写入操作,主线程仍然承担大部分 IO 任务
Valkey 8.0 异步 IO 线程

Valkey8.0 通过使用任务队列使主线程向 IO 线程发送任务,IO 线程异步并行执行任务提升整体性能。Valkey 8.0 异步 IO 线程工作流程整体设计图如下所示:

在这里插入图片描述

IO 线程初始化

在 Valkey 启动时进行初始化的时候,根据配置的线程数量server.io_threads_num 决定是否创建异步 IO 线程,如果server.io_threads_n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值