暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Apache Kvrocks 2.8.0 发布

Apache Kvrocks 2024-03-12
496

经历近三个月,Apache Kvrocks 2.8.0 版本终于发布了。十分感谢 Release Manager @caipengbo[1] 主导本次的发版流程。该版本包含来自 23 位贡献者的 106 次提交,感谢每一位社区贡献者在背后默默的努力。

该版本也带来了许多令人兴奋的新特性:

  1. 支持 Redis RESP3 协议
  2. 配置文件默认开启 Redis Scan 兼容模式
  3. 通过 RocksDB Write-Batch 来加速集群 Slot 迁移(更快,更省CPU)
  4. 新命令支持:JSON.MGET, SSUBSCRIBE, SUNSUBSCRIBE, RESET, ZRANDMEMBER, ZDIFF, ZDIFFSTORE 等

支持 RESP3 协议

虽然 Redis 社区在短时间不会废弃 RESP2 协议,但还是选择尽早支持 RESP3[2],主要原因是希望更好地兼容各种新的 Redis 客户端。

由于 RESP3 是首次发布,用户使用需要手动增加配置或通过 Config Set 在线开启:

resp3-enabled yes

具体实现可参考:issues #1980[3]

默认开启 Redis SCAN 兼容模式

Kvrocks 在 2.5.0 版本增加了 redis-cursor-compatible 配置项,启用这个配置可以让 Kvrocks 的 Scan 命令返回和 Redis 一样的数值类型游标(之前是字符串类型)。相关设计与实现可参考: Kvrocks 兼容 SCAN Cursor 设计和实现

2.8.0 之后将 redis-cursor-compatible 调整为 yes,也就是默认与 Redis 的 Scan 命令保持兼容,用户也可选择手动关闭该特性。

集群迁移速度优化

在此之前,Kvrocks 数据迁移时使用命令回放的模式:在源端解析数据将其拼接成 Redis 命令发送到目标节点,目标节点再回放这些命令。新的实现方式直接使用 RocksDB 原生 Write-Batch 进行迁移,除了加快迁移速度之外,也可以大大降低迁移带来的 CPU 消耗。

可通过以下配置调整迁移方式:

migrate-type raw-key-value

实现上,源端将迁移数据以底层引擎的原生 Key-Value(RocksDB WriteBatch) 发送到目标端,并直接写入存储引擎,减少了命令的解析开销。实际测试结果:相比于之前,目标端最多可以节省 2 倍的 CPU;对于较小的值(100byte)的数据迁移,新的迁移方式比原来基于命令的方式快了 2.75 倍

具体实现见: PR #2067[4]

此外,相比于回放 Redis 命令方式,也可更精准的进行流控。用户通过以下配置可控制每次发送数据的批次大小和发送速度:

migrate-batch-size-kb 16
migrate-batch-rate-limit-mb 16

为了支持原生 Key-Value 迁移方式,Kvrocks 新增了 ApplyBatch
命令用来写入迁移数据,用户也可以利用这个命令进行加速数据写入。

当然,考虑到新老版本之间的兼容性问题,Kvrocks 也增加了回退机制。开启 raw-key-value
数据迁移方式时,开始阶段会先检查目标端是否支持 ApplyBatch
命令。如不支持,将自动使用旧的基于 Redis 命令的迁移方式,具体参考:PR #2117[5]

另外,基于稳定性的考虑,2.8.0 并没有将 raw-key-value
设置为默认迁移方式,而需要用户自己手动打开,未来版本会考虑将其变成默认行为。

最后

另外值得一提的是社区正在开发 RedisSearch 模块,十分期待在未来的版本中看到 RedisSearch,感兴趣可关注: issues #2064[6]

除了以上更新之外,该版本也修复了一些 bug 以及做了许多特性增强,欢迎点击原文阅读更多变更内容。

参考资料
[1]

@caipengbo: https://github.com/caipengbo

[2]

RESP3: https://github.com/redis/redis-specifications/blob/master/protocol/RESP3.md

[3]

issues #1980: https://github.com/apache/kvrocks/issues/1980

[4]

PR #2067: https://github.com/apache/kvrocks/pull/2067

[5]

PR #2117: https://github.com/apache/kvrocks/pull/2117

[6]

issues #2064: https://github.com/apache/kvrocks/issues/2064


最后修改时间:2024-03-12 16:33:45
文章转载自Apache Kvrocks,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论