暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

专访Kvrocks开源PMC:适用于大数据量场景的存储服务

ITPUB 2022-07-14
2721

本期我们有幸采访了Kvrocks开源PMC林添毅老师,一起探讨适用于大数据量场景的存储服务——Kvrocks,Kvrocks 是基于 RocksDB 之上兼容 Redis 协议的 NoSQL 存储服务。


林添毅

Apache Kvrocks(Incubating) 的PMC

国际电商SaaS公司AfterShip担任技术经理


在大数据处理的诸多环节当中,存储是尤其关键的一环。只有实现了稳固的数据存储,才能为后续的大数据分析、数据可视化等环节提供稳定的地支持。

海量数据时代的到来,面临着许多挑战和亟待解决的问题。

• 巨大的数据量带来存储成本压力;

• 多样化数据类型需要不同的存储支撑;

• 数据产生速度加快,海量数据如何快速有效的分析;

• 商业价值高,非结构化数据价值密度低,海量数据要深挖数据价值,数据为价值资产需要长期保存。

其中,未存储、未保存的数据即被丢弃的数据。而在数据化时代的今天,数据中所蕴藏的价值有无限可能,丢弃数据就是丢弃价值和机会。


问题 1:老师,您好!请简单介绍一下您的技术背景、目前所负责的领域


您好,很荣幸接受ITPUB的采访,我先自我介绍一下,我是林添毅。目前是Apache Kvrocks(Incubating) 的PMC,在国际电商SaaS公司AfterShip担任技术经理,负责部分基础服务和业务开发。之前曾经在美图、微博等公司从事队列,分布式 KV 等基础服务的研发。


问题 2:Apache Kvrocks当前的分工情况?


Kvrocks一直都是以开源社区的运作方式,每个人都是独立的贡献者且没有雇佣关系,所以不像商业公司那样有明确的分工和职责。在Kvrocks进入了 Apache 孵化器之前,Core Team 成员大约是每年年初讨论一下的整体方向并放到社区里面(后面也有提到),后续也会有类似规划的讨论且过程也会公开。作为开源组织,社区只能鼓励大家成为更活跃的志愿者,没有权利要求贡献者在时间点去解决什么问题,所以实际上并没有明确的任务分工。在协作方面,需要解决的问题都会统一在社区里面公开讨论,并由愿意解决的人来认领任务。


另外,从 Apache 孵化项目分工来看,当前主要有三种角色:


  • 项目导师:作为 Apache 开源组织和孵化项目之间的纽带,除了传递 Apache Way 的社区运营理念之外,也会帮忙解决项目在进入孵化器过程中遇到的各种问题。除此之外,导师也会作为 Committer 的角色重度参与到项目开发,比如 Kvrocks 的导师 tison 个人也花了大量时间参与项目开发,除了帮助更好的建立社区之外,也通过个人影响力来帮助项目吸引更多关注。 


  • Committer:Committer 和 Contributor 的差异是他们具有代码合并权限。这些人也是从社区中比较活跃的 Contributor选举而来,而Committer身份也仅仅是作为之前贡献的一种认可,从协作流程(责任)和 Contributor 本身不没有太大的差异。


  • Contributor:个人认为不管是使用者、提建议、Issue 还是PR的发起人都算是Contributor,只是使用不同的方式帮助社区变得更好。


问题 3:Apache Kvrocks 是如何进行数据复制?如何实现分布式集群?


当前Kvrocks是类似于Redis的异步复制的方式,第一次同步会使用Full Sync(全量同步) 将当前DB的 Snapshot同步到从库上,从库加载 Snapshot 之后再使用当前最新的 Sequence Number 作为 Partial Sync(增量同步)的起点,让主库把后续的数据持续同步到从库上。具体流程如下:

单纯基于RocksDB的Sequence Number方案在主动切换时可能存在数据不一致的问题。具体讨论见:https://github.com/apache/incubator-kvrocks/issues/462,ShooterIT 实现了全局复制 ID 来解决这个问题,具体PR:https://github.com/apache/incubator-kvrocks/pull/538

关于集群方面,Kvrocks选择是兼容Redis Cluster协议,用户可以直接使用已有的Redis Cluster SDK接入 Kvrocks Cluster。在设计上跟Redis Cluster的差异在于Kvrocks将集群节点发现(拓扑控制)交由外部的组件来做,主要考虑点是Redis Cluster这种无中心的设计,代码写对不太容易,稳定下来需要有大量的用户实践和反馈。如果依赖于外部组件,比如 Zookeeper/ETCD 等可以简单实现拓扑管理的功能,可以在相对短的时间内提供一个可用版本,Kvrocks只需要兼容协议即可,集群介绍文章可参考: https://mp.weixin.qq.com/s/Ev81UGz08aPu50s218ej_w


问题 4:使用Redis有哪些好处?Redis适用于哪些场景?


Redis在国内外各种场景都被广泛应用了,比如存储用户关系,评论计数等。Redis主要的优势在于丰富的数据结构,如: Hash/List/ZSet/Set/String/HyperLogLog/Bitmap 等等,开发可以基于这些数据结构方便实现业务功能。同时,相比于关系型数据来说,开发天然对于这些数据结构都比较熟悉,上手成本极低。

问题 5:如何理解国内开源生态链?在开源实战中,印象最深的事情是什么?


实话说,个人在开源领域也只算是新手,虽然给不少项目提供一些PR,但对于国内的开源生态链算不上熟悉。不过大家有目共睹的是国内优秀的开源项目越来越多,比如最近从Apache毕业成为顶级项目的 Doris/InLong/ShenYu 等。中间印象比较深刻的事情是在今年俄罗斯和乌克兰战争期间,看到了一位来自乌克兰的贡献者 [torwig](https://github.com/torwig) 给我们贡献了不少的代码,惊讶之余有点感动。另外,也有很多贡献者(包含我自己)都是个人工作之外的时间来给项目做贡献,从沟通过程中可以看到对于开源本身的纯粹和热情。

问题 6:您认为 Apache Kvrocks 最突出的优点是什么?


相比于Redis来说,Kvrocks全部数据都在磁盘上,在成本以及容量上都有很大的优势。从之前的经验来看,Kvrocks的使用成本基本是Redis的1/10左右,同时容量也比Redis也大一两个量级。相比于其他的一些磁盘 KV的选型来说,不管是Redis命令的支持完善度、功能特性(Lua/Cluster)还是语义方面,Kvrocks都做得比较好。现在Kvrocks进入Apache孵化器之后,相信未来在社区运营也会变得更加规范和活跃,项目的生命力从概率上也会相比于公司开源项目更好一些。

问题 7:对于分布式集群来说,弹性伸缩的能力是必不可少的,Apache Kvrocks 是如何实现弹性伸缩的?


Kvrocks的数据迁移是基于slot维度的,支持将一个slot上所有数据迁移到另外一个实例的,这跟Redis Cluster中数据迁移是基于Key维度的不一样,Kvrocks作为Redis在大容量上的一个互补服务,其存储的数据量也比Redis大得多,按Key迁移的时间周期不可控。

管控节点或DBA可以通过 **CLUSTERX MIGRATE 命令** 进行slot迁移,即可完成一个特定slot数据的迁移。参考:  https://mp.weixin.qq.com/s/Ev81UGz08aPu50s218ej_w。


问题 8:您认为好的数据库工具应具备哪些条件?


因为数据库类型和细分领域差异比较大,我自己本身不太会回答这个问题。

如果作为一个数据库的使用者的角度来看,应该希望可以具备一下条件:

  • 稳定性好,作为数据库存储应该没有人希望它三天两头有问题;

  • 简单易用,不管是开发还是 DBA,一定希望可以尽量做到开箱即用,没有人喜欢花了九牛二虎之后才能用上,而且还感觉很兴奋;

  • 性能好,每个数据库设计都不太一样,性能是相对场景而言。应该没有一个数据库都够完全覆盖所有场景且能够全做到性能表现都很好;

  • 扩展性好,早期数据库的在线扩容和分库分表应该是很多数据库的噩梦,现在很多数据库也逐步开始解决在线扩容的问题。


问题 9:未来的下一步计划是什么?


Kvrocks每年整体的计划和方向都会在社区里面体现,2022 年的计划见: https://github.com/apache/incubator-kvrocks/projects/2,主要大的几个方向:

  1. 社区版本的集群管控服务,预期 2022 年 7 月份发布第一个版本,项目地址: https://github.com/KvrocksLabs/kvrocks_controller

  2. 丰富数据结构,比如高频使用的 JSON 数据结构,预期后续往多模演进;

  3. 性能以及优化易用性,面向公有云的性能优化以及运维体系还有比较大的提高空间;

  4. 安全性增强方面计划支持 TLS 特性。

不过,作为纯粹的开源组织并不会承诺任何功能和时间,如果觉得有价值十分欢迎直接参与进来。


问题 10:有什么关于开源方向的意见和建议吗?


个人对于开源的理解: 开源本质还是人,如果脱离的人也就没有社区,也就算不上真正的开源。想要吸引到更多优秀的人参与,除了项目定位清晰之外,充分开放讨论和上下文也十分重要,所有重要变更以及决定都应该在社区里面公开,让当前以及后继的开发者都可以轻松参与进来。另外,作为项目早期的参与者要以开放的心态来认可和接纳更加优秀的人,让更加有能力的人来主导项目发展。每个人都只是参与者,重要的不是谁来主导项目而是能不能帮助社区变得更好了。



 推荐阅读 

👇🏻

金融行业分布式数据库是否具备核心系统替换条件



文章转载自ITPUB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论