從使用者到開發者是一種思維進化過程 | 訪 StarRocks Committer 周威

語言: CN / TW / HK

身處技術創新驅動的時代,只有開放協作才能帶來巨大進步,創造非凡成就。

StarRocks 社群的發起和發展,正是立足於各個開發者的“貢獻”和“集智”。

周威,騰訊遊戲高階工程師,對 StarRocks、MySQL、Ceph、k8s 等有比較深入的理解。他有著“技術匠人”典型的思維洞察力,認為技術開發就是把自己的想法翻譯給計算機聽。在開源社群實現了從使用者到開發者的思維進化的他,為 StarRocks 社群貢獻了 serverless 等多項功能的優化和創新。

近期,經過 StarRocks 社群 PMC 提名與投票,周威接受邀請,正式成為 StarRocks 專案的 Committer。

他在專案上的主要貢獻有:

1. 主導了 serverless 的 compute node 的設計,並且實現了 BE 部分的功能

2. 開發了 window_funnel array_contains_all 等函式

3. 完成了 IEG 部分 StarRocks 程式碼 reivew 工作

4. 推動了 k8s-starrocks-operator 的設計和貢獻工作

5. 幫助騰訊 IEG 在大規模使用 StarRocks 做了大量 trouble shooting 工作

後續,周威還會在以下幾方面繼續貢獻:

1. IcebergV2 source connector 的開發

2. k8s-starrocks-operator 的完善

3. Iceberg sink connector 

4. compute node 多叢集

 

 

作為技術領域資深的開發者,你對這個身份是如何理解的?

我認為是某種意義上的“翻譯”,就是把自己的想法通過計算機能理解的程式語言來表達出來,從而讓計算機理解並執行。對開發者來說,如何形成自己的想法、準確精練地表達出來是核心能力。

 

談談你的技術開發經歷

畢業後就去了華為,在華為開發網路協議,搞 TCP/IP 協議棧。後來到騰訊做儲存,一開始是做 MySQL,後面我們基於 MySQL 做了分散式的儲存引擎 Spider。其實理念上和 StarRocks 比較類似,是用 hash 的方式來按照某列做分桶後發給不同的後端。

工作中的第一個 Commit 就是做的 MySQL 的主備同步 Binlog 壓縮功能,這個功能其實早就有社群成員提出來要做,正好騰訊遊戲內部也有需求,就接過來了。當時在社群裡和大家在實現方案上爭論了很久,不過最終還是我說服了他們,按照我的思路實現了這個功能。

再之後就轉做通用的分散式儲存 Ceph,Ceph 這種通過兩級架構(mon-osd)的構建方式給了我比較大的啟發。在雲原生的趨勢之下,騰訊遊戲也積極地想把一些工作搬到 k8s 加容器之上,我就搞了一段時間的 k8s。直到分析引擎選用了 StarRocks,我就又繼續回到了儲存這塊來。

 

如何踏上了開源之路?有什麼開源社群的經歷可以分享?

第一次接觸是在大二上作業系統課期間,我把自己的筆記本裝成了 Ubuntu。當時還能申請安裝光碟,結果他們真的給我從英國寄了過來。在筆記本上用 Linux 問題還比較多,就一直需要網上問,社群的人也比較熱心,解決了不少問題,自己也就逐漸參與進去了。

所以社群新人不要有畏懼心理,大部分社群是很歡迎大家參與的,只要注意提問時儘量提供比較全面的資訊、準確描述現象。邁出了第一步,以後就會越來越順。比如我第一次給 Linux 核心發 patch,郵件發出去之後沒多久就有人回覆並且提了 review 意見,來回改了 5 個版本,包括程式碼格式驗證這種問題都有人耐心解答。

( 周威、他的愛人和 Linux )

參與開源社群給我帶來了從使用者到開發者的思維轉變。之前遇到問題,一般是提一個 Issue,期待著有人能解決問題。後面就會想:為什麼會有這個問題?能不能自己解決?如果可以的話就會自己提 PR,我比較享受 PR 被合併的過程。

 

(周威在開源社群提的第一個 bug)

 

你在大資料行業、OLAP 產品方面都有怎樣的經歷和心得?如何成為了 StarRocks Committer?

做 OLAP 是一個需要在效能和成本兩方面做取捨的過程。很明顯的,如果我們不在乎成本,總可以通過堆機器或者提前計算等方式來提升效能。但現實又逼迫我們必須不斷壓縮成本,在一定成本條件下達到可以接受的效能。

基於想節省成本的樸素想法,並結合了之前做容器的經驗,就產生了一個想法:能不能把 StarRocks 放到容器裡面呢,從而做到按需擴縮容,不使用的時間就可以把資源釋放掉。於是我就提出了把計算能力抽出來單獨拆分出一個 CN 節點,並實現一個配套的 Operator,從而實現了 serverless 的能力的想法。這個方案做完以後就把這個功能提交到了 StarRocks 社群,得到了認可,從而成為了一名 Committer。

 

作為最早加入 StarRocks 社群的開發者之一,遇到過哪些問題?最有成就感/獲得感的事情是什麼?

最初遇到的主要是穩定性問題,包括 BE crash、FE 卡死等,當時因為對 StarRocks 沒那麼熟悉,所以花費了一些時間。目前這些問題已經在社群解決了。

最有成就感的事情是做的 serverless 功能被更多小夥伴們去一起使用,大家反饋問題並參與到解決的過程中。

在使用 StarRocks 的過程中,我提高了自己定位和解決問題的能力。在閱讀程式碼時,StarRocks 不少執行計劃的優化方式啟發頗多,在業務優化 SQL 方面帶來了不少幫助。

 

說到“創造”,你會想到什麼?

比起“創造”,我更喜歡的是“創新”這個詞語。比如容器這個概念,其實容器所依賴的主要技術(namespace 和 cgroup)很早就在核心實現了,Docker 做的就是把這些技術給組合起來,搞出了容器的實現方式。在我看來,比起直接“創造”出一個新事物,“創新”的門檻可能低一些,然而帶來的收益並不低。

 

聽說你大學時代研究過機器人?

平時還是挺喜歡折騰的,大學時是機器人小組的成員,和同學一起搞了 4 年機器人,他們後面出去創業專門搞機器人了。我沒有跟著去,不過平時對這些東西玩得還比較多,也喜歡寫一些和硬體相關的程式碼。當看到你的程式碼控制了一個機械臂在動,和控制檯上刷一些 log 帶來的成就感還是不一樣的。

搞的比較有意思的有兩個東西。一個是機械手臂,就是有一個手套,手上做什麼動作,機械臂就跟著做。另外一個是蜘蛛一樣的六條腿爬行機器人,通過 WIFI 來控制。很有意思的一點是,它是正反同構的,所以我們給它搞了一個翻身的動作,翻過來之後也可以繼續爬。

 

(研究過機器人的周威和他如今的小小人)

 

最近在學什麼?有沒有可以分享的學習方法?

最近在看 GPU/CUDA 程式設計,想看看 GPU 的能力在 OLAP 能不能用得上。

我覺得搜尋能力是一種學習過程中非常需要的能力。出了學校之後,大部分學習只能靠自己了,接觸的東西都是新的,很多情況下就只能從網上找資料。但是網路資訊雜亂無章,就需要有一定的資訊篩選和檢索能力。搜尋的時候,用英文關鍵字找到的有效資訊會相對多些。

 

關於 StarRocks 

StarRocks 創立兩年多來,一直專注打造世界頂級的新一代極速全場景 MPP 資料庫,幫助企業建立“極速統一”的資料分析新正規化,助力企業全面數字化經營。

當前已經幫助騰訊、攜程、順豐、Airbnb 、滴滴、京東、眾安保險等超過 150 家大型使用者構建了全新的資料分析能力,生產環境中穩定執行的 StarRocks 伺服器數目達數千臺。 

2021 年 9 月,StarRocks 原始碼開放,在 GitHub 上的星數已超過 3200 個。StarRocks 的全球社群飛速成長,至今已有超百位貢獻者,社群使用者突破 7000 人,吸引幾十家國內外行業頭部企業參與共建。