Kvrocks: 一款开源的企业级磁盘 KV 存储服务 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
hulk
V2EX    分享创造

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

  •  1
     
  •   hulk
    git-hulk 2021-06-17 22:56:53 +08:00 3674 次点击
    这是一个创建于 1627 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    项目核心功能包含:

    • 兼容 Redis 协议
    • 支持主从复制
    • 支持通过 Namespace 隔离不同业务的数据
    • 高可用,支持 Redis Sentinel 自动主从切换
    • 集群模式 (进行中,预计在 7-8 月份完成)

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

    14 条回复    2022-06-27 12:30:13 +08:00
    zagfai
        1
    zagfai  
       2021-06-17 23:55:18 +08:00   1
    门槛低了越做越多这些开源项目那意义在哪?
    akira
        2
    akira  
       2021-06-18 01:10:44 +08:00
    赞一个先
    airyland
        3
    airyland  
       2021-06-18 04:11:58 +08:00
    似乎 pika tendis 也是类似方案,好奇优势差异是什么?
    haozes
        4
    haozes  
       2021-06-18 11:14:05 +08:00
    前留名
    hulk
        5
    hulk  
    OP
       2021-06-21 15:15:38 +08:00
    @zagfai 你可以你来,别看不懂开始喷
    hulk
        6
    hulk  
    OP
       2021-06-21 15:18:59 +08:00
    @airyland

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

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

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

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

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

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

    最后一条回复你,开源并不是求着你用。
    GrayXu
        12
    GrayXu  
       2021-07-12 11:28:55 +08:00
    @zagfai 有可能不是对 redis 的误用,而是你没有想象过这样的需求场景。
    dvd888
        13
    dvd888  
       2022-06-20 16:10:20 +08:00
    没有了? github 上不见了。
    hulk
        14
    hulk  
    OP
       2022-06-27 12:30:13 +08:00
    @dvd888 贡献到 Apache 了,GitHub 地址: https://github.com/apache/incubator-kvrocks
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5276 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 05:49 PVG 13:49 LAX 21:49 JFK 00:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86