漫谈KVRocks

什么是 KVRocks

Kvrocks是一种基于RocksDB之上兼容RESP协议的NoSQL剑指数据库。
设计的核心目标就是将原生的Redis依赖纯内存资源转化为依赖其他SSD资源,在同样保证服务性能满足需求的前提将,降低服务成本。

核心功能

  • 兼容Redis 的协议(RESP)
  • 支持组从复制, 类似于Mysql BinLog复制
  • 支持namespace隔离, 类似于Redis 的不同DB
  • 高可用,支持 Redis Sentinel 自动主从切换

架构设计

漫谈KVRocks_第1张图片

整体上来说架构设计不复杂,从逻辑上来说是三层架构:

  • 最上层就是网络协议层, 网络通信模型使用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

你可能感兴趣的:(RocksDB,KVrocks,架构设计,c++,经验分享,后端)