作者 賴錚(Allen Lai) 前MySQL官方團隊成員,專注資料庫內核開發近二十年,先后就職于達夢,Teradata,北大方正以及MySQL InnoDB存盤引擎團隊,是達夢資料庫內核,方正XML資料庫,以及MySQL InnoDB的GIS支持,透明加密功能的主要開發者,現任騰訊TEG云架構平臺部資料庫團隊專家工程師,負責騰訊云MySQL資料庫內核的研發,

Part1 相遇
2012年的春天,我正在張江的一棟橙黃色的大樓里,窗外的陽光很好,我跟我的小伙伴們正在一起奮力地敲打著鍵盤,隨著一陣輕柔的電話鈴響起,手機螢屏上顯示出一個陌生的號碼,“是不是又是騷擾電話?”沒管他,我接著做自己的事情,但是手機一直在震動著,好像催促著我,我拿起電話接通,那頭傳來一個非常輕柔而且職業化的女聲,“您好,我是Oracle的招聘顧問Amy,請問您現在方便嗎…”,
我的職業生涯從此與MySQL發生了交集,
Amy告訴我MySQL InnoDB團隊有意在中國招聘合適的資料庫內核工程師,問我有沒有興趣加入,MySQL是什么,the world’s most popular open source database,邀請我加入?我想都沒想就回答她:“當然有,而且興趣很大!”
Amy是個非常專業的HR,非常有效率的安排了我后面的面試事宜,懷著一絲忐忑和興奮,我開始了進入MySQL團隊的面試,
面試第一輪:InnoDB團隊manager,Calvin,Calvin是資料庫領域的專家,早年中科大畢業出國的那批牛人之一(后續的文章我會專門介紹MySQL的牛人們),
面試第二輪:InnoDB性能優化專家Innam,Innam是緩沖池性能優化的作者,
面試第三輪:InnoDB大神Marko,Marko是InnoDB創始團隊成員之一,存盤引擎技術的大神級專家,
面試第四輪:InnoDB架構師Jimmy,Jimmy也是資料庫內核的全能型專家,而且是之前是sybase內核團隊的老大,
完整的一套流程走下來,其實MySQL的面試并沒有想象中的那么多規則和高難度,前后4輪,基本都是聊天,主要圍繞以前做過的事情和對資料庫內核的理解,在面試程序中,讓我印象比較深(比較有趣)的是三件事:
一個是Innam的口音實在太重,加上從遙遠的加拿大打過來,我的英語聽力也的確水平不高,所以好多問題都沒聽懂,當時真的是慌得一批,
另外一個是Marko用google talk問了一個如何發現事務死鎖的問題,他的打字速度超級快,以至于我認為對面是個打字機器,直到見到他真人才發現,他就是一臺沒有感情的程式機器(其實,Marko還是很有意思的一個人,后面我會介紹他的一些趣事),
最后,和Jimmy的面試是在一個南京西路的咖啡廳里面進行的,兩個人似曾相識一般聊了很久,Jimmy是特別贊的一個人,很有親和力,整個面試的流程總體感覺比較輕松,我也沒有刻意準備,或許真的是幸運吧,
Part2 團隊
就傳統的軟體企業來說,MySQL的團隊架構相對比較扁平化,層級很少,像我這樣的基礎員工,離Oracle最大的老板Larry Ellison也就隔了五層,這里面的原因主要是Oracle收購MySQL后的很長一段時間里,基本保留了MySQL團隊的原有架構和人員,只是做了一些簡單接入,
整個MySQL分為好幾個大的團隊,有MySQL kernel,MySQL replication和MySQL NDB等等,這些大的團隊里面又細分為若干小的團隊,比如:MySQL kernel團隊里面又分為優化器,server層,InnoDB和QA等,
當時,我所在的InnoDB團隊里有base在美國的Calvin,Kevin,Jimmy,芬蘭的Marko,澳大利亞的Sunny,加拿大的Innam,Michael,瑞典的Mattias,印度的Satya,保加利亞的Vasil,再加上中國的我,一共只有十一個人,卻來自八個不同的國家,是一個完全全球化的研發團隊,團隊里的每一個人都是經驗豐富的資料庫內核程式員,比如:Marko是2003年就加入InnoDB的資歷最深的大神,Sunny是日后的InnoDB manager,Kevin也是曾經參與過Falcon存盤引擎開發的老將,Jimmy曾經領導過Sybase的研發團隊等等,可以跟那么多大佬一起作業,實在是一件幸運的事情,

右起:Jimmy,Yasufumi, Allen, Kevin, Marko, Shaohua, Mattias, Satya, Sunny, Vasil,Aditya, ??, Annamalai, Bin, Michael, ??, Krunal…
Part3 作業
在InnoDB作業,是一件非常開心的事情,因為可以在家上班,這一點說出來相信就有很多人羨慕了,而這對于一個每天需要接送孩子的家長(我)來說,更是非常難得的福利,不僅可以按照自己的節奏分配作業和生活的時間,另外也節省了大量不必要的通勤時間,要知道,去一次Oracle在上海的辦公室,來回要兩個多小時的時間,
由于是一個全球化的團隊,而且,成員也比較有經驗,所以,大家的作業方式也很特別,基本上是每個人都專注于自己的作業,相對比較獨立,需要合作的時候,通過pigeon、郵件或電話溝通,每周會開一次周會,大家各自匯報自己的作業進展情況,并進行討論,
除了周會,我們每年還會組織一次team meeting,大家從全球各地匯聚到一起,總結上年的作業,規劃明年的目標,談談理想,聊聊人生,
在MySQL,研發的流程非常規范,以一個bug修復為例,大致要經歷以下幾個步驟:
首先,需要根據bug report來分析并復現bug,然后找到修復方法,經過和5級大佬討論后,確定修復方案并通過bzr創建新的代碼分支,
編碼完成后,還需要創建對應的MTR test case,并和修復代碼一起,放到reviewboard上面請大佬review,Review的程序可能會持續好幾輪,因為像Marko這樣的大神review的時候非常嚴謹,不會放過任何一個出問題的細節,
Review完成后,需要把要提交的代碼放到測驗集群上面去測驗,這個自動化測驗系統非常強勁,它會同時在多平臺上面編譯好debug和release版本,再并行測驗,
測驗完成,確認沒有問題后代碼才能最終被合并到主干,

以上只是一個簡單的bug修復程序,而對于更為復雜的特性開發,步驟還會包括前期的創建任務worklog,并在worklog里面相應的填寫HLD(High Level Design),LLD(Low Level Design)等設計內容,并且開發原型等,

在InnoDB作業的六年時間里,我一共做了461次提交,做過的主要特性包括,InnoDB支持空間索引,透明加密,新的資料字典等等,以下是其中一些worklog的串列:
WL#6968 InnoDB GIS: R-tree index support
WL#6455 InnoDB: GEOMETRY datatypes support
WL#6745 InnoDB GIS: support DML operation for InnoDB R-tree Index
WL#7740 InnoDB GIS: Enhance Check Table for InnoDB Spatial index
WL#8548 InnoDB: Transparent data encryption
WL#9290 InnoDB: Support Transparent Data Encryption for Redo Log
WL#9289 InnoDB: Support Transparent Data Encryption for Undo Tablespaces
WL#9531 InnoDB_New_DD: Enable table encryption and transparent compression
WL#9535. InnoDB_New_DD: Remove InnoDB system table and modify the view of their I_S counterparts
WL#9537 InnoDB_New_DD: Support InnoDB table import/export for new DD
在這六年里,自己感覺識訓了很多很多,體驗到了MySQL這樣一個開源的資料庫軟體產品是如何進行研發的整個程序,也了解了一個成熟的研發體系和國際化團隊是如何運作的,與國外大神們一起作業,不僅僅是學習到了知識和技能,也從他們身上發現了一些與我們完全不一樣的作業,生活,乃至思維方式,這對我來說也是一種很新奇的體驗,
Part4 離開
隨著互聯網公司的爆發式崛起,以及MySQL生態鏈的迅速發展,MySQL團隊的很多成員獲得了更好的發展機會而逐漸離開,而我也開始了和騰訊云資料庫CDB內核TXSQL的故事,
巧的是,就在我離開MySQL不到一年,Oracle宣布關閉中國研發中心,對于Oracle來說,面對著諸如亞馬遜,阿里,騰訊的強勢沖擊以及去O的浪潮,它將經歷一段艱難的轉型期,而對于MySQL來說,在可預見的未來依舊會是the world’s most popular open source database,身為曾經的MySQL人,我也會在騰訊繼續助力MySQL的發展,通過騰訊云MySQL的內核TXSQL為MySQL生態鏈繼續貢獻自己的力量,
PS:在后續的系列文章里,我將會陸續跟大家分享一些跟MySQL相關的有意思的事情,讓大家更了解MySQL和它的騰訊版本TXSQL,希望大家喜歡,
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/209599.html
標籤:其他
