1. 程式人生 > >TiDB 團隊:一群無法抑制內心技術騷動的人 | PingCAP 招聘季

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 等等)。伯樂推薦郵件格式:[伯樂推薦] 候選人姓名-職位名稱-推薦人姓名-推薦人手機號。

相關推薦

TiDB 團隊無法抑制內心技術騷動 | PingCAP 招聘

開發十年,就只剩下這套架構體系了! >>>   

C#面試題小孩圍成一個圈的經典演算法

一群小孩圍成一個圈,從第一個開始報數,報到5的小孩退出圈,繼續,求剩下的最後一個小孩的編號。 程式碼如下: public static int count = 0;//計數器         public static int target = 5;//指定編號   

人工智慧背面年輕人的苦與酷

從充滿科幻色彩的高大上概念到飛入尋常百姓家的衣食住行,AI的「平民化」離不開一群又苦又酷的人。這群離AI技術最近的人,正是大眾印象中穿格子襯衫、背雙肩包、對程式碼狂熱的年輕程式設計師,在他們的種種沒想到中,人工智慧的研發在這個國家高速走過實驗性階段,落地應用與商業化被提上日程。 文|巴芮 編輯|張慧 其

vuejava後臺死在配置上

一、檔案結構 本文主要分析開發(dev)和構建(build)兩個過程涉及到的檔案,故下面檔案結構僅列出相應的內容。 ├─build │ ├─build.js │ ├─check-versions.js │ ├─dev-client.js │ ├

對話搜狗口語機器翻譯團隊全球奪冠只為驗證技術,更看重落地商用

邊策 發自 凹非寺 量子位 報道 | 公眾號 QbitAI 就在上週,搜狗又拿下一項機器翻譯國際冠軍。 在今年的國際頂級口語機器翻譯大賽IWSLT上,搜狗戰勝科大訊飛、阿里等眾多國內外好手,一舉奪魁。 加上去年獲得WMT2017機器翻譯頂級評測大賽中英和英中第一名,

翻譯The Swift Programming Language 中文版

pan dsm 1.7 rac err star get track sans 無聊閑逛GIthub,看到一群牛人在github上創建了一個關於Switf的文檔翻譯項目 The Swift Programming Language 中文版 項目地

Aways on故障系列之二從數據庫中有無法同步

系列 意思 ip地址 pin 啟動服務 阿裏雲服務 無法連接 聯通 狀態 服務器用的阿裏雲服務器,自己做的非域Aways On主從同步。 故障描述:某臺從數據庫無法同步主數據庫的數據,查看Aways On的服務器狀態,該服務器已離線。 故障排查:     1.檢查同步面板,

Kubernetes的搭建與配置(環境搭建

stderr Kubernete lld lsp option control hat tps pan 1、環境介紹及準備: 1.1 物理機操作系統   物理機操作系統采用Centos7.3 64位,細節如下。 [root@localhost ~]# uname -a

頂級測試框架Jest指南跑通一個完美的程式,就是教出像樣的學生

facebook三大專案:yarn jest metro,有橫掃宇宙之勢。 這個專案的宗旨為:減少測試一個專案所花費的時間成本和認知成本。 ——其實,它在讓你當一個好老師。jest文件非常簡略、難以閱讀, 因此才有了這篇文章。 jest是vue和vue-cli技術棧

多米諾骨牌支菸花“引燃”的創業團隊

2011年2月3日0時10分,這一天是農曆春節,正值闔家團圓之際,凌晨時分萬家燈火依舊通明。此時,在瀋陽皇朝萬鑫大廈,一則因煙花燃放引起的火災,正沿東西兩側迅速蔓延,樓層玻璃窗逐漸破碎,大火進入室內,燒穿戶門衝向走廊,節日喜悅的氛圍就此打破……接到報警電話的瀋陽

歡迎工作到五年的Java工程師朋友們加入Java 891219277 內提供免費的Java架

IO流(輸入流、輸出流)位元組流、字元流  1.位元組流: InputStream、OutputStreamInputStream抽象了應用程式讀取資料的方式;OutputStream抽象了應用程式寫出資料的方式;   2.EOF=End 讀到-1就讀到結尾   3.輸入流的基本方法: int b=in

linux學習筆記——sudo:無法切換為sudoers組ID不允許的操作

登陸ubantu,開terminal,用sudo  發現 sudo: 無法切換為 sudoers 組ID: 不允許的操作 sudu:setresuid() [0,0,0] -> [115,-1,-1]: 不允許的操作 用su提示:setgid: 不允許的操作 最

hadoop集無法啟動namenode ERROR namenode.NameNode: Failed to start namenode.

無法啟動 cor html node app fail 默認 prope value 我查看了網上的原因,把core.site.xml裏的以下配置復制到了hdfs.site.xml裏,三臺機器都要復制,復制完以後在重新啟動hadoop集群,嗯~~~啟動了一個nn,還有一個n

JavaScript設計模式、面向對象編程

this 依賴 人在 turn obj log javascrip 體會 創建 JavaScript面向對象編程 眾所周知,JS作為一門腳本語言,由於其設計者在設計JS的時候,也僅僅用了很少的時間就完成了JS這門語言的創建,JS雖然擁有著腳本語言的優勢,但是JS也存在著

JavaScript設計模式、面向對象編程(第二節)

得到 調用 帶來 方式 get 特權 style 方法封裝 面向對象 一、封裝 面向對象編程思想其中的一個特點就是封裝,通俗的講法就是把需要的功能方向在一個對象裏。遺憾的是,對於JS這種解釋性的弱類型語言沒有經典強類型語言中那樣通過class等關鍵字實現類的封裝方法,j

JAVA維數組

取數 使用 引用類型 spa 分配內存 ever () 最小 tint 1 /* 2 數組:存儲同一種數據類型的多個元素的容器。 3 4 定義格式: 5 A:數據類型[] 數組名; 6 B:數據類型 數

JavaScript設計模式、面向對象編程(第三節)

設置 style 擁有 ray 進行 如果 eat gree 而在 一、繼承 js並沒有繼承這一個現有的機制,所以我們所說的繼承是通過JS本身的機制去實現的。 1、類式繼承 1 // 類式繼承 2 3 // 父類 4 function SuperClas

與其放在電腦裏占內存,還不如拿出來幫助小白白之html篇之四

ext one mar solid ul li lis class eight seo <!doctype html><html><head><meta charset="utf-8"><title>無標題文檔&l

與其放在電腦裏占內存,還不如拿出來幫助小白白之html篇之一

電腦 text htm document cal ngs all ply cti <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <t

與其放在電腦裏占內存,還不如拿出來幫助小白白之html篇之二

ext tco confirm char utf type lang html click <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8">