TiDB 團隊:一羣無法抑制內心技術騷動的人 | PingCAP 招聘季

作者:申礫

本文是 PingCAP 招聘職位深度解讀系列的第一篇,我司 Engineering VP 申礫老師將爲大家介紹 TiDB 團隊(一羣無法抑制內心技術騷動的人!)。

TiDB 團隊工作方向

簡單來說,TiDB 是一個分佈式高可用且能夠水平擴展的關係型數據庫,這個數據庫的內核包含三個組件,其中的 SQL 層組件的名字也叫做 TiDB。這個組件負責所有和 SQL 計算相關的事情以及和客戶端(業務)之間的交互,這是一個承上啓下的核心模塊。除了負責 TiDB 組件之外, TiDB 團隊還負責開發與其他數據庫之間的數據遷移和同步組件,比如 TiDB 自身的 Binlog 模塊以及讀取 MySQL 之類數據源 Binlog 的組件。

來 TiDB 團隊你能做什麼

TiDB 研發工程師職位信息:

https://www.pingcap.com/recruit-cn/engineering/tidb-engineer/

招聘職位上的「崗位職責」簡單寫了下面三點:

  1. 負責分佈式數據庫查詢優化器和執行引擎相關的設計,開發,文檔撰寫和新人指導;
  2. 負責分佈式數據庫 SQL 層的設計,開發和性能優化;
  3. 參與分佈式數據庫底層系統存儲系統的設計。

這裏可以做的事情非常多,下面我會詳細地介紹。

正確性

數據庫最難的部分在於如何保證正確性,這個是需要具備嚴謹思維+想象力的工程問題,也是我們每一個工程師日常必須考慮的問題。

我們需要以負責且懷疑一切的態度去審視每一行代碼;需要以嚴謹且狡詐的方式想出各種套路方法(“陰謀陽謀/奇技淫巧”)去吊打自己的產品;需要嚴肅且堅決地拒絕任何可能帶來不確定性的變更;需要在每次遇到問題的時候都反思今後如何避免出現類似的問題。

這是一個極端重要且有技術難度的事項,所以我把它放在第一點來介紹。

架構

一個好的架構決定了產品的好壞。SQL 引擎是一個非常複雜的東西,涉及到大量的模塊,如何安排這些模塊,並解決這些模塊之間複雜的交互是非常重要的事情。

DDL

DDL 是 SQL 引擎最基本的功能之一,有人覺得不就是建個表、刪個表嗎?其實不是,難點在於如何在分佈式數據庫上支持不阻塞業務的 DDL 變更,特別是在海量數據上做 DDL,如何既快又好。例如如何在線修改一個十億級別 Table 的某一列的類型?當然這一切的前提都是保證 DDL 操作的正確性,這點在分佈式數據庫中有很多點需要考慮,不信的話可以來一起踩坑。

優化器

一條 Query 的查詢計劃好壞可能會導致執行時間的巨大差別,優化器就是 SQL 引擎的軍師。我們需要考慮各種數據分佈、各種優化手段、各種等價變化,在合理的時間內選出一條不那麼差的查詢計劃。這裏說“不那麼差”聽起來不那麼靠譜,但是在 Query 比較複雜的情況下,潛在的查詢計劃搜索空間非常龐大,既要找到好的查詢計劃,又希望縮短搜索時間,這是一個非常有挑戰的事情。希望你能來和我們一起做一個“總能選出最好的查詢計劃”的優化器。

統計信息收集與更新

在優化器搜索並評估所有候選查詢計劃的過程中,統計信息的準確與否非常重要,它是 SQL 引擎的情報官,優化器擁有準確的統計信息才能做出正確的決策,就像軍師有精確且及時的情報才能給出正確的行動方案。在海量的數據中(百億級別)如何快速計算統計信息,反應數據真實分佈;在繁忙的生產系統中,如何讓統計信息跟上數據的變動,提供更及時的信息,這些都是有挑戰的事情。

執行引擎

軍師根據正確的情報制定了好的作戰計劃之後,還需要驍勇的將軍去執行,在這裏就是執行引擎。我們在 2.0 和 2.1 兩個版本中,都對執行引擎做了大量改進,一些語句的運行時間有了幾倍甚至數量級的提升。我們會考慮到如何提升 CPU 使用率、減少 Cache miss、減少 TLB miss,通過 Pipeline、並行等模式提升執行速度。

數據遷移/同步組件

作爲一個新興的數據庫,我們需要考慮幫助用戶平滑的遷移(全量+增量)已有數據庫(主要面對 MySQL)到 TiDB 中來,當然我們也提供一套組件來實時同步數據變動到數據庫外面。主要包括下面三個組件:

DM 是一個數據遷移平臺,同時支持全量遷移(MyDumper+Loader)以及增量遷移(讀取 MySQL Binlog),我們需要把這個工具做的穩定、高效、易於使用。在數據遷移的過程中,我們支持對數據的 Schema 以及內容按照一定規則做轉換,實現分庫分表的合併等複雜的操作。除了實現這些功能之外,還會致力於讓各種操作儘量簡單方便,可視化同步狀態。

Binlog 是 TiDB 自身的 binlog 模塊,能夠把 TiDB 集羣的實時變動發送出去,通過 binlog 可以給 TiDB 增加一個從集羣,這個從集羣可以是另一個 TiDB 集羣,也可以是一個 MySQL 實例。另外也可以將 binlog 寫入消息隊列中被其他系統消費,用於其他用途,只要知道 binlog 數據的 protobuf 定義即可。這裏的難點在於如何保證正確性、性能、穩定性,特別是如何保證多個節點的 binlog 數據按照事務保證輸出順序,數據不重不丟不亂且延遲低。

Lightning 是一個專門爲 TiDB 開發的數據批量導入工具,可以讀取 MyDumper 的輸出格式或者是 CSV 格式的文件,將數據導入 TiDB 集羣。相比通過 SQL 接口導入數據,Lightning 可以跳過分佈式事務、數據唯一性約束檢查、Raft 協議,將 SQL 文本直接轉換爲 TiKV 底層的 RocksDB SST file,再將 SST file 注入到 TiKV 集羣中。極大地縮短了導數據時間,目前內部的一個測試場景中,導入單表 1TB 的 SQL 文本耗時 2 小時,我們還在持續優化這個工具,儘可能縮短這個時間。

性能

這裏把性能放在了最後,並不是說它是不重要的部分,相反它是最重要的部分之一。大家可以看我們的文檔,每次發佈新版本都會給出性能改進的對比結果,大多數用戶在接觸 TiDB 之後也會關心性能指標。

我們現在主要通過 OLTP(比如 Sysbench, TPC-C)以及 OLAP (TPC-H)兩套測試體系來評估 TiDB 的性能,並且在同時針對這兩類場景做性能優化。這裏有非常多的事情可以做。我們希望能把性能提升到極致。

除了寫代碼,你能做的還有這些……

作爲一個硬核的代碼「團伙」,僅僅「舉頭望明月,低頭寫代碼」是無法滿足我們內心的技術騷動的,我們希望把 TiDB 這個項目和整個開源世界連接起來,所以希望你能和我們一起一些事情讓更多的人瞭解 TiDB:

  • TiDB 源碼閱讀》是面向開發者的系列文章,幫助 Contributors 瞭解 TiDB 的實現細節,讓數據庫內核這個東西在大家眼中不再神祕,希望越來越多的人能參與到 TiDB 這個項目中來,做一個世界頂級的開源數據庫項目。
  • Talent Plan 是面向在校學生準備的數據庫開發課程,希望通過 3~4 周的導師帶學,讓同學們能夠了解如何做一個分佈式數據庫,能夠基於 TiDB 開發新的功能,做一些和數據庫研究相關的實驗項目。目前已經有多名同學將自己的畢業設計題目選爲 TiDB 相關的事情。
  • 除了「寫文章,做導師」,我們也非常鼓勵大家走出公司做分享,各位可能已經在國內各大技術會議上看到了 PingCAPer 的身影,其實這只是冰山一角。我們在各地都有定期舉辦的 Infra Meetup,有對外公開的技術方案評審和 Paper Reading,有高校實驗室交流,有海外會議佈道。在過去的一年中,我們舉辦或參加了八十多場技術/學術交流活動,把 TiDB 的旗幟插到了世界各地。

我們希望大家能全面發展,這些活動的存在也是想給大家足夠的舞臺來施展才華,作爲拜仁球迷,我想說:“在 PingCAP 你甚至可以寫代碼。”

Team 成員有話說

“這裏有足夠多的技術挑戰讓你學習成長,自由的環境讓你可以做你喜歡的工作內容,只要有能力,隨時可以給任一項目提 PR 或 Review 代碼, CEO 也可能隨時 Review 你代碼。”

-- From 黃佳豪

“在 TiDB 團隊有很多聰明且踏實的同事,讓我有一種回到學校大家一起努力成長的感覺;工作內容很豐富,既有富有挑戰的複雜邏輯,也有具體到底層的工程細節,還有需要時刻關注的學術界最新研究成果,有時還需要承擔不同的角色,比如作爲一個好的演講人將一場報告有條理地呈現出去,或者快速地幫助客戶解決線上遇到的問題,總的來說,對我而言,這是一份充滿可能性的工作。”

-- From 姚珂男

“在這裏可以參與到一個完整的開源項目。寫代碼時必須特別小心,任何失誤都可能造成重大的影響,一個細微的行爲變化都可能對現有的用戶造成困擾。

除了寫代碼之外,在這裏也學會了如何推進一項工作,會涉及到討論,測試,review,文檔等方方面面。也會因爲這樣的環境,使人整體得到很大的提升。尤其是做事情的方式,思考問題的角度。”

-- From 毛康力

“在這裏我感受最深刻的是:無論與誰有意見分歧,大家都單純地以將事情做得更優爲出發點,發表各自觀點,會有用代碼論證的,也會有拿測試數據佐證的。大家在未定方案前‘針鋒相對’,定方案後則又樂呵地討論去哪吃飯。我非常幸運能和一羣志同道合的小夥伴在貴司做着自己喜歡的事。”

-- From 李霞

我們的期望

興趣+野心

希望你熱愛技術,對開源、基礎架構有興趣,看到這裏面的巨大技術挑戰以及廣闊前景,希望能爲業界帶來激動人心的解決方案。同時希望你是一個能自我驅動的人,且能帶動周邊的人一起來推進,這一點很重要。

技術

如果你技術精湛,有數據庫/分佈式系統/服務器端開發的經驗,對代碼質量有追求,那就來一起展示技術給大家看。

溝通順暢 && 思維敏捷 && 條理清晰

目前我們已經有一百多名同事,分散在全球 6 個 Office 或者是遠程辦公。所以如何高效的溝通,如何能跟上其他同事的思維節奏非常重要。

我們可以提供什麼

我經常看到一些招聘貼中寫到彈性工作制、不打卡、水果零食健身這種,這些我司都有,不過我認爲都不值一提,我想這些並不是優秀的你所追求的。我們能爲你提供下面這些東西:

一羣聰明優秀的同事

聰明人總是想和聰明人一起工作。相比大廠,我們一直追求小而精的團隊,人員的平均水平會更高,我們招聘的時候非常謹慎,保障團隊整體水平不斷提高。

一個難且有趣的目標

很多程序員對技術有一定的追求,希望能在技術上有一定的成就,剛好我們這個事情是非常難且非常有趣,足夠你來施展,一定有你抓破腦袋也解決不了的問題。

一個快速成長的環境

我們希望每個人都能獨當一面,即使是校招進來的新同學,我們也期望你能在一年的時間內飛速成長。我們會有老鳥手把手幫你 Review 代碼,有各種技術文檔、Talk、Meetup 幫助你獲取新知識以及建立自己在技術圈的影響力。

一個站着掙錢的機會

作爲一篇招聘貼,不提錢會傷感情。我們的薪酬還是很有競爭力的,具體的可以和我司崔老闆談,他那裏彈藥充足。不過我覺得最值錢的還是現在的期權,已經有不少朋友問過我能不能私下買一些。只要我們能一起把這個技術產品做好,掙到錢是自然而然的事情。

加入我們吧!

我們認爲優秀的工程師或多或少有以下共同特質:

  • A Quick Learner
  • An Earnest Curiosity
  • Faith in Open Source
  • Self-driven    
  • Get Things Done

如果你符合以上特質,歡迎進入招聘頁面查看目前開放的工作機會:

https://www.pingcap.com/recruit-cn/join/#positions

簡歷投遞通道:[email protected]

實習生:公司的各項福利和學習資源對實習生全面開放,更重要的是實習生還未畢業就有機會接觸工業級項目,而且實習期間表現優異者將有機會獲得校招綠色通道特權。如果小夥伴們時間不夠充裕,也可以先從社區 Contributor 做起,或許下一期 Talent Plan 的主角就是你!

伯樂推薦:如果你身邊有符合以上要求的小夥伴,也可以找我們聊一聊,推薦成功就有機會獲得伯樂推薦獎勵(iPad、iPhone、MacBook Pro 等等)。伯樂推薦郵件格式:[伯樂推薦] 候選人姓名-職位名稱-推薦人姓名-推薦人手機號。

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