TiKV Committer 庄天翼:只要能提升 Codebase 质量,就值得提交 PR

Easter79
• 阅读 648

2020 年 2 月,TiKV 项目迎来了一位新晋 Committer —— 庄天翼(GitHub ID:TennyZhuang),他 2018 年毕业于清华大学,目前在旷视科技担任分布式存储开发工程师,平时爱看动漫,工作之余也喜欢写一些代码,实现自己的想法。前天,我们“正儿八经”地采访了庄天翼同学,在互相努力憋笑中,愉快地掉落了以下文字……

传说中的“天才少年”

天翼并不是普通意义上的计算机“天才少年”。

虽然他在大四时和队友一起拿了 CCPC(中国大学生程序设计竞赛)区域赛金牌,但他第一次接触编程已经是高中了,当时并没有深入研究编程,只是觉得学起来挺喜欢。在拿到化学竞赛金牌并保送清华后他也没有选择计算机专业,而是在材料学院就读,直到大三才正式转专业到了软件学院。

为了顺利转系到软件学院,他利用课余时间修了大一和大二的计算机课程。得力于之前给学院老师留下的深刻印象,大三一开学他就成为软件学院的助教,协助老师设计课程并分享自己做这门课程的心得。

天翼说突破舒适区,学习新的东西是一件很有成就感的事。

“大三时学院有一门 Haskell 课程,当时作业分级,我完成了最高难度的题并且做了拓展,写了一个比较完整的 scheme 解释器,这门课拿了满分。虽然现在看来没那么厉害,但当时觉得很有成就感。”

理解“开源社区”

与开源结缘

当被问到第一次是怎么接触到开源时,天翼笑了笑说“这要定义一下开源了,一开始是学习 Git 的使用,因为本科提交作业需要版本管理,接触了 Git。当时就想要不把代码公开上传 GitHub 吧,电脑万一坏了作业也不会丢。等我到高年级时有些自己的小项目被学弟发现竟然还有些 star,这可能算是我第一个开源项目吧。后来也陆续给一些其他小的开源项目做贡献,主要是自己平时会用到。”

TiKV Committer 庄天翼:只要能提升 Codebase 质量,就值得提交 PR

对“社区贡献”的理解

天翼对社区的理解和我们不谋而合:只要对 Codebase 的质量有提升,就值得去提交 PR

“我之前给 Golang 提交过一个很小的 PR。当时我在调试 TiDB 的一个性能 regression 问题,感觉 Go 编译器在判断一个函数是否可以 inline 的调试日志里缺失了 cost 信息,于是我手动编译了 Go,在 debug 日志中添加了自己需要的信息来解决了我当时遇到的问题。很多人到这一步可能就结束了,但我还是将这行调试 log 作为一个 patch 提交给了 Golang。这个 PR 可能很小,但如果下一个 Go 开发者遇到了跟我相似的问题,也需要这行信息,他就可以省去自己完整编译一遍 Go 的时间,我觉得这就值得去提交一个 PR。我认为一个 PR 只要能提升 Codebase 的质量,就是对开源社区的贡献。”

TiDB 社区印象

谈到对 TiDB 社区的整体印象,天翼说道,“TiDB 社区建设是我见过开源项目中最好的。对任务的定义很明确并且每个组件都有明确的负责人。TiDB 社区对新人更友好,比如 issue 会标注难度,组建划分的很清楚,可以方便的找到适合自己的任务。另外源码阅读系列比较有意义,我一般不看源码的实现细节,但源码阅读指南会让我更理解组件之间调用关系。”

参与社区

天翼是分布式存储工程师,对存储和数据库相关的项目比较感兴趣,因此 TiDB 是他参与的第一个比较正式的开源项目。当时 TiDB 还有若干篇教你“如何十分钟成为 Contributor” 的指南,于是就来试了一下。

在工作中天翼用 Go 比较多,大概是三四年前他就有接触过 Rust 了,当时就觉得这个语言设计得非常优美,但因为一直没有工程实践所以看完书之后总是容易忘记。通过贡献 TiKV,天翼有了真正的生产经验,对 Rust 特性理解也更加深刻。

“对我来说,参与社区贡献,除了增加了 Rust 使用经验和真正用于生产的数据库开发经验,同时也认识了很多人,扩大了社交圈,让我学到了很多东西。”

他也很喜欢参与社区的活动,在 Infra Meetup 中担任过讲师,在两届 TiDB Hackathon 和 TiDB 挑战赛并都取得了优异的成绩,可以说是收获满满。

对于 Hackathon 这样 48 小时的脑暴活动,天翼有一些小心得:“无论拿不拿奖,idea 的实现很重要”,比如在 2019 年的 TiDB Hackathon 上,天翼和队友完成的项目 解决了跨数据中心场景下 TiDB 的 latency 问题,使得跨地域 SQL 查询延迟下降 50%,跨节点消息数减半(即网络流量减半),实现上方法上主要从 Raft 层面来解决的,比较巧妙地提升了 Follower Read 的性能,并用 Follower Replication 减少带宽成本。这个项目获得了评审们和 TiDB 用户的好评,并且斩获了二等奖。

感受最深的一个 PR

天翼说在他成为 Committer 之前解决了一个很繁琐的 PR,改动了 80 多个文件 1000 多行代码。虽然难度不高,但令他印象十分深刻,“当时必须修改一个 TiDB 大部分模块都引用的公共接口,于是导致今天改完明天不合并,马上就冲突,给合并带来很大困难,我差一点就要放弃了,但又不甘心,于是我和 breezewish(PingCAP 的小伙伴)一起改动这个 PR 直到凌晨四点,PR 才通过单元测试,被 review 完。第二天上午就迅速合并了,避免了和别的 PR 产生冲突,这次合作印象很深。”

进阶!进阶!

从 Contributor 到 Committer,天翼在 TiDB 社区得到了成长和认可,对于如何晋升到社区下一个角色 Maintainer,他也有自己的想法。

TiKV Committer 庄天翼:只要能提升 Codebase 质量,就值得提交 PR

“Maintainer 是一个要求比较高的角色。我觉得提多少 PR 或者 Review 多少 PR 都不是很关键。比如 孙晓光,他给 TiKV 提了一个独立设计的 feature,我认为这样才配得上一个 Maintainer。参与社区这个过程对我来说是很有意思的,可能在我贡献的过程中慢慢就会达到这个要求。”

分享一个参加挑战赛的 Tip

在访谈最后,作为 第一季 TiDB 挑战赛 的第一名,天翼为大家分享了一个小 Tip:比赛过程中时刻和 Mentor 保持同步。

“参加第一季时,我队友有一个 2000 分的 PR,写着写着废弃了,因为当时改动涉及的模块较多,且修改破坏了原本的分层设计最终没能合并。因此有接口设计变更随时和 Mentor 保持同步,及时达成一致意见,对大项目是非常重要的。如果涉及的模块较多,建议优先提交 RFC,经过多个 Reviewer 评审再开始具体工作。避免最后 Review 的时候对设计的理解有冲突而需要大量更改甚至不能合并。”

(注:天翼所在的 .* Team 也参加了第二季 TiDB 挑战赛之易用性挑战赛,已经斩获了上千积分,想在积分排行榜上与天翼“过过招”的同学,可以看看这份“捞分指南”哦)

最后在关麦之前……

我们请天翼对下一位采访嘉宾提一个问题。天翼说:“什么都可以问吗?” 我们:“对啊,反正不能露出的我们就会掐掉。”

两个小时过后,天翼终于绞尽脑汁想出了一个问题:“不知道下一位嘉宾平时做饭么,最喜欢吃哪道菜?

行吧就它了(冷风吹过.gif ),话筒准备递给下一位嘉宾了!至于下一位嘉宾是谁,熟悉社区的小伙伴肯定都知道啦,先卖个关子,敬请期待~

TiKV Committer 庄天翼:只要能提升 Codebase 质量,就值得提交 PR

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
java中比较两个时间的差值
项目背景1.某篇文稿的发布时间是publishDate,例如:2020072118:00:41。2.现要求判断该篇文稿的发布时间是否在近30天之内。publicstaticlongdayDiff(DatecurrentDate,DatepublishDate){LongcurrentTimecurrentDat
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
Java日期时间API系列23
  有时候,往往需要统计某个时间区间的销量等问题,这就需要准确的起始时间,获取准确开始时间00:00:00,获取准确结束时间23:59:59。下面增加了一一些方法,获取当天起始时间,昨天起始时间,当前月第一天开始时间,当前月最后一天结束时间,上个月第一天开始时间,上个月最后一天结束时间,某个指定月的起始结束时间等等。其中月份最后一天往往因为月份不同和
天翼云4.0来了!千城万池,无所不至!
国际数字科技展暨天翼智能生态博览会天翼云论坛在广州举办。大会现场天翼云推出了全新品牌形象,对全面升级的天翼云4.0分布式云进行详细解读。中国电信集团有限公司副总经理唐珂与天翼云科技有限公司总经理胡志强共同进行天翼云品牌的升级发布。 中国电信集团有限公司副总经理唐珂发表致辞,他指出,天翼云全面升级到天翼云4.0,实现了一云多态、一云多芯、一张云网、一致架构、统
“视界”尽在眼前,海纳视联大模型来了!
11月10日—13日,以“数字科技焕新启航”为主题的2023数字科技生态大会在广州举办。会议期间,在数字生活与天翼视联合作论坛上,重磅发布了由天翼云科技有限公司、天翼数字生活科技有限公司和天翼视联科技有限公司联合研发的视联行业大模型——海纳视联大模型,为视联行业智能化发展按下加速键。
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k