最近开源的基于 SSD 的 Redis 实现以及任务队列 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hulk
V2EX    编程

最近开源的基于 SSD 的 Redis 实现以及任务队列

  •  
  •   hulk 2019-08-19 14:17:23 +08:00 5553 次点击
    这是一个创建于 2319 天前的主题,其中的信息可能已经有所发展或是发生改变。

    美图基础服务团队这几天开源了两个项目:

    1. https://github.com/meitu/kvrocks 这个是基于 rocksdb 之上实现 Redis 协议和数据结构的存储

    2. https://github.com/meitu/lmstfy 基于 Redis ZSet/List 实现的 Task(Job) Queue

    kvrocks

    kvrocks 类似的实现主要之前 Qihoo360 开源的 pika 以及 SSDB, 至于为什么还要自己再造个轮子的主要原因如下:

    • 依赖管理,我们更期望使用外部已开源且成熟的库

    比如网络库 libevent

    • 实现设计理念差异

    比如 pika 使用 rsync 做全量同步,我个人觉得这个东西有问题很难定位又不好解决,当然使用 rysnc 优点是很简单另外又具备很重要的功能就是断点续传。但在我们的实现中,这部分自己基于 rocksdb 的 bakcup 来做实际上也是很简单

    • 功能设计的一些差异点

    比如 pika 把多种数据结构实现在多个 rocksdb 的 column family 以来提高性能,而我们认为这块 key 的唯一性不应该牺牲,会给业务带来困扰。另外,我们通过 namespace 的方式来支持不同业务共用一个实例,而数据是隔离的。还有类似 bitmap 实现上,pika 最大支持 128 KB, 而实际业务使用中这个远远不够, 我们也进行了重新设计

    • 希望代码更加简洁和规范(这个点完全是主观想法,需要自己判断)

    实际上,我们其实更希望不要去造这种重复的轮子,但基于以上几个诉求基于 pika 去做一些改造对我们来说,不管成本和可行性来说远不如按照自己的想法去实现。另外,这个东西的门槛,我自己认为是在完全把控 rocksdb 而不是上层实现。我们的数据结构设计上大部分是借鉴自 pika 的 blackwisdow, 十分感谢 pika。我们也希望我们可以给大家提供除了 pika 之外的另外一个选型,完全不是坏事。

    kvrocks 目前在美图这边已经有不少业务在使用,目前在公司内部已经上线半年左右且接入了不少业务

    LMSTFY(Let Me Schedule Task For You)

    至于 Task(Job) Queue 这个目前我们知道的几个队列的选型, 比如: beanstalkd, disque, celery(这个应该算 client 端的任务队列)。beanstalkd 主要问题是没有复制导致服务单点,数据可靠通过 WAL 持久化到磁盘, 数据量大时恢复时间会过长,现在项目也不够活跃了。disque 是 redis 作者开源的另外一个项目,这个本是一个很好的选择,但 Redis 作者预期将这个功能集成到 Redis Module 且项目不再维护,短时间来看这个功能还没有集成到 Redis Module 里面。所以我们后续选择基于 Redis 实现 Task Queue 的功能,且支持通过 token 来支持 Redis 多集群从而支持容量的扩展,具体大家可以看项目的 README。

    我们后续也会有专门的文章来详细说明这两个东西的设计考虑点和实现

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1010 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:51 PVG 06:51 LAX 14:51 JFK 17:51
    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