什么是 KVRocks
Kvrocks是一种基于RocksDB之上兼容RESP协议的NoSQL剑指数据库。
设计的核心目标就是将原生的Redis依赖纯内存资源转化为依赖其他SSD资源,在同样保证服务性能满足需求的前提将,降低服务成本。
核心功能
- 兼容Redis 的协议(RESP)
- 支持组从复制, 类似于Mysql BinLog复制
- 支持namespace隔离, 类似于Redis 的不同DB
- 高可用,支持 Redis Sentinel 自动主从切换
架构设计

整体上来说架构设计不复杂,从逻辑上来说是三层架构:
- 最上层就是网络协议层, 网络通信模型使用libevent 实现,同时实现RESP做数据解析,下层是他的工作线程, 这部分工作线程主要负责收发请求, 解析成具体的数据协议进行工作。
- 中间一层是数据结构协议层,这一层支持常见的Redis的数据结构的协议,包括字符串、Hash、List、Zset等数据协议, 将原始Redis 请求协议转化为RocksDB的存储数据协议()
- 最底层存储就是直接使用RocksDB的存储,属于RocksDB的相关内容。MemTable是一个内存数据结构,他保存了罗盘到SST文件前的数据。而WAL(Write-ahead Log),则是在数据更新的时候同步记录,用于发生故障时候的数据记录,
对比
候选者 | PIKA | Tendis | KVrocks | 开源Tair |
---|---|---|---|---|
Redis兼容性 | 良 | 优 | 优 | 差 |
Sedis兼容性 | 优 | 差 | 优 | 差 |
性能 | 优 | 优 | 优 | – |
特有功能 | 良 | 优 | 良 | – |
稳定性 | 优 | 良 | 良 | – |
- 兼容性: Pika、Tendis、KVrocks都是以无缝替换Redis设计,按照Redis的RESP协议开发了交互接口;开源版Tair是阿里巴巴公司自研的缓存组件,没有使用Redis的RESP协议,因此兼容性最差。PiKa是面向客户端
- 二次开发: 其中KVrock风格清晰,完全基于开源网络库实现,方便二次开发。PIKA 网络库基于自家的Pink二次开发困难
- 稳定性: Pika的复制模式是基于Rsync 的多进程复制模式比较重
总结
当然KVrocks并不是完全没有缺点,KVrock完全开源,并且代码简单,与原生Redis框架更为接近,方便二次开发,适合于后续功能的微定制。
参考
标题 | URL |
---|---|
kvrocks源码 | https://github.com/KvrocksLabs/kvrocks |
摩天轮Kvrocks | https://www.modb.pro/wiki/956 |
分布式磁盘 KV 存储 – Kvrocks | https://cloud.tencent.com/developer/news/841350 |
携程 kvrocks (Redis On SSD) 实践 | https://www.infoq.cn/article/uksre9h9y0qefquhes2p |
KV开源组件选型对比 | https://zhuanlan.zhihu.com/p/425732242 |
RocksDB零基础学习 | https://segmentfault.com/a/1190000023098183 |
版权声明:本文为qq_42828391原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。