小米从2012年开始正式涉足开源,不光积极参与开源社区,修复bug、提交代码,同时逐渐将自研的系统或框架进行开源,先后开源了企业级、高可用、可扩展的监控系统Open-Falcon、分布式 Key-Value存储系统Pegasus、移动端深度学习框架MACE以及智能SQL优化与改写工具SOAR。
小米内部倡导开源、拥抱开源,而开源也是小米工程文化的一个重要组成部分。小米在发展过程中,也为开源生态做了很多贡献。以HBase为例,小米过去共培养了9位committer和2位PMC member,单2018年,小米就为HBase贡献了306个patch,占HBase所有patch贡献量的23%。Kudu方面,小米先后培养了2名committer。
今天我们就跟最近成为Apache Kudu committer and PMC的赖迎春近距离对话。
赖迎春:Kudu项目最先是由Cloudera公司发起的一个开源项目,2016年7月成为Apache软件基金会顶级项目。
Kudu的定位是提供一个既有媲美HDFS顺序扫描的性能,也同时具有HBase随机读写特性的存储系统,在与Spark SQL或impala结合后,能够提供高性能的OLAP服务。另一方面,相比HBase、HDFS等Apache项目,目前Kudu项目还算是比较年轻,使用场景也相对小一些。Kudu项目的用户来自全球各地,活跃的项目贡献者主要集中在Cloudera公司内部,国内的小米、蚂蚁金服、网易等公司也有一些活跃贡献者。
同其他Apache项目一样,Kudu项目PMC会不定期评估项目contributor所提交patch的数量和质量、社区建设的参与度,达到一定标准后[pz2] 会在PMC内部发起投票,投票要求至少有数个+1,并且不能有-1,通过后就可以向contributor发起加入committer的邀请了。加入PMC的流程类似,不过有更严格的要求。
赖迎春:在Kudu项目进入Apache孵化器之前的2014年,小米就参与到Kudu项目的核心开发了,是Kudu的最早期的支持者之一。小米的常冰琳就是Kudu项目的早期贡献者之一,也是项目元老级committer and PMC member,最近他还翻译了一本介绍Kudu的英文书籍。
小米的开源文化是很浓厚的,仅我们存储平台的HBase项目组就先后培养了9位committer和2位PMC member。我所在的KV系统组的Pegasus项目也在2017年底开源,目前在GitHub上已有1000多个star,我们也计划争取明年能够进入Apache孵化器。而在我去年第三季度刚开始接手Kudu时,团队leader覃左言就给我设定了中长期目标---成为Kudu项目committer。在这样的团队氛围下,拥抱开源、回馈社区就是自然而然的了。
其实当我收到Kudu PMC邀请加入committer的邮件时,是感到很意外的,我原本的计划是至少需要1年的持续贡献。我向社区提的第一个patch是在去年的12月,开始提的bugfix和feature都还比较简单,也是通过由易到难的过程,逐步摸清流程,也逐步体验到这种Apache项目的参与感。后面随着提的patch数量的增多,质量和分量也跟着提升,也能够在开源社区参与一些问题分析和讨论,帮助一些Kudu新用户解决问题。我们所提的patch都是针对小米公司生产环境中遇到的问题提出的一些改进和解决方案。能将这些心得和经验分享给更多人,同时避免自己踩过的坑别人再踩一遍,这本身就是一种成就感。
赖迎春:成为Apache顶级项目后,Kudu社区热度越发提升,也不断有新特性和性能提升的patch合入,目前每1~2个季度都会有一个次级版本发布。Kudu社区也很活跃,Slack、邮件列表上有来自全球各地的开发者和使用者在上面讨论交流。
Kudu全球当前一共有22名committer,这些人同时也都是PMC member。
赖迎春:Kudu是一个分布式存储系统,采用列式存储格式,使用针对顺序扫描优化的LSM存储架构,使用RAFT来保证高可用。结合计算引擎后,能对外提供类SQL的查询,能够提供快速插入/更新和高效的扫描,非常适合作为需要实时查询的数据仓库。
此外,Kudu支持实时更新和删除行,以支持延迟到达的数据的写入和更新。同时也提供官方的Hadoop套件支持,能很好地融入Hadoop生态圈。
小米对Kudu的使用主要用于OLAP场景,Kudu是小米OLAP服务底层存储系统之一,Kudu在小米的发展也得益于我们云平台部门存储平台和计算平台的紧密合作。
我们小米公司作为Kudu项目的早期贡献者,从2015年开始就在生产环境中使用Kudu,经过几年的磨炼,这些宝贵的经验和心得也都传承下来。目前的业务量、数据量、查询量也都稳步增长,是小米最重要的存储系统之一。其中比较大的业务有大数据部的增长分析项目,信息部的数据市集项目等,他们有数千张表,每天有百亿行数据的写入,Kudu给他们提供了稳定可靠的存储和分析服务。
赖迎春:参与Kudu项目的过程中,除了代码、系统架构以外,还学习到开源项目开发、管理、规范化建设的很多知识和经验,后续也能将这些经验平移到其他开源项目的建设上去,比如我们自己开源的KV存储系统Pegasus。
成为committer and PMC member是Kudu PMC对我之前工作的肯定,是一种激励,也是一种对我未来工作的期许。我自己的感觉是有了更强的责任感,是一个开源项目新角色的开始,今后的工作和对社区的贡献也不能因为取得了这一点小成就而有所懈怠。
赖迎春:开源项目的思路是相通的,不光适用于Kudu,也适合其他开源项目,我的理解是有三方面:
1、多阅读官方文档和paper,没有涉及和深入的部分可以阅读代码。
2、多跟社区交流沟通,可以向社区邮件列表发信,或者在官方Slack上提问交流,国内也有比较活跃的微信群。
3、分享精神。有项目经验的可以多提交Patch,数量上来的同时也要保证质量和分量,也可以贡献相关的技术文章,坚持下去,社区会看到你的工作和贡献的。
总之,希望有更多的使用者和开发者,能够将自己遇到的问题和使用经验分享贡献出来,一起把Kudu建设得更美好。
写在最后
小米为什么要积极拥抱开源、贡献开源?小米集团技术委员会主席崔宝秋博士曾经表示:
除了要站在巨人肩膀上,还要为巨人指方向。好多开源项目可以拿来即用,没必要单独再开发。
此外,拥抱开源有助于提高工程师编程能力。提升一个工程师代码水平和编程能力很好的方法就是读大量代码,大量的开源代码可以迅速提升工程师技术水平,也可以提升工程师文化,让大家喜欢技术、喜欢开放。在这个过程中,业务上的代码质量和工程文化也会得到提升。最重要的是,当整个工程文化为公司发展、工程师个人成长带来便利时,更多的人才会加入我们。
最后,小米还在招各种工程师,想要加入我们,点击了解☞☞来小米,一起搞大事!
本文首发于公众号“小米云技术”,点击阅读原文。