以最少時(shí)間完成系統(tǒng)升級(jí)并獲客戶認(rèn)可的開(kāi)發(fā)之道
Dyn的CTO Cory Von Wallenstein,主要負(fù)責(zé)公司IaaS平臺(tái)技術(shù)的決策、創(chuàng)新和發(fā)展的方向的制定。近日他在Wired上撰文給大家描述省時(shí)省力的系統(tǒng)升級(jí)之路——黑暗架構(gòu)(Dark Architecture)。以下為譯文:
任何公司目標(biāo)都是業(yè)務(wù)的增長(zhǎng),但是增長(zhǎng)需要不斷的衍化公司的每個(gè)部門(mén),其中不只是你的技術(shù)基礎(chǔ)設(shè)施。許多企業(yè)一直使用著非常原始的途徑去完成這個(gè)衍化,雖然這里存在著極為簡(jiǎn)單的解決方案。
而公司升級(jí)其基礎(chǔ)設(shè)施及系統(tǒng)架構(gòu)一般出于以下3個(gè)原因:
為了規(guī)模——以獲得當(dāng)下十倍或百倍的容量
為了性能——試圖移除一個(gè)系統(tǒng)瓶頸,讓工作的執(zhí)行更加快速
為了解耦——為了獲得更好的可靠性及可維護(hù)性,當(dāng)然也為了將來(lái)的擴(kuò)展做努力
早先的方法屬于全盤(pán)否定類:首先制定一個(gè)3個(gè)月的計(jì)劃,然后開(kāi)發(fā)人員開(kāi)始全力以赴的打造新系統(tǒng),希望3個(gè)月后能順利完成。事實(shí)上經(jīng)常出現(xiàn)的情況就是3個(gè)月變成6個(gè)月(不可避免的比預(yù)期時(shí)間要長(zhǎng)),而業(yè)務(wù)從老系統(tǒng)遷移至新系統(tǒng)也面臨著非常高的風(fēng)險(xiǎn)。當(dāng)新系統(tǒng)100%實(shí)現(xiàn)老系統(tǒng)所有功能后,遺留的舊系統(tǒng)便只能被廢棄。
鑒于這六個(gè)月的開(kāi)發(fā)時(shí)間里缺乏優(yōu)先順序及舊系統(tǒng)的其它改進(jìn),業(yè)務(wù)毫無(wú)疑問(wèn)的喪失了靈活性。這種更新方式就像是“全部”或“一無(wú)所有”的命題,并且直到開(kāi)發(fā)團(tuán)隊(duì)完成新系統(tǒng)的建設(shè)并且將所有業(yè)務(wù)轉(zhuǎn)移到新系統(tǒng),這段時(shí)間內(nèi)對(duì)業(yè)務(wù)的提升基本為零。而面對(duì)來(lái)自客戶的抱怨,技術(shù)團(tuán)隊(duì)的士氣也一滑再滑。這種方法需要改進(jìn)的地方主要?dú)w結(jié)于3個(gè)方面:
立刻給客戶帶來(lái)價(jià)值——我們沒(méi)必要一直等到整個(gè)新系統(tǒng)完工并投入使用再實(shí)現(xiàn)價(jià)值
減少成品引進(jìn)的風(fēng)險(xiǎn)——我們需要避免“全部”或“一無(wú)所有”的遷移計(jì)劃
保持業(yè)務(wù)提供靈活性——可以選擇優(yōu)先級(jí),最少要保證核心價(jià)值的及時(shí)交付(如果可以選擇的話,我們要做到最快的解決并交付相對(duì)重要的解決方案)
針對(duì)以上解決方案:黑暗架構(gòu)的實(shí)現(xiàn)途徑
黑暗架構(gòu)(Dark Architecture)不僅是一種思想,同樣還是個(gè)技術(shù)解決方案;用以解決規(guī)模、性能及耦合問(wèn)題,黑暗架構(gòu)不僅讓硬件通向成功而且可以讓員工有一個(gè)清晰的思維??梢酝ㄟ^(guò)以下途徑實(shí)現(xiàn):
優(yōu)先提升系統(tǒng)中的工作流,而不是改變系統(tǒng)的組件
并行運(yùn)行老系統(tǒng)及黑暗架構(gòu)
給兩個(gè)系統(tǒng)同時(shí)發(fā)送輸入數(shù)據(jù),收集輸出數(shù)據(jù),對(duì)比輸出結(jié)果,然后拋棄一個(gè)
使用暗黑架構(gòu)途徑,運(yùn)作方式將如下所示:
1. 在接觸代碼與系統(tǒng)之前,先按照以下順序優(yōu)化系統(tǒng)中的數(shù)據(jù)流:短板、機(jī)遇、業(yè)務(wù)價(jià)值或者其它經(jīng)驗(yàn)證后對(duì)業(yè)務(wù)有意義的事情。
2. 于其著眼考慮組件相關(guān)(比如使用Cassandra替代原系統(tǒng)中的MySQL),不如考慮流系統(tǒng)(比如,為顧客X執(zhí)行一次通配符查詢類型圖渲染大約需要40秒,而使用其它圖渲染類型要快的多)。這個(gè)步驟能讓你看到系統(tǒng)中的弊端所在,所以你可以首先聚焦這個(gè)瓶頸的解決方案,然后再考慮其它的問(wèn)題。
3. 如果使用流優(yōu)化優(yōu)先(假設(shè)優(yōu)化的功能占整個(gè)系統(tǒng)的2%),事實(shí)上下一步做的并不是直接建立功能。取而代之的是為這些功能建立相關(guān)支架,讓系統(tǒng)可以同時(shí)使用兩個(gè)不同的方式進(jìn)行計(jì)算(為了對(duì)比輸出結(jié)果,有差異時(shí)做記錄)。
黑暗架構(gòu)具體實(shí)踐方案
從實(shí)際情況出發(fā),這可能是復(fù)制一個(gè)網(wǎng)絡(luò)服務(wù)調(diào)用(舊的和新的)或者是復(fù)制數(shù)據(jù)庫(kù)交互調(diào)用(同樣一新一舊),然后對(duì)比返回值,如果存在不同則將其記錄到一個(gè)文件或者服務(wù)器又或者是消息總線中。
在輸入/輸出支架就緒后,你就可以著手功能的建立。實(shí)現(xiàn)系統(tǒng)中最短板的2%功能,就緒后,將其投入產(chǎn)品中的黑暗架構(gòu)。它將會(huì)與舊系統(tǒng)一起接收產(chǎn)品的輸入數(shù)據(jù),雖然最后它的計(jì)算結(jié)果會(huì)被拋棄,但是在這個(gè)過(guò)程中我們可以與舊系統(tǒng)的輸出值進(jìn)行比較。如果輸出的結(jié)果不同,記錄并進(jìn)行檢查。這讓你可以更熟悉你的新系統(tǒng),并且在具體操作中獲得一些實(shí)際經(jīng)驗(yàn)。
一旦確定新的系統(tǒng)可以正常工作并且達(dá)到了渴望的性能或者是擴(kuò)展性提升,將輸出轉(zhuǎn)換成新的系統(tǒng)。這樣,實(shí)現(xiàn)的只是系統(tǒng)中2%最短板的功能,其它功能則沿用舊系統(tǒng)的遺留。如此等于改動(dòng)2%的功能,花費(fèi)了一小部分時(shí)間就交付了整個(gè)新系統(tǒng)的價(jià)值。
使用黑暗架構(gòu)得到的收益:
士氣高昂——有什么比技術(shù)人員看到自己成果很快被投入使用來(lái)的更振奮人心?
客戶肯定——他們頭痛的問(wèn)題被解決了
降低風(fēng)險(xiǎn)——在項(xiàng)目重寫(xiě)的過(guò)程中,新系統(tǒng)已經(jīng)得到實(shí)際驗(yàn)證
下面看一下有更多高優(yōu)先級(jí)流需要優(yōu)化的情況——占整個(gè)系統(tǒng)的20%,使用黑暗架構(gòu)途徑,業(yè)務(wù)將很快的發(fā)現(xiàn)自己的方向:
持續(xù)更新流,直到系統(tǒng)100%都被遷移
對(duì)剩下的80%功能與業(yè)務(wù)優(yōu)先進(jìn)行評(píng)估
如此可見(jiàn)黑暗架構(gòu)的強(qiáng)大作用,在最短時(shí)間解決系統(tǒng)短板的前提下還擁有選擇更高的靈活性,可以從容對(duì)業(yè)務(wù)優(yōu)先進(jìn)行處理。