What‘s new in PikiwiDB (Pika) v3.5.3 (正式版)

随着 Redis 宣布采用双协议以维护其商业利益,PikiwiDB (Pika) 社区非常荣幸地宣布之际,我们的最新 v3.5.3 正式生产可用版本现已发布。

v3.5.3 版本不仅修复了长期存在的 Bug,还引入了一系列新特性。这些新特性包括 Pika 对 ACL 的支持、移除了 Sharing 模式的残留 Slot 代码、命令执行的快慢分离、Redis Stream 支持、大 key 分析工具、以及 Pika 分布式集群的全自动化 failover 等。此外,我们在 3.5.3 版本中增加了更多的自动化测试用例,以提高 Pika 服务的稳定性和健壮性,确保用户能够享受到更高效、更稳定的使用体验。本文将详细介绍本次更新的主要功能、Bug 修复和性能提升。

在深入探讨 3.5.3 版本的更新内容之前,请注意以下几点声明:

  1. 由于商标问题,Pika 项目已更名为 PikiwiDB。在本文中,我们将使用 PikiwiDB (Pika) 来指代项目,项目地址为:https://github.com/OpenAtomFoundation/pika

  2. 我们创建了一个新项目 https://github.com/OpenAtomFoundation/pikiwidb,这是一个基于 Raft 协议实现的兼容 Redis 协议的大容量 KV 数据库,主要面向强一致性数据场景,例如存储约 10TiB 规模的元数据。PikiwiDB 将专门用于指代此项目。

  3. 我们为 PikiwiDB 设计了一个新的 logo,作为其商标,并已在相关政府机构注册。

1 主要更新

1.1 支持 ACL

PikiwiDB (Pika) 3.5.3 版本正式全面支持 Redis ACL,为未来在云原生 Pika 集群中支持多租户场景奠定了基础。在此之前,Pika 已经支持了 Redis 的用户认证方式,如 auth/userpass/requirepass,以及通过 pika.conf 中的 userblacklist 配置命令黑名单模式。本次更新保持了向后兼容,并支持这些已有的使用方式。

我们还确保 PikiwiDB (Pika) 的 ACL 实现与 Redis ACL 完全兼容,通过将 Redis 的所有 ACL TCL 测试集纳入 PikiwiDB (Pika) 的测试集中。

关键 PR 链接:

  • PikiwiDB (Pika) 支持 ACL

  • 修正 ACL 用户认证错误问题

  • ACL 向前兼容 userblacklist

  • 添加 Redis ACL 测试集

1.2 混合存储模型支持 bitmap

在单体环境下,同时优化 PikiwiDB (Pika) 的读 / 写 /compaction 是一项挑战。在 v3.5.2 版本中,我们引入了由缓存 Redis 和 RocksDB 构成的混合存储模型,并支持了 string/list/set/zset/hashtable 五种数据结构。在 3.5.3 版本中,我们增加了对 bitmap 的支持。

此外,我们在 3.5.3 版本中支持对 Redis 缓存进行动态参数调整。

关键 PR 链接:

  • PikiwiDB (Pika) 支持 bitmap

  • 支持对 Redis 缓存进行动态调参

1.3 快慢命令分离

为了避免慢命令阻塞快命令的执行,我们在 Codis-Proxy 和 PikiwiDB (Pika) 两个层面实现了快慢命令分离。

关键 PR 链接:

  • 实现快慢命令分离

1.4 Redis Stream 支持

虽然 PikiwiDB (Pika) 之前支持了 Redis pubsub,但它只能进行在线消息传递。在 3.5.3 版本中,我们增加了对 Redis Stream 的有限支持,类似于消息队列(MQ),以便更安全地传递消息。为了确保数据的安全性,我们在底层引擎 BlackWidow 中特别添加了对 Stream 数据类型的支持。

关键 PR 链接:

  • Pika 支持 Redis Stream

请注意,Pika Stream 目前还不支持消费组消费,这将在后续版本中实现。

1.5 云原生集群

在 PikiwiDB (Pika) 3.5.0 版本中,我们开源了 Pika-Operator,它支持在 K8s 上部署 Pika 主从对。在 3.5.2 版本中,我们基于 Kubeblocks 的 Pika-Operator 支持了在 K8s 上部署类似 Codis 的 Pika Cluster,但当时还不支持动态扩缩容。

在 3.5.3 版本中,最新的 Pika-Operator 已经支持了 Codis Group 级别的节点扩缩容,并且支持数据的 Rebalance。

关键 PR 链接:

  • Pika-Operator 支持 Pika 集群自动扩容

  • 优化 codis slot 迁移速度,支持动态修改迁移线程和速度

  • Pika-operator 支持 namespace,可在不同 namespace 下部署不同的集群

  • Pika-operator 支持监控指标采集,自动拉起 pika-expoter

1.6 Compaction 优化

PikiwiDB (Pika) 的底层磁盘存储引擎 RocksDB 在进行 compaction 时会显著影响 PikiwiDB (Pika) 的读写性能。因此,控制好 compaction 是优化 Pika 读写性能的关键。

关键 PR 链接:

  • 添加 CompactRange 命令,支持对一定范围内的 key 进行 compact

  • 提升 Compaction 速度,减少 Compaction 耗时

  • 执行 shutdown 命令时调用 disable compaction,提升进程退出速度

1.7 自动 Failover

PikiwiDB (Pika) 集群目前是基于 Codis 实现的。为了提高基于 Codis 的 PikiwiDB (Pika) Cluster 的易用性,我们对 Codis 进行了许多扩展。

原始的 Codis 不支持 Group 内的 Failover,需要使用 Redis Sentinel,这会导致运维成本增加。我们在 Codis Dashboard 中加入了 sentinel 的功能,实现了对 Group 内主从的自动 failover。

关键 PR 链接:

  • PikiwiDB (Pika) 分布式集群支持自动 failover

1.8 可观测性提升

PikiwiDB (Pika) 的可观测性关键组件是 Pika-Exporter。在 3.5.2 版本中,我们虽然添加了 Redis Cache 缓存热数据,但缺少监控指标。在 3.5.3 版本中,我们增加了包括命中率、每秒命中次数、Redis Cache 内存使用量、Redis Cache 个数、Redis Cache DB 个数 等指标。

关键 PR 链接:

  • Pika exporter 暴露 cache 相关的数据采集指标

  • PikiwiDB (Pika) 分布式集群 Codis proxy 新增可观测指标

  • 修复 dbsize 计算错误问题

  • 修复网络监控指标统计不准确的问题

1.9 数据一致性

3.5.3 版本修复了许多 PikiwiDB (Pika) 主从同步问题,确保数据的一致性。

关键 PR 链接:

  • 修复主从复制过程中,slave 节点收到 master 异常回包后的处理逻辑

  • 修复 Pika cache 部分场景下 cache 和 DB 数据不一致的问题

  • 修复全量复制失败后,未做处理导致数据丢失问题

  • 修复主从复制过程中,主实例执行 bgsave 过程中,没有正确回应从的同步请求

  • 全量复制过程中,添加数据同步状态,明确数据同步进度

  • 修复从库在 Apply binlog 时,没有对操作的 key 加锁,导致数据不一致的问题

  • 修复迁移数据后数据不一致的问题

1.10 测试集增加

PikiwiDB (Pika) 的测试集由 gtest 单测、Redis TCL 测试集和 Go 测试集组成。在 3.5.3 版本中,我们增加了 Codis 集群 e2e 测试。

关键 PR 链接:

  • Pika TCL 测试集

  • Pika Gotest 测试集

1.11 工具集更新

PikiwiDB (Pika) 一直重视工具集的建设,所有相关工具都可以在 https://github.com/OpenAtomFoundation/pika/tree/unstable/tools 中找到。在 3.5.3 版本中,我们新增了一个工具:

  • PikiwiDB (Pika) 支持大 key 分析工具

1.12 文档更新

PikiwiDB (Pika) 的文档主要是 wiki 文档。在 3.5.3 版本中,我们更新了 Pika 支持的 Redis 命令文档。

文档链接:https://github.com/OpenAtomFoundation/pika/wiki/pika-%E6%94%AF%E6%8C%81%E7%9A%84redis%E6%8E%A5%E5%8F%A3%E5%8F%8A%E5%85%BC%E5%AE%B9%E6%83%85%E5%86%B5

2 发版详情

在第一章节中,我们概述了 3.5.3 版本的主要功能升级和改进。下面详细列出了本次发版的相关 PR。

新特性

  • Pika 支持 ACL

  • 在全量复制过程中,pika 服务的从节点不接收读请求

  • 删除 Sharing 模式残留的 Slot 代码,回归 3.0,以后一个 Pika 下有多个 DB,每个 DB 只有一个 Blackwidow

  • 在 Codis dashboard 协程 panic 时自动恢复服务

  • Pika cache 新增 bimap 数据类型

  • Pika 支持快慢命令分离

  • Pika exporter 暴露 cache 相关的数据采集指标

  • Pika 执行完成 Bgsave 后,保留 unix timepoint

  • Pika 支持动态配置 disable_auto_compations 参数

  • Pika 支持 Redis Stream

  • Pika 支持大 key 分析工具

  • Pika 支持动态调整 Pika cache 参数

  • 更新 Pika benchmark 工具支持更多的接口压测

  • Pika Operator 支持 Pika 集群自动扩容

  • 添加 CompactRange 命令支持对一定范围内的 key 进行 compact

  • 提升 Compaction 速度减少 Compaction 耗时

  • 升级 RocksDB 版本到 v8.7.3

  • Pika 分布式集群 Codis proxy 新增可观测指标

  • Pika 分布式集群支持自动 failover

  • Pika 支持 redis rename-command 功能

  • 优化 codis slot 迁移速度,支持动态修改迁移线程和速度

  • Pika 支持动态调整 max-conn-rbuf-size 参数

  • Pika-operator 支持 namespace,可以在不同的 namespace 下部署不同的集群

  • Pika-operator 支持监控指标采集,自动拉起 pika-expoter

  • ACL 向前兼容 userblacklist

  • 丰富了 Pika TCL 测试集

  • 丰富了 Pika Gotest 测试集

Bug 修复

  • 修复 Pika 有从节点进行全量复制期间会误删除 dump 文件的问题

  • 修复主从复制过程中,slave 节点收到 master 异常回包后的处理逻辑

  • 在 Pika 执行 shutdown 命令时调用 disable compaction, 提升进程退出速度

  • 修复 Codis-dashboard Redis Memory 值不准确的问题

  • INFO 命令耗时优化,降低查磁盘使用量的频率

  • 修复 Rsync 删除临时文件路径不对,删除失败,导致 rocksdb 打开失败的问题

  • 修复 Compact, Bgsave, Info keyspace 命令未指定 db 名称,导致部分命令 coredump 的问题

  • Codis dashboard 用 info replication 替代 info 命令查寻 master ip 降低对 Pika 的性能影响

  • 修复 Pika cache 使用边缘 case,解决部分场景下 cache 和 DB 数据不一致的问题

  • 修复当 dump 文件夹为空时,会启动报错 Segmentation fault 的问题

  • 修复因为 flag 计算错误,导致的部分命令缓存没有生效问题

  • 修复主从复制模式下,主实例 flushdb 后,从实例因为死锁导致的不能访问的问题

  • 修复部分命令未对 RocksDB 的返回值进行判断的问题

  • 规范函数的返回值及初始值

  • 修复网络监控指标统计不准确的问题

  • 修复配置文件加载部分参数异常的问题

  • 修复 Codis dashboard cpu 100% 的问题

  • 修复 Codis fe pika 主从角色显示异常的问题

  • 修复迁移数据后数据不一致的问题

  • 修复 dbsize 计算错误问题

  • 修复扩缩容或者 pod 起停后,Codis-dashboard 界面显示不准确的问题

  • 修复 DB 层重复上锁的问题

  • 修复全量复制失败后,未做处理导致数据丢失问题

  • 修复主从复制过程中,主实例执行 bgsave 过程中,没有正确回应从的同步请求

  • 全量复制过程中,添加数据同步状态,明确数据同步进度

  • 修复从库在 Apply binlog 时,没有对操作的 key 加锁,导致数据不一致的问题

  • 修复 codis slot 迁移过程中 master 实例 coredump 的问题

  • 修复在主从复制过程中,删除正在使用的 dump 文件的问题

  • 修复主从复制过程中从实例 rsync 响应错误的问题

发版标签

https://github.com/OpenAtomFoundation/pika/releases/tag/v3.5.3

社区

PikiwiDB (Pika) 开源社区感谢您的支持,如果您有任何疑问或建议,欢迎加入我们的社区交流群:

  • telegram 群 https://t.me/+gMlTzNacOF1iMTM1

  • 微信助手【请在微信中搜索 PikiwiDB】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/493629.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

USART发送单字节数据原理及程序实现

硬件接线: 显示屏的SCA接在B11,SCL接在B10,串口的RX连接A9,TX连接A10。 新建Serial.c和Serial.h文件 在Serial.c文件中,实现初始化函数,等需要的函数,首先对串口进行初始化,只需要…

@Value注解的使用方式

Value 注解用于从配置文件中获取特定的属性值,并注入到 Spring Bean 中。它有多种使用方式,下面列举了一些常见的用法: 先贴图: 1. 注入单个属性值 Component public class MyBean {Value("${my.property}")private S…

DVB-S系统仿真学习

DVB-S系统用于卫星电视信号传输,发送端框图如下所示 扰码 实际数字通信中,载荷数据的码元会出现长连0或长连1的情况,不利于接收端提取时钟信号,同时会使得数据流中含有大量的低频分量,使得QPSK调制器的相位长时间不变…

2024.3.25 QT

思维导图 作业:完善对话框,点击登录对话框 如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个0k按钮,用户点击Ok后,关闭登录界面,跳转到其他界面如果账号和密码不…

JAVA面试大全之JVM和调休篇

目录 1、类加载机制 1.1、类加载的生命周期? 1.2、类加载器的层次? 1.3、Class.forName()和ClassLoader.loadClass()区别? 1.4、JVM有哪些类加载机制? 2、内存结构 2.1、说说JVM内存整体的结构?线程私有还是共享的? 2.2…

春季装修选择传统空调还是中央空调?约克VRF中央空调帮你分析

春天,不仅是万物复苏的时刻,也是家居装修的黄金时期。正所谓“一年之计在于春”,气温适中,湿度适宜,正是施工的好时节。而且,春季的空气流通性好,有利于装修材料的干燥与挥发,减少有害物质的残留,对我们的健康也更有保障。更为重要的是,在这个气候不冷不热的季节,我们有更充足的…

推荐几个python的工具

Beautiful Soup Beautiful Soup用于清理和提取HTML和XLM中的数据。 它用于解析HTML文本,并允许数据科学家将文本数据转换为结构化数据,只需几行代码,就可以提取复杂的HTML数据。在某些情况下,您只需要一个表标签,并且…

24.park和unpark方法

1.park方法可以暂停线程,线程状态为wait。 2.unpark方法可以恢复线程,线程状态为runnable。 3.LockSupport的静态方法。 4.park和unpark方法调用不分先后,unpark先调用,park后执行也可以恢复线程。 public class ParkDemo {pu…

2024-03-27 作业

作业要求: 整理课上代码整理思维导图完成下面类 作业1: 完成了 作业2: 作业3: class myString {private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度public://无参构造myString():si…

如何使用ChatGPT准备即将到来的面试How to Use ChatGPT to Prepare for an Upcoming Interview

使用ChatGPT来准备即将到来的面试可以非常有帮助,因为它可以模拟真实的面试场景并提供反馈。以下是一些步骤和提示,说明如何利用ChatGPT进行面试准备: 研究职位和公司:在与ChatGPT对话之前,先对你申请的职位和公司进行…

基于 VB6的猜拳游戏

基于 VB6的猜拳游戏 1 欢迎页的制作 welcomeFrom 添加一个定时器 代码如下: Private Sub Form_Load()定时器Timer1的时间间隔设置为1000毫秒Timer1.Interval 1000Timer1.Enabled TrueEnd SubPrivate Sub Timer1_Timer()关闭当前窗体Unload MeReadyFrom.Show…

一键换脸的facefusion

FaceFusion 一个开源换脸软件,提供UI界面,启动后可直接在浏览器上面上传图片进行换脸操作。 电脑环境win10,软件pycharm,需要提前安装好python环境,推荐使用Anaconda3。关注文章下方公共号发送 “ 软件安装包 ”可以获…

Leaflet 中创建一个二维地图

要在 Leaflet 中创建一个二维地图&#xff0c;需要以下步骤&#xff1a; 1. 引入 Leaflet 库 首先&#xff0c;你需要在 HTML 文件中引入 Leaflet 库的 CSS 和 JavaScript 文件。你可以从官方网站下载 Leaflet&#xff0c;或者通过 CDN 引入。 <!-- Leaflet CSS --> &…

2024年上半年数学建模竞赛一览表(附赠12场竞赛的优秀论文+格式要求)[电工、妈杯、数维、五一等12场]

为了帮助大家更好地备战今年上半年十二场数学建模竞赛&#xff0c;我们为大家收集到了这十二场相关竞赛的优秀论文以及格式要求&#xff0c;具体内容如下所示。 资料获取 在文末 文中资料来源 名称竞赛官方网站天府杯https://www.tfmssy.org.cn/认证杯http://www.tzmcm.cn/i…

SpringBoot学习笔记一、SpringBoot应用初创建以及应用

一、创建SpringBoot的两种方式 1.Spring Initializr方式创建 &#xff08;1&#xff09;第一步在IDEA中选择 File-->NEW-->Project &#xff0c;选择 Spring Initializr &#xff0c;指定Maven坐标、包名、指定 JDK 版本 1.8 &#xff0c;然后点击Next 。如下图&#x…

一款比 K8S 更好用的编排工具——Nomod 单机部署

上下文 最近公司需要调研类似 EMCHub 这样支持算力共享的服务。第一直觉是使用 K8S 或 K3S&#xff0c;作为 CNCF 孵化的顶级项目&#xff0c;同时也是当前云原生生态使用最广的编排系统。但是在学习 EMC Hub 源码过程中&#xff0c;偶然发现它是基于 Nomad 做的集群管理。 相…

STM32收发HEX数据包

在实际应用中&#xff0c;STM32的串口通信都是以数据包格式进行收发&#xff0c;这个数据包一般都包含包头和包尾&#xff0c;表示一个数据包。源代码在文末给出 数据包格式&#xff1a; 固定长度&#xff0c;含包头包尾 可变包长&#xff0c;含包头包尾 问题1&#xff1a;当…

学点儿数据库_Day11_多表、等值连接、内连接、模糊查找

1 多表 学生表、班级表、课程表、班级课程表 关系型数据库&#xff1a; MySql、SqlServer、Oracle 相同的数据出现多次绝不是一件好事&#xff0c;这是关系数据库设计的基础。关系表的设计就是要把信息分解成多个表&#xff0c;一个数据一个表&#xff0c;各表通过某些共同的…

真机笔记(3) 真机需求讲解

目录 拓扑分析&#xff1a; 设计理念&#xff1a; 1. 生产区交换需求&#xff1a; 2. 生产区交换需求&#xff1a; 3. 服务器区交换需求&#xff1a; 4. 路由设计 5. 地址规划&#xff1a; 拓扑分析&#xff1a; 蓝色&#xff1a;网线 红色&#xff1a;多模光纤 黄色&am…

AI Agent(LLM Agent)入门解读

1. 什么是AI Agent&#xff1f; AI Agent可以理解为一个智能体&#xff0c;包括感知模块、规划决策模块和行动模块&#xff0c;类似于人类的五官、大脑和肢体。它能帮助人类处理复杂的任务&#xff0c;并能根据环境反馈进行学习和调整。 五官可以理解为感知模块&#xff0c;大…