开源不仅仅是写代码,而是大家自发地聚集在一起做一件有意义有意思的事情,这个过程中各种各样的问题都是需要沟通的,但现在国内很少有人在认真地做这件事情。在我看来社区比源代码更重要。 ———— PingCAP 联合创始人、CTO 黄东旭
TiDB 社区作为 PingCAP 从零到一搭建的开源社区,在全球各地已经拥有了 1200+ Contributor 和数百个活跃的 Committer 。近日,社区又喜提两枚新晋 Committer :Little-Wallace (刘玮)和 Yisaer ( 高松),今天我们就一起来看看他们在 TiDB 社区的心路历程吧!
Little-Wallace
Raft SIG 和 engine SIG 的 Committer 。本科专业是计算机科学与技术。毕业后在阿里巴巴做搜索引擎存储相关的工作,来到 PingCAP 以后开始做 TiKV 的存储引擎。
Yisaer
scheduling SIG 和 execution SIG 的 Committer 。本科专业是计算机,18 年毕业做后端程序员,后来做 k8s 相关的开发工作。19 年来到 PingCAP ,目前在调度组做研发。
Q: 什么时候开始接触编程的?
Little-Wallace: 我接触编程的时间比较晚,基本是读大学的时候,在大学期间写过一个 OJ(在线编程考试的网站)。
Yisaer: 我从高中信息课开始接触编程,业余了解一些编程的知识,当时完全没想到未来会从事这方面职业。大学一开始我并不在计算机系里就读,那时候已经意识到我比较擅长并且也喜欢编程,所以就转专业转到了计算机系。
Q: 有没有写过好玩的项目?
Yisaer: 我写过最好玩的项目是我的毕业设计 https://github.com/Yisaer/Nest4J 。
它在一个非常冷门的领域里面,是在车床加工里作为材料的板材套量设计。这个项目特别有意思,但是做的人少,资料也特别少,做出来之前我都觉得没有信心,不过最终拿到了学校的优秀毕业设计。工作以后,我把这个项目开源了,陆陆续续不少人通过邮件的方式咨询我关于这个程序的使用方式和改进空间,其中不乏有来自 CNC 领域的专业人士,在这些交流中我也受益良多。
Q: 如何了解到 TiDB 的?
Little-Wallace: 第一次了解到 TiDB 是读大四的时候, PingCAP 的同学来我们学校做宣传,然后知道了 TiDB 这样一个产品。那时候我在数据库方面的知识比较薄弱,很少关注数据库底层的原理与实现。我之前以为 MySQL 也是分布式数据库,后来才知道只是一个单机数据库。原来 PingCAP 在做的是这么酷炫、这么超前的事情。但是刚毕业时我没有来到 PingCAP ,直到 18 年参加 PingCAP 举办的 Hackathon,才算是我第一次接触到开源项目。
Yisaer: 我是先认识到申砾老师,然后才了解 TiDB 的。当时刷知乎看到申砾老师发的招聘信息,就私信他想去实习,可惜挂在了面试阶段。后来 2019 Kubecon 又看到贵司的分享,和 TiDB 社区的 Contributor 交流了关于换工作的想法,他推荐我来贵司,最后经过社招面试终于来到 PingCAP !
Q: 第一次贡献 TiDB 感受如何?
Little-Wallace: 第一次贡献是给 TiKV 提 PR ,需要别的同学来 Review ,然后再对代码进行细致的改进,这和以前的工作体验完全不一样。第一次给 TiDB 贡献是参加 PingCAP 举办的 Hackathon。我们做了一个监控的可视化的项目,监控微信的历史信息和整个集群的数据分布变化,把它做成图表的形式。经过比赛我对 TiDB 架构有了更深入的了解,在技术上学习到了很多,扩展了视野,收获非常大。
Yisaer: 最开始我的工作内容是完善 TiDB 的周边工具,所以贡献 TiDB 代码其实是属于工作范围以外的兴趣研究。当时我对数据库和 TiDB 了解不多,希望通过贡献 TiDB 的方式来熟悉这个领域,还记得我的第一个 TiDB PR 是给 TiDB 的配置项修改一个默认值。
Q: 贡献 TiDB 的动力是什么?
Yisaer:动力是在 TiDB 里解决问题非常具有挑战性挑战,并且很有意思。 在 TiDB 社区,贡献者有等级机制,我逐渐在对应的 SIG 里从 Contributor 变成 Reviewer,再变成 Committer,这个过程让我非常有成就感。
Q: 你在贡献中遇到的最大的困难是什么?
Little-Wallace: 我在贡献 TiDB 过程中遇到的最大的一个困难是 TiKV 在测试过程中突然出了问题,日志里面的错误显示是 RocksDB 的 SST 的顺序错误。这个 BUG 我们排查了非常久,并且找了很多位同事帮忙查看问题,因为产生的错误非常的底层,而且难以复现,最后大家一起逐行分析错误 SST 文件产生前后的各种操作,再对比代码才发现了 RocksDB 的这个隐藏 BUG:https://github.com/facebook/r...,这个过程令我非常难忘。
Yisaer: 最大的困难是 19 年年中,我开始着手调查的一个 TiDB 读数据算子内存 OOM 的问题。这个问题比较难复现,而且我当时对那块代码也并不熟悉。做这个项目的同时还遇到了非常多次 go race 问题。另外由于读数据算子是 TiDB 中至关重要的环节,所以针对解决 OOM 的设计我们也展开了非常多次讨论。整个项目研究,设计,实验反复多次,耗时了将近 5 个月才最终成熟解决。
Q: 你在贡献过程中最有成就感的事情是什么?
Yisaer: 最有成就感的事情还是在解决上面提到的困难上,因为问题的复杂性,后面我又拉了 2 名 TiDB 的同事一起讨论。这个问题修复后,我们投稿了 2020 年的 percona live 并很有幸做了一次分享。虽然花了非常久的时间,但最终不仅解决了 TiDB 的内存管理问题,同时也能将我们的成果分享出去,非常有成就感。
Q: 谈谈你对开源的理解。
Little-Wallace: 我认为开源作为一种生产协作方式,从生产力的角度上来说是一场革命。它能把我们这些零散的力量组织起来,开发出很了不起的产品。 从产品维度上来说,整个社区一起体验产品,能帮助产品试错,不断完善产品的功能。从技术角度上来说,把产品开源出去的同时,也在接纳整个社区的技术反馈,大家会立刻指出来产品技术上的不足,具有能够快速进步的优势。
Yisaer:我觉得开源就是结合群众的力量,将一件事做好并做到极致。 这是我的理解,如果没有开源的话,可能也不会来到贵司,也不会有机会接触这么多的产品。
Q: 你是一个开源爱好者吗?有没有给其他项目贡献的经历?
Yisaer: 其实来贵司之前我是一个开源项目使用爱好者,给 Kubernetes 和 Istio 社区提了很多 issue,主要通过线下分享和线上博客的形式在社区贡献。来贵司后,会更加倾向通过代码的方式来进行贡献。
Q: 有没有给社区小伙伴们的建议?
Little-Wallace: 我觉得对于刚入门的开源爱好者,贡献时首先要了解这个项目需要你做什么。可能很多爱好者刚开始看到一个项目非常庞大,不知道做什么,或者从哪里开始做。我建议大家可以参加比赛,PingCAP 提供了像性能优化大赛、Hackathon 等活动,官方会有导师指导,在比赛中有明确的目标和方向,会比自己给项目做贡献简单方便很多。这样一方面可以了解项目,另一方面也锻炼代码能力。如果你有比较先进的 idea ,可以让社区帮助你一起完善和落地,不管对开发者还是对 TiDB 都是双赢。
Yisaer: 我建议新人可以多和 TiDB 社区的开发人员交流。其实我作为社区成员很喜欢和 Contributor 们交流和互相学习。包括如果 PR 想要尽快被 Review ,也要多催一催我们。所以新人有问题可以在 Slack 或微信里找我们,相比 GitHub 渠道,Slack 和微信的反馈方式会更高效更及时。
Q: 最后还有什么想要分享给大家的?
Yisaer: 对于已经是 TiDB Contributor 的同学,我建议可以多参与了解 TiDB 的各个领域。我一开始是从 TiDB 的周边工具入手进行开发,后面来到调度组开始完善 TiDB 的调度工作。在业余时间我对 TiDB 和其他数据库的计算引擎也会花时间学习和参与代码贡献。我觉得多了解其他领域可以开阔自己的视野,对理解整个数据库产品和生态有非常大的帮助。所以社区人员以及我们内部人员,如果对什么项目有兴趣,就可以直接参与他们,这也是我非常喜欢贵司的一个地方。
《大教堂和集市》中最后说到:“ 开放式的文化会最终胜利,这或许不是因为 " 开放 " 在道德上正确,或者 " 封闭 " 在道德上错误,而只是因为开放式合作可以在一个问题上投入多几个数量级的技术工时,封闭的世界无法赢得这样的竞争 ” 。PingCAP 能够在五年的时间里取得如此大的成果,除了其原始项目优秀的思路和设计外,更重要的是全世界无数优秀的开发者的加入才得以发展至今。聚沙成塔,集腋成裘。社区每一个微小的贡献都让 TiDB 距离「数据库界的事实标准」更近一步。很荣幸能和一群志同道合的朋友一起做酷且正确的事情。
如果你也想成为加入 TiDB 社区,成为建造者之一,欢迎点击 【文末链接】 来到 TiDB 的 GitHub 首页,期待您的 star 与贡献!