转.我在MySQL的那些年
Part1 相遇
2012年的春天,我正在張江的一棟橙黃色的大樓里,窗外的陽光很好,我跟我的小伙伴們正在一起奮力地敲打著鍵盤,隨著一陣輕柔的電話鈴響起,手機(jī)屏幕上顯示出一個(gè)陌生的號(hào)碼,“是不是又是騷擾電話?”沒管他,我接著做自己的事情。但是手機(jī)一直在震動(dòng)著,好像催促著我,我拿起電話接通,那頭傳來一個(gè)非常輕柔而且職業(yè)化的女聲,“您好,我是Oracle的招聘顧問Amy,請(qǐng)問您現(xiàn)在方便嗎…”。
我的職業(yè)生涯從此與MySQL發(fā)生了交集。
Amy告訴我MySQL InnoDB團(tuán)隊(duì)有意在中國(guó)招聘合適的數(shù)據(jù)庫內(nèi)核工程師,問我有沒有興趣加入。MySQL是什么,the world’s most popular open source database,邀請(qǐng)我加入?我想都沒想就回答她:“當(dāng)然有,而且興趣很大!”
Amy是個(gè)非常專業(yè)的HR,非常有效率的安排了我后面的面試事宜,懷著一絲忐忑和興奮,我開始了進(jìn)入MySQL團(tuán)隊(duì)的面試。
面試第一輪:InnoDB團(tuán)隊(duì)manager,Calvin。Calvin是數(shù)據(jù)庫領(lǐng)域的專家,早年中科大畢業(yè)出國(guó)的那批牛人之一(后續(xù)的文章我會(huì)專門介紹MySQL的牛人們)。
面試第二輪:InnoDB性能優(yōu)化專家Innam,Innam是緩沖池性能優(yōu)化的作者。
面試第三輪:InnoDB大神Marko。Marko是InnoDB創(chuàng)始團(tuán)隊(duì)成員之一,存儲(chǔ)引擎技術(shù)的大神級(jí)專家。
面試第四輪:InnoDB架構(gòu)師Jimmy。Jimmy也是數(shù)據(jù)庫內(nèi)核的全能型專家,而且是之前是sybase內(nèi)核團(tuán)隊(duì)的老大。
完整的一套流程走下來,其實(shí)MySQL的面試并沒有想象中的那么多規(guī)則和高難度,前后4輪,基本都是聊天,主要圍繞以前做過的事情和對(duì)數(shù)據(jù)庫內(nèi)核的理解,在面試過程中,讓我印象比較深(比較有趣)的是三件事:
一個(gè)是Innam的口音實(shí)在太重,加上從遙遠(yuǎn)的加拿大打過來,我的英語聽力也的確水平不高,所以好多問題都沒聽懂,當(dāng)時(shí)真的是慌得一批。
另外一個(gè)是Marko用google talk問了一個(gè)如何發(fā)現(xiàn)事務(wù)死鎖的問題,他的打字速度超級(jí)快,以至于我認(rèn)為對(duì)面是個(gè)打字機(jī)器,直到見到他真人才發(fā)現(xiàn),他就是一臺(tái)沒有感情的程序機(jī)器(其實(shí),Marko還是很有意思的一個(gè)人,后面我會(huì)介紹他的一些趣事)。
最后,和Jimmy的面試是在一個(gè)南京西路的咖啡廳里面進(jìn)行的,兩個(gè)人似曾相識(shí)一般聊了很久,Jimmy是特別贊的一個(gè)人,很有親和力。整個(gè)面試的流程總體感覺比較輕松,我也沒有刻意準(zhǔn)備,或許真的是幸運(yùn)吧。
Part2 團(tuán)隊(duì)
就傳統(tǒng)的軟件企業(yè)來說,MySQL的團(tuán)隊(duì)架構(gòu)相對(duì)比較扁平化,層級(jí)很少,像我這樣的基礎(chǔ)員工,離Oracle最大的老板Larry Ellison也就隔了五層。這里面的原因主要是Oracle收購MySQL后的很長(zhǎng)一段時(shí)間里,基本保留了MySQL團(tuán)隊(duì)的原有架構(gòu)和人員,只是做了一些簡(jiǎn)單接入。
整個(gè)MySQL分為好幾個(gè)大的團(tuán)隊(duì),有MySQL kernel,MySQL replication和MySQL NDB等等,這些大的團(tuán)隊(duì)里面又細(xì)分為若干小的團(tuán)隊(duì),比如:MySQL kernel團(tuán)隊(duì)里面又分為優(yōu)化器,server層,InnoDB和QA等。
當(dāng)時(shí),我所在的InnoDB團(tuán)隊(duì)里有base在美國(guó)的Calvin,Kevin,Jimmy,芬蘭的Marko,澳大利亞的Sunny,加拿大的Innam,Michael,瑞典的Mattias,印度的Satya,保加利亞的Vasil,再加上中國(guó)的我,一共只有十一個(gè)人,卻來自八個(gè)不同的國(guó)家,是一個(gè)完全全球化的研發(fā)團(tuán)隊(duì)。團(tuán)隊(duì)里的每一個(gè)人都是經(jīng)驗(yàn)豐富的數(shù)據(jù)庫內(nèi)核程序員,比如:Marko是2003年就加入InnoDB的資歷最深的大神,Sunny是日后的InnoDB manager,Kevin也是曾經(jīng)參與過Falcon存儲(chǔ)引擎開發(fā)的老將,Jimmy曾經(jīng)領(lǐng)導(dǎo)過Sybase的研發(fā)團(tuán)隊(duì)等等。可以跟那么多大佬一起工作,實(shí)在是一件幸運(yùn)的事情。
2013 Team meeting in Shanghai
右起:Jimmy,Yasufumi, Allen, Kevin, Marko, Shaohua, Mattias, Satya, Sunny, Vasil,Aditya, ??, Annamalai, Bin, Michael, ??, Krunal…
Part3 工作
在InnoDB工作,是一件非常開心的事情,因?yàn)榭梢栽诩疑习?#xff0c;這一點(diǎn)說出來相信就有很多人羨慕了,而這對(duì)于一個(gè)每天需要接送孩子的家長(zhǎng)(我)來說,更是非常難得的福利,不僅可以按照自己的節(jié)奏分配工作和生活的時(shí)間,另外也節(jié)省了大量不必要的通勤時(shí)間,要知道,去一次Oracle在上海的辦公室,來回要兩個(gè)多小時(shí)的時(shí)間。
由于是一個(gè)全球化的團(tuán)隊(duì),而且,成員也比較有經(jīng)驗(yàn),所以,大家的工作方式也很特別。基本上是每個(gè)人都專注于自己的工作,相對(duì)比較獨(dú)立,需要合作的時(shí)候,通過pigeon、郵件或電話溝通。每周會(huì)開一次周會(huì),大家各自匯報(bào)自己的工作進(jìn)展情況,并進(jìn)行討論。
除了周會(huì),我們每年還會(huì)組織一次team meeting,大家從全球各地匯聚到一起,總結(jié)上年的工作,規(guī)劃明年的目標(biāo),談?wù)劺硐?#xff0c;聊聊人生。
在MySQL,研發(fā)的流程非常規(guī)范。以一個(gè)bug修復(fù)為例,大致要經(jīng)歷以下幾個(gè)步驟:
首先,需要根據(jù)bug report來分析并復(fù)現(xiàn)bug,然后找到修復(fù)方法,經(jīng)過和5級(jí)大佬討論后,確定修復(fù)方案并通過bzr創(chuàng)建新的代碼分支。
編碼完成后,還需要?jiǎng)?chuàng)建對(duì)應(yīng)的MTR test case,并和修復(fù)代碼一起,放到reviewboard上面請(qǐng)大佬review。Review的過程可能會(huì)持續(xù)好幾輪,因?yàn)橄馦arko這樣的大神review的時(shí)候非常嚴(yán)謹(jǐn),不會(huì)放過任何一個(gè)出問題的細(xì)節(jié)。
Review完成后,需要把要提交的代碼放到測(cè)試集群上面去測(cè)試。這個(gè)自動(dòng)化測(cè)試系統(tǒng)非常強(qiáng)勁,它會(huì)同時(shí)在多平臺(tái)上面編譯好debug和release版本,再并行測(cè)試。
測(cè)試完成,確認(rèn)沒有問題后代碼才能最終被合并到主干。
我的第一個(gè)提交
以上只是一個(gè)簡(jiǎn)單的bug修復(fù)過程,而對(duì)于更為復(fù)雜的特性開發(fā),步驟還會(huì)包括前期的創(chuàng)建任務(wù)worklog,并在worklog里面相應(yīng)的填寫HLD(High Level Design),LLD(Low Level Design)等設(shè)計(jì)內(nèi)容,并且開發(fā)原型等。
我做的check空間索引的特性worklog
在InnoDB工作的六年時(shí)間里,我一共做了461次提交,做過的主要特性包括,InnoDB支持空間索引,透明加密,新的數(shù)據(jù)字典等等,以下是其中一些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
在這六年里,自己感覺收獲了很多很多,體驗(yàn)到了MySQL這樣一個(gè)開源的數(shù)據(jù)庫軟件產(chǎn)品是如何進(jìn)行研發(fā)的整個(gè)過程,也了解了一個(gè)成熟的研發(fā)體系和國(guó)際化團(tuán)隊(duì)是如何運(yùn)作的。與國(guó)外大神們一起工作,不僅僅是學(xué)習(xí)到了知識(shí)和技能,也從他們身上發(fā)現(xiàn)了一些與我們完全不一樣的工作,生活,乃至思維方式,這對(duì)我來說也是一種很新奇的體驗(yàn)。
Part4 離開
隨著互聯(lián)網(wǎng)公司的爆發(fā)式崛起,以及MySQL生態(tài)鏈的迅速發(fā)展,MySQL團(tuán)隊(duì)的很多成員獲得了更好的發(fā)展機(jī)會(huì)而逐漸離開。而我也開始了和騰訊云數(shù)據(jù)庫CDB內(nèi)核TXSQL的故事。
巧的是,就在我離開MySQL不到一年,Oracle宣布關(guān)閉中國(guó)研發(fā)中心。對(duì)于Oracle來說,面對(duì)著諸如亞馬遜,阿里,騰訊的強(qiáng)勢(shì)沖擊以及去O的浪潮,它將經(jīng)歷一段艱難的轉(zhuǎn)型期。而對(duì)于MySQL來說,在可預(yù)見的未來依舊會(huì)是the world’s most popular open source database,身為曾經(jīng)的MySQL人,我也會(huì)在騰訊繼續(xù)助力MySQL的發(fā)展,通過騰訊云MySQL的內(nèi)核TXSQL為MySQL生態(tài)鏈繼續(xù)貢獻(xiàn)自己的力量。
總結(jié)
以上是生活随笔為你收集整理的转.我在MySQL的那些年的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点个外卖搞定「软中断」
- 下一篇: linux cmake编译源码,linu