天天看點

【SDCC 講師專訪】PingCAP CTO黃東旭:重新打造一個 100x 的 MySQL,TiDB 的演進和開發哲學...

編者按: 2016年11月18日-20日,由CSDN重磅打造的年度技術盛會,SDCC 2016中國軟體開發者大會将在北京舉行,本屆大會雲集了100多位國内外頂尖專家和技術大牛,共設新趨勢和新實踐2大主題會場,12個技術專題,以及2個特色技術活動。

有這樣一個開源項目,它僅僅用了兩年時間,便成功地挑戰了MySQL的傳統地位,釋出了分布式NewSQL的産品級實作。它不但快速地赢得了超過5000個 github stars,還收獲了超過600+的fork以及50多個contributions。無論是從網際網路公司和團隊在生産環境中使用或測試的回報,還是從開源社群的活躍程度來看,它在Go/Rust語言類項目中都取得了罕見的成功。

但通常大牛會自己發光發熱而被衆人熟知,在資料庫領域近年來我想大家都或多或少知道PingCAP、TiDB,或者其中的兩位代表人物黃東旭和劉奇,而在SDCC 2016·北京站上我們進行了别緻的安排,請黃冬旭帶來《一個架構的演進和開發哲學》的主題分享,時間為11月18日 16:30-17:15,地點是:京都信苑飯店三層歐式多功能廳。

與此同時,在大會開始前,我們也有幸邀請到了主人公黃冬旭,請他來分享他的技術曆程、創業和相關的心得體會,以及那些可能看起來還是很值得學習的事兒。

【SDCC 講師專訪】PingCAP CTO黃東旭:重新打造一個 100x 的 MySQL,TiDB 的演進和開發哲學...

PingCAP 聯合創始人兼 CTO黃東旭

黃東旭,PingCAP 聯合創始人兼 CTO, 資深 Infrastructure 工程師,擅長分布式存儲系統的設計與實作,開源狂熱分子,開源分布式緩存服務 Codis 的作者,新型開源分布式關系型資料庫 TiDB 的架構師和開發者,緻力于定義下一代的分布式資料庫。

CSDN:請先和大家介紹下您和目前所從事的工作以及關注哪些技術領域?

黃東旭:目前主要從事的工作是分布式系統設計和資料庫核心,簡單來說就是開源的 NewSQL 實作 TiDB。近幾年,一直比較專注分布式存儲系統,最近對分布式計算與傳統關系資料庫理論的結合比較感興趣,另一個方向就是面向雲的資料庫的資源隔離和排程架構。

CSDN:據悉,您國小三年級開始寫代碼,四、五年級學 C 語言,高中時就開始用 Linux,能否分享下您是如何走向技術這條路的?

黃東旭:國小的時候比較喜歡玩遊戲,就是紅白機那種,後來家長買了台小霸王學習機,當時隻有一個 QBasic 的卡帶,另外加上在家裡翻到的一本應該是我媽的大學教材的 Basic 的手冊,一個很偶然的機會就從沉迷遊戲變成沉迷寫遊戲了。在到後來國小四年級左右,家裡實在受不了我的死纏爛打,給我買了台 PC,就開始在這條道路上走到黑了,從 VB 到 C/C++。後來上中學以後,也是一個偶然的機會,拿到了一個 Red hat linux 的發行版,後來開始慢慢了解自由軟體運動和開源運動,深受影響,一路走到了現在。

CSDN:同時,您還喜歡畫畫,會玩搖滾……作為一家創業公司的CTO,如何在工作和生活樂趣之間進行權衡,有什麼心得和體會可分享?

黃東旭:我個人的愛好比較廣泛,但是每玩一個東西的時候都會比較專注,是以效率還蠻高的,我不太認同創業就必須放棄一切個人生活這種說法,我覺得每周至少花一天時間投入到自己的愛好或者單純陪在家人身邊,會給日常的工作補充能量,讓自己效率更高。

另外,把自己搞得筋疲力盡多半是因為方法不對或者時間沒有利用好,我覺得尋求更聰明和更高效的辦法會更重要。還有就是創業不是單打獨鬥,一定要相信自己的夥伴們。

CSDN:聊聊目前 PingCAP 的主要業務及團隊規模?

黃東旭:目前我們在實作開源的分布式關系型資料庫 TiDB,模型上參考了 Google 的 Spanner 和 F1,是 Google 内部的新一代關系型資料庫解決方案,我們認為這是關系型資料庫未來的方向。目前團隊大概 30 人,大多數是資深的分布式系統工程師及資料庫核心工程師。

CSDN:而公司目前最具代表性的産品是 TiDB,據說 TiDB 在設計上特别考慮了主流相容性問題(MySQL),請問是如何設計的?跟中間件方案的差別是什麼?

黃東旭: MySQL 相容是我們早期做的一個很重要的決定,是一方面極大的降低使用者的遷移成本,另一方面我覺得更重要的是我們需要從 MySQL 社群中收集大量 MySQL 的測試用例,來確定實作的正确性,目前我們從 MySQL 的源碼中,社群的各類 MySQL Driver 和 ORM 中,各類使用基于 MySQL 作為後端的開源軟體中收集了千萬級别的測試用例,每在 Github 上送出一個 PR,我們内部的持續內建系統都會跑這些用例保證正确性。需要做到這個級别的相容,走中間件的方案是沒法做到的,比如舉一個最簡單的例子,中間件沒有辦法支援業務透明的跨行事務,而且隔離級别沒法保證,這樣一來,絕大多數的事務的測試就沒法進行,第二中間件并沒有強大的 SQL 引擎,很難支援一些 JOIN 或者子查詢語句,這樣絕大多數的 SQL 正确性測試沒法進行。TiDB 其實正是我們看到的 MySQL 分庫分表和中間件的種種局限後希望徹底解決 MySQL 擴充性問題的産物,如果還繼續走中間件方案是治标不治本的,我們選擇完整的重寫了整個 SQL 層,從 Parser 到分布式 SQL 的執行計劃引擎,除了文法上相容 MySQL 的文法(即便如此,我們也沒有複用 MySQL 的 yacc 檔案),整個 TiDB 沒有一行 MySQL 的代碼,這樣的結果就是帶來了個更強的相容性和靈活性,另外對于大多數複雜查詢,由于 TiDB 是一個分布式的資料庫,可以利用上分布式的優勢及計算資源,對于很多複雜查詢,會比 MySQL 會快的一個數量級。

CSDN:談到開源軟體公司 PingCAP,無法回避的一個問題是開源和商業化的問題,這裡的沖突糾葛,畢竟也是涉及到了錢,請問您是如何解決的?

黃東旭:國内其實一直以來都沒有過一個頂級的開源項目,是以對于開源項目如何商業化一直都沒有什麼先例可以參考,我說說我的看法,首先開源和商業化并不沖突,這個在 Red Hat 這樣傳統的 Lincese + 服務咨詢模式已經能驗證,至少路徑是能走通的,但我覺得這種模式并不高效,未來會有新的模式出現。大客戶并不會因為你的源碼開放而付費,因為對他們來說,有價值的并不是你的源碼,而是你能解決他們的問題,運維支援,商業選件等都是産品的一部分,另外随着雲的普及,對于基礎軟體來說,是一個絕佳的機會,開源+雲能會極度高效的觸及你的目标客戶,而且不會像傳統軟體那樣給使用者帶來被方案綁架的感覺,而且對于一個分布式資料庫來說,Scale 本身就是它的強項,當叢集規模越來越大的時候,我們的維護和部署成本的增長是十分緩慢的,但是商業價值是可以不斷 Scale 的,不管是資源的使用率還是維護成本,對客戶來說一是解決了他們之前沒有辦法解決的事情,第二是沒有方案綁定的風險 (開源+标準的 MySQL 協定),三是成本更低。我認為對于資料庫這類對雲來說高度标準化的服務來說,未來可能更理想的商業化路徑會參考 SasS。至于還有一種說法是開源了被競争對手抄走了怎麼辦?對于資料庫這樣的東西,特别又是大規模的分布式系統,要完全看懂源碼花的時間估計和寫一遍差不多,不過我們寫了大量注釋幫助開發者加速了解(笑),很多地方為什麼這麼設計,為什麼不那麼做,代碼的背後有數不清的思考的過程,這個是沒法寫出來的。另外 TiDB 的主幹分支和 Roadmap 是我們牢牢把控的,第三方分支是如果沒有和主幹合并,是很難有生命力的,這是開源社群的運作規律,就像不會有第二個 Hadoop,也不會有第二個 Docker,就是這個道理。另外,我們是一家徹底擁抱開源的公司,我們對于我們的設計和代碼品質,以及嚴格代碼稽核有着充分的自信,所有的運作模式也是按照全球頂級開源項目的方向去的,這點隻有開源才能讓我們的每個使用者直覺的感受到這個軟體的品質和背後團隊的認真,反而會讓我們進入正向的循環,這對于基礎軟體來說尤其重要。

CSDN:曾作為一名架構師,如今的CTO,能否談下您對架構的了解?

黃東旭:我認為軟體架構首先是對問題的抽象以及一系列堅持的原則,這個抽象會反映作為架構師對于這個問題的了解,有意思的是,随着對問題的了解的深入,抽象本身的演化是漸進的,于是在這演進期間堅持的原則就會變得十分重要,問題的正确抽象會幫助你不斷的适應目前,而堅持的原則會讓抽象的演進過程能夠不偏離主線以适應未來。

CSDN:您認為具備哪些素質才能成為是出色的架構師?

黃東旭:就目前的經曆看來,我覺得是全局觀。很多時候不能拘泥于細節和實作,當然實作也是很重要的,我是覺得不寫代碼的架構師就是耍流氓。但很多時候架構師的決策是需要從全局出發的,比如接口的設計,面對不同的技術方案堅持什麼,如何從全局來控制複雜度,這些決定對未來都會有深遠的影響。

CSDN:PingCAP 未來的路還很長,而停下腳步回憶過往,讓您創業之中感觸最深的是?以及目前覺得最大的難題是?

黃東旭:目前看來感觸最深的就是找到了一群志同道合且在技術上非常厲害的小夥伴,而且在早期的一些比較正确的設計思路和技術選型讓我們少走了很多彎路,目前看試上去還是蠻順利的,和這些聰明人在一起工作真的是享受。在技術上我覺得最大的難題仍然還是測試,雖然我們已經在分布式系統測上走了很遠,我們測試的代碼量比實際資料庫本身還要多,至少在開源世界我覺得少有項目能做到這個程度,但是我仍然覺得也就是剛剛及格,在追求分布式determinstic test的路上,其實學術界也沒有太多的方法可以參考,目前能做到的也隻能是極大的縮短暴露 Bug 的時間,我們在這上面有很多前沿的嘗試,其實以後可以好好的分享一下。其實這也是我經常說的一個觀點,實作一個資料庫并不難,真正難的是證明你是正确的。

歡迎你的到來,讓我們一起暢遊電商架構技術的海洋,我們在SDCC 2016·北京站等你。目前門票火熱銷售八折優惠中,5人以上團購立減800元,點選這裡注冊參會。

【SDCC 講師專訪】PingCAP CTO黃東旭:重新打造一個 100x 的 MySQL,TiDB 的演進和開發哲學...