CHANGELOG_CN.MD
在命令调度层引入了 fast/slow 两类线程池,并实现了跨池借用机制,提升在负载不均衡情况下的资源利用效率和系统可观测性。新增相关监控指标、动态配置能力和 INFO/CONFIG 支持,使线程池执行更细粒度可控
将 BRAFT(分布式一致性组件)引入代码库,PikiwiDB 实现 Raft 强一致性,区别于以前的最终一致性,保证用户数据高可用
统计命令处理不同阶段的耗时,包括 Redis 缓存的读取/更新、写入 binlog、存储处理时间#3036@wangshao1
当 client 关闭 close 链接之后,服务端在处理请求时跳过执行这条连接上收到的请求,避免出现请求堵塞问题#3111@wangshao1
修复 Pika-slave 节点恢复后,codis-dashboard 没有更新元信息的问题#3038@wangshao1
String 类型的 Key 可以在配置文件中的 max-key-size-in-cache 参数配置 RedisCache 中最大的 Key 的大小#3043@Mixficsol
Set, List, Zset 类型可以在配置文件中的 cache-value-item-max-size 参数配置 RedisCache 中最大元素个数#3043@Mixficsol
更新 Codis、Pika 和 Pika_exporter,修正版本时间记录方式,Pika 的构建时间改为使用 Make 编译时间并调整为 UTC 时间标准#3049@Mixficsol
在 pipeline模式下将 auth 命令和后续在 Pipeline 中的命令划分到命令线程池#3098@Mixficsol
修复 rediscache部分读接口没有加锁,当rediscache在做 rehash 时会做数据挪动,可能导致数据竞争的问题#3088@wangshao1
修复 Pika 在处理长时间耗时请求时,因超时关闭连接导致积累大量 close_wait 状态连接的问题,防止达到连接数上限后停止接收新连接#3089@wangshao1
修复 pika 中 zadd 命令在单行多次添加同一 member 时与 Redis 返回值不一致的问题#3108@YuCai18
Pika 从实例执行完 slaveof no one 与主节点解除主从关系后,将 slaveof 信息持久化到配置文件中#2973@cheniujh
Pika-Operater 主从模式支持数据备份和恢复的功能#2968@buzhimingyonghu
在配置文件中添加 log-net-activities 参数,支持动态关闭或者建立连接部分日志的打印,可以 config get/set动态调整#2964@cheniujh
将 Pika info 指标中提供的 repl_connect_status 加入到了 pika_exporter,方便运维同学对 Pika 的主从状态判断#2961@cheniujh
升级 kubeblocks 至 0.9 版本,对 Pika-operater 做升级和优化,简化代码,支持实例的缩容#2860@XiaoLiang2333
Pika-Operater 支持拉起主从模式,拉起方式详见 readme 文档#2903@[XiaoLiang2333](https://github.com/XiaoLiang2333)
Pika-Exporter 支持新增 keyspace_hits、keyspace_misses 指标,运维同学可以根据指标判断当前业务 key 的命中率#2579@chenbt
RedisCache 中不存储大 key, 避免占用内存过多或者存储大 key 将业务多次访问的热 key 淘汰掉,影响性能#2557@QlQlqiqi
增加了 Pika 在各个时间段的耗时统计,RocksDB 执行时间,锁获取的时间,写 Binlog 的时间,读取更新 Redis-Cache 的时间 #3036 @wangshao1
修复了 Pika,Pika_exporter, Codis 组件的版本信息查看 #3054 #3057 @Mixficsol
支持 Zset, List, Set 类型命令在 RedisCache 中最大元素个数和所有类型 Key 的大小更新到 Redis-Cache 的阈值可通过配置文件进行配置,并支持通过 Config 命令进行动态修改 #3043 #3047 @Mixficsol
Pika 支持动态修改 max-subcompactions 配置参数,可以对 L0 层的 compact 操作做运行时优化#2965@cheniujh
将 Pika-Migrate 的代码移除至 tools 文件夹下,方便不同环境编译二进制进行数据迁移#2941@chenbt-hz
更新 GitHub Action 工作流中的 actions/checkout 为 v5, 增强安全性和性能#2833@baerwang
Pika 支持新的 compact 策略,增加最长时间未使用文件和最多删除条目文件的 compact 策略 ,提升 Pika 写性能#2557@QlQlqiqi
修复 Pika-Exporter 上下版本不兼容,导致 Exporter 日志打印过多浪费磁盘资源的问题#2971@buzhimingyonghu
将 slowlog 的日志级别调整成为 INFO,解决 Slowlog 同时打印三份,会导致磁盘占用过多的问题#2948@buzhimingyonghu
修复 Pika 实例无法单独设置管理员密码的问题#2920@buzhimingyonghu
修复 epoll 循环中 std::shared_ptr in_conn 对象的引用计数器的析构位置,确保 Pika 不会出现连接不及时关闭的现象#2904@cheniujh
修复了从节点下线之后 Dashboard 频繁给 Proxy 发送元信息变更请求,增加了从节点主客观下线逻辑 #3049 @Mixficsol
为RTC功能添加开关,如果Get/HGet在RTC路径上就未命中缓存,后面流转到正常路径上时直接读DB,不再读cache#2841@cheniujh
添加定时删除日志的任务,默认 7 天删除一次,可以根据自己需求在 config 文件中进行配置#2829@XiaoLiang2333
flushall 命令写 flushdb 为 binlog,如果是多 DB 状态,每个 DB 分别写一条,保证从节点消费的顺序 #2846@cheniujh
incr、append 命令在传输 binlog 时,使用 pksetexat 命令,防止因为不正确的操作导致数据无法过期,出现脏数据#2833@chejinge
添加更多的 RocksDB 指标,配置中增加 open_rocksdb_statistics_tickers 字段,默认为no。开启会损耗+1.5%#2658@baixin01
修复执行 zremrangebyrank 命令出现异常错误信号,导致 Pika 进程崩溃的问题#2891@chejinge
修复 Rpushx 命令执行时未更新 RedisCache 的问题,避免出现 DB、缓存不一致的问题#2879@hahahashen
修复 blpop/brpop 更新数据库的时候未更新缓存可能回导致 RocksDB 数据库与 RedisCache 缓存不一致的现象#2858@cheniujh
用 Rocky 环境替代 CentOS, github CI 流程总体支持 MacOS/Ubuntu/Rocky 三个环境#2823@QlQlqiqi
解决 Pika slave_prorority 赋值不准确导致从节点无法升主,不能使用 Redis-Sentinel 的问题#2813@chejinge
优化主从复制,确保 Master 端的 SlaveNode 在提交 bgsave 任务前进入 DBSync 状态,防止bgsave执行时的 binlog 在极端情况下被清除#2798@cheniujh
修改主从复制过程中 flushdb binlog 的处理逻辑,确保按照顺序执行,避免出现主从不一致的情况#2794@cheniujh
修复 BlockCache 计算不准确的问题#2797@bigdaronlee163
添加标志位、时间戳和返回值机制,确保 Pika 在执行 flushdb 且处理异步删除旧目录时冲突时正确处理#2790@cheniujh
修复集群模式主备自动容灾过程中,老主节点降备过程中,因为 sent_offset 和 acked_offset 不相等,导致状态 Error 的情况#2789@luky116
PkpatternMatchDel 在删除数据库的同时删除 RedisCache,保证数据的一致性#2777@haiyang426
修复 Sentinel 主从切换时,由于主节点和从节点数据量不一致导致主从切换状态扭转错误问题#2766@cheniujh
incr、append 命令在传输 binlog 时,使用 pksetexat 命令,防止因为不正确的操作导致数据无法过期,出现脏数据#2833@chejinge
添加定时删除日志的任务,默认 7 天删除一次,可以根据自己需求在 config 文件中进行配置#2829@XiaoLiang2333
优化主从复制,确保 Master 端的 SlaveNode 在提交 bgsave 任务前进入 DBSync 状态,防止bgsave执行时的 binlog 在极端情况下被清除#2798@cheniujh
更新 Pika Docker Readme, 可以按照 Readme 在 Docker 中部署 Pika 服务#2743@luky116
支持对更多的 RocksDB 参数进行动态调整,用户根据不同的业务使用场景调整参数提升 Pika 的读写性能#2728@cheniujh
重构主从复制模式 slave 节点的主从同步线程模型,尽可能减少 binlog 消费阻塞问题#2638@cheniujh
增加主从复制状态指标 repl_connect_status,方便运维人员清晰明确的判断当前的主从复制状态#2656@cheniujh
新增 RocksDB Compaction 策略动态调整参数,用户可以根据业务调整 Compaction 策略,降低 Compaction 操作对服务性能的损耗#2538@wangshao1
修改 Pika 自动化测试客户端链接 server 端的超时时间,避免因为长时间断开导致测试失败#2863@cheniujh
修复 blpop/brpop 更新数据库的时候未更新缓存可能回导致 RocksDB 数据库与 RedisCache 缓存不一致的现象#2858@cheniujh
PkPatternMatchDel 命令在删除 DB 的同时删除 RedisCache,避免出现 RocksDB 数据库与 RedisCache 缓存数据不一致的情况#2839@chejinge
用 Rocky 环境替代 CentOS, github CI 流程总体支持 MacOS/Ubuntu/Rocky 三个环境#2823@QlQlqiqi
修改 slave_priority 的默认值,防止因为运维同学没有设置该值,导致主从切换失败#2813@chejinge
修复 Pika block-cache 信息计算不准确,内存使用计算不标准的问题#2797@bigdaronlee163
修改主从复制过程中 flushdb binlog 的处理逻辑,确保按照顺序执行,避免出现主从不一致的情况#2794@cheniujh
添加标志位、时间戳和返回值机制,确保 Pika 在执行 flushdb 且处理异步删除旧目录时冲突时正确处理#2790@cheniujh
修改主从复制过程中 flushdb binlog 的处理逻辑,确保按照顺序执行,避免出现主从不一致的情况#2790@cheniujh
修复 PKPatternMatchDel 命令未删除迭代器可能会导致 RocksDB 删除数据不彻底的问题#2786@wangshao1
修复 sentinel 主从切换时,由于主节点和从节点数据量不一致导致主从切换状态扭转错误问题#2766@cheniujh
修复 Pksetat 命令更新 DB 的同时未更新 RedisCache 缓存,可能会存在 RocksDB 数据库与 RedisCache 缓存不一致的问题#2759@chejinge
修复 Pika-port 传输数据过程中报错的问题#2758@guangkun123
Pksetexat 更新数据库的同时更新 RedisCache,避免出现RocksDB 数据库与 RedisCache 缓存不一致的问题#2736@longfar-ncy
修复 RedisCache 层因为没有使用 storage 层解析的 ttl 可能会导致 RocksDB 数据库与 RedisCache 缓存不一致的问题#2729@chejinge
修复 Stream 类型数据不能被 RocksDB compaction 会导致过期数据一直存在的问题#2724@wangshao1
修复 Pika cmdID 赋值在 Cmd 初始函数中,可能会导致并发构造的时候出现内存泄漏的问题#2692@gukj-spel
Mget 支持多 key 查询缓存, 记录未命中的 key 去 DB 中查询,提升 Pika 服务的读性能#2675@chejinge
Codis 支持 info 命令, 可以通过该命令查询 Codis-proxy 的 info 信息#2688@chienguo
Pika 主从复制新增监控指标 repl_connect_status, 可以更加明确清晰的确定当前的主从复制的状态#2638@cheniujh
Pika 支持第三代存储引擎 Floyd, 通过支持多 rocksdb 实例、对 Blob 的使用进行优化、对过期数据的清理进行优化,提升了 Pika 实例的读写性能#2413@wangshao1
更新 Pika Docker Readme, 可以按照 Readme 在 Docker 中部署 Pika 服务#2743@luky116
支持对更多的 RocksDB 参数进行动态调整,用户根据不同的业务使用场景调整参数提升 Pika 的读写性能#2728@cheniujh
对 HyperLogLog 和 String 进行类型隔离,确保 HyperLogLog 操作与 String 操作明确区分开#2720@saz97
重构主从复制模式 slave 节点的主从同步线程模型,尽可能减少 binlog 消费阻塞问题#2638@cheniujh
新增 RocksDB Compaction 策略动态调整参数,用户可以根据业务调整 Compaction 策略,降低 Compaction 操作对服务性能的损耗#2538@MalikHou
修复 iter 未被析构,导致 pkpatternmatchdel 在返回之前不会删除 iter,这可能会导致 rocksdb 永远引用一个版本,导致数据不符合预期的问题#2785@wangshao1
修复 Pika-port 传输数据过程中报错的问题#2758@guangkun123
修复批量扩容时,多个 slave 同时连接 master, 短时间多次 bgsave 导致部分从节点数据不完整的问题#2746@cheniujh
修复 Slotmigrate 迁移数据的过程中,返回值设置错误,异常场景下会终止数据迁移的问题#2741@chejinge
修复 Mget 没有使用解析 ttl 的函数导致出现部分key的ttl未被更新,数据不一致的问题#2730@chejinge
修复 pkpatternmatchdel 命令使用错误导致的 stream 类型数据删除异常的问题#2726@wangshao1
修复 Pika cmdID 赋值在 Cmd 初始函数中,可能会导致并发构造的时候出现内存泄漏的问题#2692@gukj-spel
修复 ExpectedStale 未考虑 String 类型, 如果存在已经过期的 String 类型的 key, ExpectedStale 会返回错误的问题#2682@wangshao1
Pika 支持动态调整全量同步限速参数 rsync-timeout-ms 和 throttle-bytes-per-second#2633@cheniujh
将 info key space 1 的结果输出至 info all 并展示到监控界面中#2603@XiaoLiang2333
Pika 磁盘IO 限速参数支持 OnlyRead、OnlyWrite、ReadAndWrite,默认支持OnlyWrite#2599@vacheli
修复 Pika Expoter 启动时不带参数导致启动失败问题#2640@Polaris3003
修复当 max-rsync-parallel-num 大于4,slave 会在主从复制时 coredump 的问题#2595@chejinge
修复因修改 zsetscorekeycomparatorimpl 字典序比较熟顺序,导致353 352极端场景不兼容的问题#2583 @wangshao1
修复 Flushall 和 FlushDB 死锁的隐患,并删除 FlushSubDB 接口#2533@Mixficsol
删除 Sharing 模式残留的 Slot,Pika 下只有 DB,一个 Pika 下有多个 DB#2251 @Mixficsol
Pika exporter 暴露 cache 相关的数据采集指标#2318 @dingxiaoshuai
Pika 支持快慢命令分离#2162 @dingxiaoshuai
升级 RocksDB 版本到 v8.7.3#2157@JasirVoriya
Pika 分布式集群 Codis proxy 新增可观测指标#2199@dingxiaoshuai
Pika 支持动态调整 max-conn-rbuf-size 参数#2434 @HappyUncle
Pika-operator 支持 namespace,可以在不同的 namespace 下部署不同的集群#2480 @Y-Rookie
ACL 向前兼容 userblacklist#2459 @dingxiaoshuai
在 Pika 执行 shutdown 命令时调用 disable compaction, 提升进程退出速度 #2345 @panlei-coder
修复 Compact ,Bgsave ,Info keyspace 命令未指定db名称,导致部分命令 coredump 的问题#2194@u6th9d
Codis dashboard 用 info replication 替代 info 命令查寻 master ip 降低对 Pika 的性能影响 #2198 @chenbt-hz
修复 Pika cache 使用边缘case,解决部分场景下 cache 和 DB 数据不一致的问题#2225 @chejinge
修复当 dump 文件夹为空时,会启动报错 Segmentation fault 的问题#2265 @chenbt-hz
修复部分命令未对 RocksDB 的返回值进行判断的问题#2187@callme-taota
修复从库在 Apply binlog 时,没有对操作的 key 加锁,导致数据不一致的问题#2409 @chejinge
Codis-Proxy 支持动态修改配置参数 #2103 @dingxiaoshuai123
补全 Go Test 测试用例 #2063@dingxiaoshuai123
修复因删除 Clearreplicationid 写进 binlog 导致的全量复制问题 #2136 @Mixficsol
修复 decr 命令返回值错误问题 #2092 @dingxiaoshuai123
flush 线程数和 compaction 线程数动态调整,合二为一 #2014 @Tianpingan
升级了 RocksDB 版本到 v8.3.3 #1999 @dingxiaoshuai123
新增周期性打印工作队列的长度功能,在队列阻塞的时候可以快速定位问题 #1978 @Tianpingan
实现在 K8s 环境上 Pika 服务的自动注册,在启动时自动注册,从而实现集群的自组织 #1931 @machinly
使用 make -j 提高构建速度 #1933 @xiezheng-XD
修复了 Macos 环境下编译使用 tools 导致编译不过的问题 #2011 @A2ureStone
在 v3.5.0 版本我们去除了 Rsync,使用自研的全量同步方案替代 Rsync,这个版本的全量同步有断点续传,速率限制,文件检验等特点
在 v3.5.0 版本我们兼容并支持了更多的 Redis 命令
在 v3.5.0 版本我们新加了 pika_exporter 工具来监测 Pika 的可观测性指标,并在后期添加了一些新的指标来完善 Pika 的可观测性
在 v3.5.0 版本,Pika 支持 MacOS 平台,CentOS 平台,Ubuntu 平台进行编译使用
在 v3.5.0 版本我们支持了 Ubuntu,CentOS,MacOS 下的 CI,在测试方面新加了 Go 的集成测试,TCL 单元测试,Python 的 E2E 测试
#1534 #1772 #1769 #1347 #1268 #1693 #1362 #1538 #1246 #1357 #1534 #1772
@machinly @wanghenshui @chenbt-hz @Tangruilin @kernelai @Mixficsol