2007年夏天,當(dāng)我第一次以資深MySQL架構(gòu)師的身份——這份工作一直伴隨我走到現(xiàn)在——參與到企業(yè)業(yè)務(wù)當(dāng)中時(shí),議程備忘中的第一項(xiàng)內(nèi)容就是討論開發(fā)模式問題。2005年,也就是當(dāng)時(shí)的兩年之前我們推出了5.0版本,而接下來將要接棒的新一代MySQL 5.1還要一年多才會(huì)面世。但大家一致對(duì)MySQL 5.0與MySQL 5.1的開發(fā)模式感到不夠理想,因此我們就如何做出改善問題展開了大量討論。
【51CTO精選譯文】五年時(shí)光匆匆而過,時(shí)至今日我們使用的是被稱為“里程碑”(Milestone)的發(fā)布模式,并已經(jīng)開始以此為基礎(chǔ)努力打造第二個(gè)GA版本。
新舊兩套開發(fā)模式間的不同之處
現(xiàn)在我們來聊聊新舊兩種開發(fā)模式之間的幾項(xiàng)主要差異。
我認(rèn)為目前我們所使用的開發(fā)模式,其最重要的特性就是整個(gè)開發(fā)流程以2到4個(gè)月為周期始終處于隨時(shí)可發(fā)布狀態(tài),并且能夠穩(wěn)定地按照每6個(gè)月推出新GA版本的進(jìn)度進(jìn)行運(yùn)作。對(duì)于可發(fā)布狀態(tài),我們的定義為:產(chǎn)品質(zhì)量嚴(yán)格符合候選發(fā)布版的相關(guān)標(biāo)準(zhǔn)。在過去的開發(fā)模式中,我們的標(biāo)準(zhǔn)相對(duì)比較寬松,所謂可發(fā)布狀態(tài)是指當(dāng)前版本到達(dá)候選發(fā)布要求——但由于在測(cè)試階段仍然可能有新功能不斷被添加進(jìn)來,因此整個(gè)發(fā)布流程周期常常長達(dá)兩年,而不是現(xiàn)在的2到4個(gè)月。
新模式給MySQL新代碼帶來的影響
那么這種新模式會(huì)給我們的MySQL新代碼開發(fā)工作帶來哪些影響呢?在我看來,這意味著新代碼必須以小規(guī)模模塊的形式添加到產(chǎn)品中來,換句話說新代碼中不能混雜過多舊代碼,因?yàn)檫@可能會(huì)帶來新的未知沖突及不穩(wěn)定因素??傊绻枰騇ySQL Server中某個(gè)復(fù)雜程度較高的區(qū)域添加新功能,我們會(huì)首先對(duì)該區(qū)域進(jìn)行重新設(shè)計(jì),然后才著手實(shí)施功能添加工作。如此一來,我們就在某種程度上保持了開發(fā)流程的穩(wěn)定性始終擁有最高優(yōu)先級(jí)。而在過去,我們向MySQL Server中添加新功能時(shí)往往會(huì)造成系統(tǒng)穩(wěn)定性優(yōu)先級(jí)別的下降,這對(duì)于一款開發(fā)模式而言當(dāng)然不是什么好事。
有趣的是,隨著穩(wěn)定性在開發(fā)流程中的重要性得到進(jìn)一步增強(qiáng),我們反而獲得了放手處理新功能的廣闊空間!不過有時(shí)候我們未必能按照自己的預(yù)期快速開發(fā)出特定的新功能。如果一項(xiàng)新功能會(huì)對(duì)MySQL Server中復(fù)雜性較高的某些代碼造成干擾,那么為了系統(tǒng)穩(wěn)定性的考量,我們會(huì)事先進(jìn)行一系列準(zhǔn)備工作及測(cè)試流程,這是此類新功能出臺(tái)的必要前提。但是對(duì)于大部分與MySQL Server復(fù)雜區(qū)域不相關(guān)的邊緣新功能來說,整個(gè)添加過程則更加順暢同時(shí)輕松愉快。
新模式下的主要功能開發(fā)流程
接下來要談的是如何在這套模式中處理主要功能的添加工作,其中最需要注意的因素在于如何保證新代碼擁有良好的排布結(jié)構(gòu)。也就是說在添加新功能時(shí),我們不能簡單地從編寫代碼著手,而應(yīng)該首先思考現(xiàn)有代碼結(jié)構(gòu)能否與正在開始的新功能緊密契合。舉例來說,我們?cè)贛ySQL 5.6版本中添加了眾多新功能,而LOCK_open正是其中之一。如果按照以往傳統(tǒng)的MySQL Server開發(fā)模式,我們會(huì)直接將新功能添加進(jìn)來,然后檢測(cè)它會(huì)與哪些現(xiàn)有MySQL Server功能組件發(fā)生沖突,并確保所有已經(jīng)確定的新問題在新的GA版本發(fā)布之前得到解決。但現(xiàn)在我們的思路更先進(jìn)、處理方式也完全不同。首先我們會(huì)建立一系列重新設(shè)計(jì)項(xiàng)目,將LOCK_open主功能完全隔離起來,這樣就保護(hù)了運(yùn)行中的元數(shù)據(jù)免遭破壞、同時(shí)也為連接中的元數(shù)據(jù)提供了緩沖措施。在以上步驟的執(zhí)行過程中,我們可以繼續(xù)進(jìn)行手頭的其它MySQL 5.6開發(fā)工作,而且原本非常重要的LOCK_open功能更新能夠以小補(bǔ)丁的形式添加進(jìn)主系統(tǒng)當(dāng)中,同時(shí)也讓功能升級(jí)變得更加安全。
新開發(fā)模式的靈感來源
我們之所以選擇這種全新的開發(fā)模式,其靈感顯然源自以Linux內(nèi)核為代表的其它幾個(gè)典型開源項(xiàng)目。它們的成功為我們的新思路提供了指導(dǎo)與借鑒。
從舊模式向新模式的轉(zhuǎn)換
盡管新模式的優(yōu)勢(shì)如此明顯,但從舊模式轉(zhuǎn)換為新模式的道路卻并不平坦。在決定發(fā)起變革之后,我們制定了新的開發(fā)流程,并在其中添加了多項(xiàng)意義重大的新功能。然而流程的出臺(tái)并不意味著實(shí)際工作的順利進(jìn)行,概念與可發(fā)布狀態(tài)之間仍然相隔十萬八千里,因此我們做出了“一個(gè)艱難的決定”——以MySQL 5.1開發(fā)流程為基礎(chǔ)將一切過去推倒重來。這套新流程是我們首次在開發(fā)過程中使用“里程碑”模式的嘗試,但原先的模式中同樣包含很多意義重大的理想方案,因此我們需要一步步將遺留資源與新規(guī)劃加以整合。整個(gè)過程持續(xù)了數(shù)年之久,由于新的開發(fā)流程對(duì)于新功能的運(yùn)作效果及穩(wěn)定性要求極高,因此進(jìn)度不快也在情理之中。不過現(xiàn)在我們終于大功告成,所有有價(jià)值的功能都已經(jīng)被遷移到新模式當(dāng)中,其它的則要么直接棄用、要么利用其它方式加以替代。
對(duì)于未來MySQL開發(fā)的影響
那么新模式的引入到底會(huì)在當(dāng)下與未來給MySQL開發(fā)工作帶來哪些影響呢?首先要強(qiáng)調(diào)的是,我們?cè)贛ySQL 5.6中添加了200項(xiàng)新功能,這表明新的開發(fā)模式確實(shí)能為我們的用戶及消費(fèi)者帶來大量激動(dòng)人心的革命性升級(jí)與改進(jìn)。希望這套開發(fā)模式能夠繼續(xù)指引開發(fā)工作順利開展,我們也會(huì)繼續(xù)努力為MySQL技術(shù)社區(qū)帶來更多更具吸引力的功能。作為一位架構(gòu)師,我非常自豪地關(guān)注著MySQL技術(shù)團(tuán)隊(duì)的一舉一動(dòng),也為他們針對(duì)MySQL架構(gòu)做出的改善而深感驕傲。相信隨著新模式的逐漸完善與新功能的持續(xù)加入,MySQL會(huì)為全世界使用者帶來更加光彩奪目的特性。
原文鏈接:
http://mikaelronstrom.blogspot.hk/2012/10/an-architects-view-of-mysql-development.html
原文標(biāo)題:An architect's view of the MySQL Development model
【編輯推薦】
- MySQL源碼學(xué)習(xí):MDL字典鎖
- MySQL Cluster開發(fā)環(huán)境簡明部署
- MySQL的四種不同查詢的分析
- MySQL的四種不同查詢的分析
- MySQL內(nèi)存表的特性與使用介紹