做者:申礫ios
本文是 PingCAP 招聘職位深度解讀系列的第一篇,我司 Engineering VP 申礫老師將爲你們介紹 TiDB 團隊(一羣沒法抑制心裏技術騷動的人!)。程序員
簡單來講,TiDB 是一個分佈式高可用且可以水平擴展的關係型數據庫,這個數據庫的內核包含三個組件,其中的 SQL 層組件的名字也叫作 TiDB。這個組件負責全部和 SQL 計算相關的事情以及和客戶端(業務)之間的交互,這是一個承上啓下的核心模塊。除了負責 TiDB 組件以外, TiDB 團隊還負責開發與其餘數據庫之間的數據遷移和同步組件,好比 TiDB 自身的 Binlog 模塊以及讀取 MySQL 之類數據源 Binlog 的組件。數據庫
TiDB 研發工程師職位信息:性能優化
https://www.pingcap.com/recruit-cn/engineering/tidb-engineer/服務器
招聘職位上的「崗位職責」簡單寫了下面三點:架構
負責分佈式數據庫查詢優化器和執行引擎相關的設計,開發,文檔撰寫和新人指導;分佈式
負責分佈式數據庫 SQL 層的設計,開發和性能優化;工具
參與分佈式數據庫底層系統存儲系統的設計。性能
這裏能夠作的事情很是多,下面我會詳細地介紹。學習
數據庫最難的部分在於如何保證正確性,這個是須要具有嚴謹思惟+想象力的工程問題,也是咱們每個工程師平常必須考慮的問題。
咱們須要以負責且懷疑一切的態度去審視每一行代碼;須要以嚴謹且狡詐的方式想出各類套路方法(「陰謀陽謀/奇技淫巧」)去吊打本身的產品;須要嚴肅且堅定地拒絕任何可能帶來不肯定性的變動;須要在每次遇到問題的時候都反思從此如何避免出現相似的問題。
這是一個極端重要且有技術難度的事項,因此我把它放在第一點來介紹。
一個好的架構決定了產品的好壞。SQL 引擎是一個很是複雜的東西,涉及到大量的模塊,如何安排這些模塊,並解決這些模塊之間複雜的交互是很是重要的事情。
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 你甚至能夠寫代碼。」
「這裏有足夠多的技術挑戰讓你學習成長,自由的環境讓你能夠作你喜歡的工做內容,只要有能力,隨時能夠給任一項目提 PR 或 Review 代碼, CEO 也可能隨時 Review 你代碼。」
-- From July2993
「在 TiDB 團隊有不少聰明且踏實的同事,讓我有一種回到學校你們一塊兒努力成長的感受;工做內容很豐富,既有富有挑戰的複雜邏輯,也有具體到底層的工程細節,還有須要時刻關注的學術界最新研究成果,有時還須要承擔不一樣的角色,好比做爲一個好的演講人將一場報告有條理地呈現出去,或者快速地幫助客戶解決線上遇到的問題,總的來講,對我而言,這是一份充滿可能性的工做。」
-- From Eurekaka
「在這裏能夠參與到一個完整的開源項目。寫代碼時必須特別當心,任何失誤均可能形成重大的影響,一個細微的行爲變化均可能對現有的用戶形成困擾。
除了寫代碼以外,在這裏也學會了如何推動一項工做,會涉及到討論,測試,review,文檔等方方面面。也會由於這樣的環境,令人總體獲得很大的提高。尤爲是作事情的方式,思考問題的角度。」
-- From Tiancaiamao
「在這裏我感覺最深入的是:不管與誰有意見分歧,你們都單純地以將事情作得更優爲出發點,發表各自觀點,會有用代碼論證的,也會有拿測試數據佐證的。你們在未定方案前‘針鋒相對’,定方案後則又樂呵地討論去哪吃飯。我很是幸運能和一羣志同道合的小夥伴在貴司作着本身喜歡的事。」
-- From Zimulala
但願你熱愛技術,對開源、基礎架構有興趣,看到這裏面的巨大技術挑戰以及廣闊前景,但願能爲業界帶來激動人心的解決方案。同時但願你是一個能自我驅動的人,且能帶動周邊的人一塊兒來推動,這一點很重要。
若是你技術精湛,有數據庫/分佈式系統/服務器端開發的經驗,對代碼質量有追求,那就來一塊兒展現技術給你們看。
目前咱們已經有一百多名同事,分散在全球 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
實習生:公司的各項福利和學習資源對實習生全面開放,更重要的是實習生還未畢業就有機會接觸工業級項目,並且實習期間表現優異者將有機會得到校招綠色通道特權。若是小夥伴們時間不夠充裕,也能夠先從社區 Contributor 作起,或許下一期 Talent Plan 的主角就是你!
伯樂推薦:若是你身邊有符合以上要求的小夥伴,也能夠找咱們聊一聊,推薦成功就有機會得到伯樂推薦獎勵(iPad、iPhone、MacBook Pro 等等)。伯樂推薦郵件格式:[伯樂推薦] 候選人姓名-職位名稱-推薦人姓名-推薦人手機號。