Kvrocks: 一款开源的企业级磁盘 KV 存储服务

2021-06-17 22:56:53 +08:00
 hulk

完整文章见: https://zhuanlan.zhihu.com/p/381670563

Kvrocks 是基于 RocksDB 之上兼容 Redis 协议的 NoSQL 存储服务,设计目标是提供一个低成本以及大容量的 Redis 服务,作为 Redis 在大数据量场景的互补服务,选择兼容 Redis 协议是因为简单易用且业务迁移成本低。目前线上使用的公司包含: 美图、携程、百度以及白山云等,在线上经过两年多大规模实例的验证。

项目核心功能包含:

GitHub 地址: https://github.com/kvrockslabs/

2827 次点击
所在节点    分享创造
14 条回复
zagfai
2021-06-17 23:55:18 +08:00
门槛低了越做越多这些开源项目那意义在哪?
akira
2021-06-18 01:10:44 +08:00
赞一个先
airyland
2021-06-18 04:11:58 +08:00
似乎 pika tendis 也是类似方案,好奇优势差异是什么?
haozes
2021-06-18 11:14:05 +08:00
🔥前留名
hulk
2021-06-21 15:15:38 +08:00
@zagfai 你可以你来,别看不懂开始喷
hulk
2021-06-21 15:18:59 +08:00
@airyland

pika 功能基本一样,有部分结构设计也来自 360 的 balckwidow 项目,然而为什么不直接使用 pika 的几个主要原因:

* Redis 语义兼容问题,我们希望更加接近 Redis 而不是每个类型都是独立的 DB
* 主从同步设计上,pika 使用 rsync 容易成为问题定位的黑盒,kvrocks 直接基于 rocksdb 的 checkpoint 来实现,同时我们同步时基于 RocksDB WAL 不是 binlog,不需要回放,所以同步性能也会更好
* 功能设计上,容量大之后意味着业务混用会变多,我们希望业务之间数据可以隔离,kvrocks 主要是通过 namespace 来实现
* profiling 能力,磁盘 kv 相比于内存 Redis 明显的问题是毛刺点会因为磁盘任务而增多,定位具体毛刺点的 profiling 能力就显得更加重要,我们通过允许对命令级别的慢请求进行 profiling 日志收集和输出,方便定位问题
* 代码质量,这个比较主观,这里不多说,有兴趣可以自己去看 看 kvrocks 、pika 代码

其他还比如为了解决全量 compaction 带来的毛刺点问题,我们也对自身 compaction 检查策略进行一些优化。Tendis 主要是集群方案过于复杂,真的不确定外部有多少公司真能用起来。
zagfai
2021-06-21 17:02:04 +08:00
@hulk 所以解决的问题是什么?我几年前习惯用 redis 。。千万级别用户 DAU 的案例没啥不能解决的。
然后小项目我是懒到 redis 都不用了,啥都直接扔 mysql,可以说百万日活级创业级项目都难以出现什么瓶颈。
hulk
2021-06-21 17:07:34 +08:00
@zagfai 对于大部分公司来说,如果存储的数据量太小,确实不是瓶颈。很多公司的 Redis 集群回到百 G 甚至是 T 级别,那么成本和实例容量是一个比较大的挑战。而 MySQL 其实也是选择,但使用场景和性能不是一个维度的,比如很多业务就是一个简单的 KV + 过期场景,使用 MySQL 或者其他选型也不是问题,那么就需要业务去实现这些逻辑。
hulk
2021-06-21 17:13:53 +08:00
另外,门槛低不低这个问题先不讨论,既然开源出来能够让百度、携程、白山云采用肯定是有自身的优势和设计理念,而不同设计做出来的系统当然也完全不是一回事。每个公司对于这方面的诉求不一样,就像 OS/Kernel 也同样一堆类似的选型,选择自己合适才是最重要。

包含发文章之前,我们也知道一定会有人想知道差异点是什么,选择不在里面去说明,主要是从我们角度来说,没办法完全保证客观去对比,所以更希望是有人抛出来的时候,再来公开的讨论而不是写在文章里面到处传播。
zagfai
2021-06-21 17:22:03 +08:00
别说什么能够让百度携程白云山采用这种话。。。采用量是多少。。 一个小团队试一试?那多数是因为 kpi 问题,没事找事做的。

Redis 数百 G 上 T 是啥问题?是对 Redis 误用的问题。上百 G 的 Redis 如果不是千万日活级别的 api,多数是被滥用,更可能是需要 MongoDB 。

我喷点其实在于,你列举出的那些项目核心功能,哪个 Redis 没有?如果有的话,差别在哪?或者说,你们这跟 Redis 有啥本质区别?
hulk
2021-06-21 18:34:23 +08:00
请阅读完再来说?有啥区别? 一个数据在磁盘,一个在内存,你觉得有什么区别? 另外,实例数有千级别,够不够?

最后一条回复你,开源并不是求着你用。
GrayXu
2021-07-12 11:28:55 +08:00
@zagfai 有可能不是对 redis 的误用,而是你没有想象过这样的需求场景。
dvd888
2022-06-20 16:10:20 +08:00
没有了? github 上不见了。
hulk
2022-06-27 12:30:13 +08:00
@dvd888 贡献到 Apache 了,GitHub 地址: https://github.com/apache/incubator-kvrocks

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/784076

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX