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

2020 年 2 月,TiKV 項目迎來了一位新晉 Committer —— 莊天翼(GitHub ID:TennyZhuang),他 2018 年畢業於清華大學,目前在曠視科技擔任分佈式存儲開發工程師,平時愛看動漫,工作之餘也喜歡寫一些代碼,實現自己的想法。前天,我們“正兒八經”地採訪了莊天翼同學,在互相努力憋笑中,愉快地掉落了以下文字……

傳說中的“天才少年”

天翼並不是普通意義上的計算機“天才少年”。

雖然他在大四時和隊友一起拿了 CCPC(中國大學生程序設計競賽)區域賽金牌,但他第一次接觸編程已經是高中了,當時並沒有深入研究編程,只是覺得學起來挺喜歡。在拿到化學競賽金牌並保送清華後他也沒有選擇計算機專業,而是在材料學院就讀,直到大三才正式轉專業到了軟件學院。

爲了順利轉系到軟件學院,他利用課餘時間修了大一和大二的計算機課程。得力於之前給學院老師留下的深刻印象,大三一開學他就成爲軟件學院的助教,協助老師設計課程並分享自己做這門課程的心得。

天翼說突破舒適區,學習新的東西是一件很有成就感的事。

“大三時學院有一門 Haskell 課程,當時作業分級,我完成了最高難度的題並且做了拓展,寫了一個比較完整的 scheme 解釋器,這門課拿了滿分。雖然現在看來沒那麼厲害,但當時覺得很有成就感。”

理解“開源社區”

與開源結緣

當被問到第一次是怎麼接觸到開源時,天翼笑了笑說“這要定義一下開源了,一開始是學習 Git 的使用,因爲本科提交作業需要版本管理,接觸了 Git。當時就想要不把代碼公開上傳 GitHub 吧,電腦萬一壞了作業也不會丟。等我到高年級時有些自己的小項目被學弟發現竟然還有些 star,這可能算是我第一個開源項目吧。後來也陸續給一些其他小的開源項目做貢獻,主要是自己平時會用到。”

對“社區貢獻”的理解

天翼對社區的理解和我們不謀而合:只要對 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,他也有自己的想法。

“Maintainer 是一個要求比較高的角色。我覺得提多少 PR 或者 Review 多少 PR 都不是很關鍵。比如 孫曉光,他給 TiKV 提了一個獨立設計的 feature,我認爲這樣才配得上一個 Maintainer。參與社區這個過程對我來說是很有意思的,可能在我貢獻的過程中慢慢就會達到這個要求。”

分享一個參加挑戰賽的 Tip

在訪談最後,作爲 第一季 TiDB 挑戰賽 的第一名,天翼爲大家分享了一個小 Tip:比賽過程中時刻和 Mentor 保持同步。

“參加第一季時,我隊友有一個 2000 分的 PR,寫着寫着廢棄了,因爲當時改動涉及的模塊較多,且修改破壞了原本的分層設計最終沒能合併。因此有接口設計變更隨時和 Mentor 保持同步,及時達成一致意見,對大項目是非常重要的。如果涉及的模塊較多,建議優先提交 RFC,經過多個 Reviewer 評審再開始具體工作。避免最後 Review 的時候對設計的理解有衝突而需要大量更改甚至不能合併。”

(注:天翼所在的 .* Team 也參加了第二季 TiDB 挑戰賽之易用性挑戰賽,已經斬獲了上千積分,想在積分排行榜上與天翼“過過招”的同學,可以看看這份“撈分指南”哦)

最後在關麥之前……

我們請天翼對下一位採訪嘉賓提一個問題。天翼說:“什麼都可以問嗎?” 我們:“對啊,反正不能露出的我們就會掐掉。”

兩個小時過後,天翼終於絞盡腦汁想出了一個問題:“不知道下一位嘉賓平時做飯麼,最喜歡喫哪道菜?

行吧就它了(冷風吹過.gif ),話筒準備遞給下一位嘉賓了!至於下一位嘉賓是誰,熟悉社區的小夥伴肯定都知道啦,先賣個關子,敬請期待~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章