系統(tǒng)重構(gòu)的最佳實踐_第1頁
系統(tǒng)重構(gòu)的最佳實踐_第2頁
系統(tǒng)重構(gòu)的最佳實踐_第3頁
系統(tǒng)重構(gòu)的最佳實踐_第4頁
系統(tǒng)重構(gòu)的最佳實踐_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 系統(tǒng)重構(gòu)的最佳實踐EGONetworks 微信號 egonetworks功能介紹 EGO是極客邦科技旗下高端技術(shù)人聚集和交流的組織,以CTO、技術(shù)VP等技術(shù)領(lǐng)導(dǎo)者為服務(wù)對象,采用實名付費會員制,嚴(yán)格審核會員資格,旨在組建全球最具影響力的技術(shù)領(lǐng)導(dǎo)者社交網(wǎng)絡(luò),線上線下相結(jié)合,聯(lián)結(jié)杰出的技術(shù)領(lǐng)導(dǎo)者學(xué)習(xí)和成長。我們?nèi)粘9ぷ髦?,系統(tǒng)重構(gòu)應(yīng)該是最讓人頭疼的了,無論是錯綜復(fù)雜還是簡單的系統(tǒng),在發(fā)展的過程中都會經(jīng)歷重構(gòu),系統(tǒng)重構(gòu)也是任何技術(shù)團(tuán)隊無法回避的問題,在我服務(wù)的多家公司,幾乎每家公司都經(jīng)歷了一次甚至多次系統(tǒng)的重構(gòu),本文就我在多年的重構(gòu)工作中總結(jié)出來的幾點建議分享給各位朋友,希望能夠給朋友們帶來幫助。

2、重構(gòu)確定并且聚焦目標(biāo)首先我相信我們大家都確信,系統(tǒng)重構(gòu)會有巨大的成本投入,業(yè)務(wù)可能需要暫緩、新系統(tǒng)引入的問題( BUG )會帶來業(yè)務(wù)的不穩(wěn)定,存在研發(fā)人員投入開銷還有各種隱性成本等等。我們服務(wù)的商業(yè)公司,獲取利潤是最終目的,投入成本做一個項目肯定要獲得收益。重構(gòu)的目標(biāo)一定要能夠獲得更大的提升,無論是業(yè)務(wù)流程、系統(tǒng)性能或是其他方面,如果僅僅一個很小的改善,完全沒必要大費周章。因此重構(gòu)之前權(quán)衡好成本,重構(gòu)是否能夠獲得良好的收益?無論如何進(jìn)行系統(tǒng)重構(gòu)都是一次傷筋動骨的過程,是涅槃重生還是飛蛾撲火,完全取決我們項目執(zhí)行的過程中是否明確了目標(biāo),且一直聚焦于目標(biāo)的實現(xiàn)。保持目標(biāo)的聚集是能否取得良好結(jié)果的必

3、要條件。如果我們僅僅確立了目標(biāo),但沒有聚集于目標(biāo),反而在多個非重要的節(jié)點投入較大資源,必然會導(dǎo)致我們對目標(biāo)的投入降低。工作中的原始資本投入都是 8 個小時,這就需要我們明確目標(biāo)聚焦目標(biāo),把有限的資源投入到最重要的事情中,才能獲得既定目標(biāo)的良好結(jié)果。重構(gòu)要有可量化的指標(biāo)團(tuán)隊確認(rèn)了重構(gòu)的目標(biāo)之后,下一步要將目標(biāo)量化,確定好目標(biāo)之后就能夠確認(rèn)邊界,圍繞在邊界內(nèi)將需要實現(xiàn)的事項一一羅列出來,盡可能對每個實現(xiàn)制定可以用數(shù)據(jù)清晰表現(xiàn)出來的指標(biāo),比如用戶操作的響應(yīng)時間縮短到 100 毫秒、單元測試的覆蓋率達(dá)到 80% 、發(fā)現(xiàn)問題時長降低到 30 分鐘以內(nèi)等等。有了明確的數(shù)據(jù)指標(biāo)我們才能評估最終是否獲得了良好

4、收益,這些目標(biāo)必須要在重構(gòu)團(tuán)隊,包括產(chǎn)品、研發(fā)、測試甚至包括業(yè)務(wù)方在內(nèi)達(dá)成一致,團(tuán)隊的目標(biāo)需要清晰明了,防止出現(xiàn)過度或是不達(dá)標(biāo)是最終不能獲得良好收益。重構(gòu)要有更好的質(zhì)量既然決定了要對系統(tǒng)進(jìn)行一次重構(gòu),那么我們肯定要做到的就是要比之前做的更好,如果之前接口響應(yīng)時間在 100 毫秒,而經(jīng)過重構(gòu)之后反而到了 200 毫秒以上,那么大家辛苦付出的努力是不是也更加不值得。而進(jìn)行重構(gòu)往往是一件十分引人注目的事情,一個微小的問題反而容易在眾人注目下變得非常嚴(yán)重的問題。為了減少引起不必要的麻煩,重構(gòu)團(tuán)隊就更加要注重各個方面的問題,無論是系統(tǒng)性能、用戶體驗還是 BUG 數(shù)量等。重構(gòu)之前要和業(yè)務(wù)方溝通技術(shù)團(tuán)隊進(jìn)行

5、系統(tǒng)重構(gòu)的工作的時候往往忽略掉了業(yè)務(wù)方,認(rèn)為這是技術(shù)團(tuán)隊內(nèi)部的事情,不需要知會業(yè)務(wù)方,這個想法是非常錯誤的,進(jìn)行重構(gòu)的目標(biāo)就是為了改善改進(jìn)業(yè)務(wù)流程,而不去和業(yè)務(wù)方提前溝通進(jìn)行閉門造車,最后的結(jié)果很可能和進(jìn)行重構(gòu)的初衷背道而馳。進(jìn)行系統(tǒng)重構(gòu)首先我們必須了解現(xiàn)有系統(tǒng)的業(yè)務(wù)需求,是否有待改進(jìn)的業(yè)務(wù)需求點,是否有新的業(yè)務(wù)訴求等,這些需求往往會影響到我們重構(gòu)的進(jìn)度和目標(biāo),甚至出現(xiàn)南轅北撤的事情。技術(shù)團(tuán)隊和業(yè)務(wù)方往往對待問題的出發(fā)角度不同,思考問題的方式也不同,在進(jìn)行重構(gòu)之前和業(yè)務(wù)方溝通獲得業(yè)務(wù)方的支持,往往能夠事半功倍。例如,我的團(tuán)隊在進(jìn)行一塊業(yè)務(wù)系統(tǒng)重構(gòu)的時候進(jìn)入到了系統(tǒng)切換的試運行的階段,由于拿出的

6、方案給到業(yè)務(wù)方無法被業(yè)務(wù)方接受,業(yè)務(wù)方提出的解決方案我們還需要進(jìn)行再次開發(fā),對整個項目進(jìn)度影響了足足一個月時間之多。吸取教訓(xùn)的我們在進(jìn)行下一個項目的時候提前和業(yè)務(wù)方進(jìn)行了溝通,業(yè)務(wù)方從他們的角度給予了很多的意見和建議以及業(yè)務(wù)未來的發(fā)展方向的指引,我們發(fā)現(xiàn)這些建議和意見幫助我們更好理解業(yè)務(wù)的同時也大大的降低了我們工作量,減少了我們很多冗余的設(shè)計。重構(gòu)應(yīng)該用迭代的方式參與過重構(gòu)項目的朋友都知道,重構(gòu)項目往往是個時間跨度很長的工作,少則一兩個月多則一年半載都有,如果不將整個重構(gòu)進(jìn)行合理拆分,而是采用全部開發(fā)完成,再進(jìn)行系統(tǒng)切換的方式會對整個重構(gòu)引入很大的風(fēng)險。首先長時間的時間跨度內(nèi)業(yè)務(wù)會進(jìn)行持續(xù)變更

7、,其次團(tuán)隊面臨長時間沒有結(jié)果輸出面臨來自各個方面的壓力,還有系統(tǒng)問題持續(xù)累積,這種蒙頭狂奔的方式往往造成了項目失敗或是目標(biāo)便宜。而采用迭代方式進(jìn)行重構(gòu),可以以更小的顆粒度持續(xù)交付工作成果,交付 - 試用 - 反饋 - 調(diào)整,持續(xù)有交付,持續(xù)有反饋,持續(xù)調(diào)整能夠保證團(tuán)隊的目標(biāo)不會偏移,形成一個正向循環(huán),保證最后的重構(gòu)目標(biāo)。重構(gòu)要清晰了解舊系統(tǒng)知己知彼,百戰(zhàn)不殆,系統(tǒng)重構(gòu)是一個與舊系統(tǒng)對抗的過程,不對舊系統(tǒng)的弄的清清楚楚怎么能夠比舊系統(tǒng)做的更好呢?其實了解現(xiàn)有系統(tǒng)是一個學(xué)習(xí)的過程,如果有舊系統(tǒng)的開發(fā)人員還在公司,那么就事半功倍了,舊系統(tǒng)的開發(fā)同學(xué)幫忙給做次分享,省去了我們重構(gòu)團(tuán)隊很多的工作,比直接

8、去讀代碼更能清晰明了的了解到舊系統(tǒng)的相關(guān)知識,以及有哪些需求點和應(yīng)該注意的問題等等,通過學(xué)習(xí)和了解舊系統(tǒng)設(shè)定目標(biāo)基準(zhǔn)值避免引入老舊問題,也是避免重蹈覆轍的一個好辦法。重構(gòu)要提前規(guī)劃系統(tǒng)切換方案不知道朋友有沒有遇到過,重構(gòu)完系統(tǒng)發(fā)現(xiàn),如果進(jìn)行新舊系統(tǒng)的切換是個難題。我們以前遇到過由于沒有提前做好規(guī)劃和切換步驟,導(dǎo)致最后臨時抱佛腳,開始使用各種奇葩辦法做系統(tǒng)切換,有的還需要增加額外工作量,甚至各種辦法的刷臉求人,總之這不是一個很好的體驗。系統(tǒng)切換往往是在重構(gòu)中被我們忽略的一個步驟,但是這是非常重要的一個環(huán)節(jié),在做最初的計劃就應(yīng)該考慮到如何進(jìn)行系統(tǒng)切換,一個設(shè)計好的切換方案也應(yīng)該貫穿重構(gòu)始終,避免因

9、為切換方案引起服務(wù)不可用或是引入系統(tǒng) BUG 。尤其是前期整個團(tuán)隊付出巨大努力取得了一定成果的時候,在最后一步切換的時候出現(xiàn)問題,對團(tuán)隊是個非常大的打擊,也使得業(yè)務(wù)方對團(tuán)隊失去信心,帶來很不必要的麻煩。重構(gòu)高度重視系統(tǒng)數(shù)據(jù)一次系統(tǒng)重構(gòu)大多數(shù)情況下會涉及到數(shù)據(jù)結(jié)構(gòu)的修改,對數(shù)據(jù)結(jié)構(gòu)進(jìn)行修改必然引入很大的風(fēng)險,尤其在一些老舊的業(yè)務(wù)系統(tǒng)重構(gòu)精簡,業(yè)務(wù)去掉冗余數(shù)據(jù)的時候,往往需要將老數(shù)據(jù)的業(yè)務(wù)數(shù)據(jù)重新寫入到新系統(tǒng)的數(shù)據(jù)庫。重構(gòu)的目標(biāo)是為了比舊系統(tǒng)更好,無論是性能還是業(yè)務(wù)方面,如果我們對數(shù)據(jù)的操作導(dǎo)致外部依賴舊系統(tǒng)的業(yè)務(wù)無法正常運行,那將是影響 SLA 指標(biāo)的問題。說到系統(tǒng)數(shù)據(jù)有些同學(xué)可能僅僅關(guān)注的是業(yè)

10、務(wù)數(shù)據(jù),其實數(shù)據(jù)也包含了系統(tǒng)運行所產(chǎn)生的日志數(shù)據(jù),無論新舊系統(tǒng)的日志數(shù)據(jù),都是很重要的,如果因為重構(gòu)影響到數(shù)據(jù)的讀取、處理、分析,則是得不償失的事情。重構(gòu)要采用成熟的技術(shù)選型技術(shù)選型是重構(gòu)工作的基石,選擇一套成熟穩(wěn)定的技術(shù)方案是重構(gòu)項目完成的必要條件。有些時候我們引入最新版的數(shù)據(jù)庫雖說會有性能提升但是也會引入一定的不穩(wěn)定因素,之前我們團(tuán)隊在使用 MongoDB 的一個新版本的時候,發(fā)現(xiàn)主從庫的數(shù)據(jù)并不能很好的同步,出現(xiàn)過丟失數(shù)據(jù)的情況,進(jìn)入社區(qū)發(fā)現(xiàn)這個版本使用的用戶很多都反饋了這個問題。這時候我們不得不選擇了大多數(shù)人共同的一個選擇,降低了一個版本來解決問題,相信此類情況比比皆是。在不是很成熟的

11、方案帶來并不顯著的性能提升,反而還會引入不確定的風(fēng)險的時候,我們需要權(quán)衡利弊得失,重構(gòu)更是要保證系統(tǒng)的穩(wěn)定性。技術(shù)方案能否有足夠強大的支撐也是我們需要考慮的一個方面,現(xiàn)在我們團(tuán)隊面對的重構(gòu)是從單體式架構(gòu)往微服務(wù)轉(zhuǎn)變,舊系統(tǒng)的版本構(gòu)建在是 PHP 語言上,新的系統(tǒng)我們由兩個選擇繼續(xù)選擇用 PHP 進(jìn)行重構(gòu)或是采用公司統(tǒng)一的微服務(wù)框架,我們毫不猶豫的選擇了使用公司統(tǒng)一的微服務(wù),這樣做有幾個顯而易見的好處。和公司內(nèi)部進(jìn)行交互更加方便快捷;可以直接獲取成熟的經(jīng)驗;基礎(chǔ)服務(wù)有公司級的支持;以上的好處,顯然對我們能否成功重構(gòu)系統(tǒng)并且獲得足夠的幫助起到了顯著的幫助,反而采用 PHP 進(jìn)行微服務(wù),公司內(nèi)部并無成功經(jīng)驗可以借鑒,業(yè)內(nèi)也并無太多可靠的方案可以進(jìn)行選擇。一個成熟可靠的的技術(shù)方案是我們能否更進(jìn)一步的保障和基石。重構(gòu)更加關(guān)注重視團(tuán)隊成員參與過重構(gòu)的同學(xué)都知道重構(gòu)工作是一項枯燥乏味的工作,往往周期長、復(fù)雜度、難度大、牽扯廣、優(yōu)先級低,而且很有可能是一件費力不討好的工作。開發(fā)一個業(yè)務(wù)方期待的新功能、新模塊往

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論