一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

來自Uber的12條架構(gòu)重構(gòu)經(jīng)驗

 過河卒沖 2016-03-07

對于開發(fā)者來說,架構(gòu)設(shè)計是軟件研發(fā)過程中最重要的一環(huán),所謂沒有圖紙,就建不了房子。在遍地App的互聯(lián)網(wǎng)時代,架構(gòu)設(shè)計有了一些比較成熟的模式,開發(fā)者和架構(gòu)師也可以經(jīng)常借鑒。

但是,隨著應(yīng)用的不斷發(fā)展,最初的架構(gòu)往往面臨著各種問題,比如無法滿足客戶的需求、無法實現(xiàn)應(yīng)用的擴展、無法實現(xiàn)新的特性等等。在這種情況下,我們?nèi)绾伪苊庖恍┛?,盡量比較成功地實現(xiàn)架構(gòu)的重構(gòu),是很多開發(fā)者和架構(gòu)師亟需解決的問題。

在這里,跟大家分享一下Uber的工程主管Raffi Krikorian的12條規(guī)則,并附上一些解讀,希望對大家有所啟發(fā)。

確定重構(gòu)的目的和必要性

看起來這個規(guī)矩有些多余,但是請不要忽略。每一次架構(gòu)的重構(gòu)都是“傷筋動骨”,就像做手術(shù)一樣,即使再成功,也會傷元氣,所以決策者們首先要分析架構(gòu)重構(gòu)的理由和其他備選方案,明確重構(gòu)的目的是為了滿足業(yè)務(wù)需求,并且是不得不做的最佳方案,然后再考慮其他問題。 有時候,經(jīng)過分析就會發(fā)現(xiàn),也許還有其他解決方案,比如增加計算資源,或者重構(gòu)的目的不是為了業(yè)務(wù)需求,那就沒有必要做了。

檢查清單:

  • 架構(gòu)重構(gòu)的原因是什么,是為了滿足業(yè)務(wù)的需要還是只是覺得架構(gòu)不好看?

  • 除了架構(gòu)重構(gòu)之外,還有其他備選方案嗎?是否都分析過這些方案的利弊?

定義“重構(gòu)完成”的界限

如果確定要重構(gòu),那么要把目標(biāo)明確下來,也就是重構(gòu)的邊界條件,怎么才算是“完成”了重構(gòu),目標(biāo)要有數(shù)據(jù)量化,或者有能夠測試的辦法。這也是一個需求分析的過程,如果需求不明確,那么規(guī)格說明書沒法寫清楚,負責(zé)重構(gòu)的團隊也沒有明確的目標(biāo),不能以重構(gòu)的時間或者主觀的判斷為結(jié)束的依據(jù)。前幾天和一朋友聊天,他最近在負責(zé)系統(tǒng)的性能優(yōu)化,也要做一些重構(gòu)的事情,開始的時候團隊的目標(biāo)不明確,大家不知道優(yōu)化到什么程度,所以不敢下手。如果目標(biāo)是提高10%,那么可以從細節(jié)處著手;如果是提高50%,那可能要搞大動作才能實現(xiàn)了。后來目標(biāo)明確之后,團隊才找到合適的辦法。

檢查清單:

  • 重構(gòu)的目標(biāo)可以量化,或者說可以測試嗎?

  • 重構(gòu)完成的標(biāo)準(zhǔn)是什么?得到業(yè)務(wù)部門或者領(lǐng)導(dǎo)的認可了嗎?

漸進式重構(gòu)

現(xiàn)在軟件研發(fā)最流行的就是快速迭代、持續(xù)交付、盡早反饋。這同樣可以用在架構(gòu)的重構(gòu)上,重構(gòu)過程的難度不亞于構(gòu)建一個新產(chǎn)品,所以在設(shè)計重構(gòu)的時候,要引入持續(xù)交付的流程,每一個重構(gòu)步驟或者模塊都要快速部署并得到反饋,以便評估重構(gòu)的效果,及時作出策略調(diào)整。有的讀者會說,我們的架構(gòu)重構(gòu)是釜底抽薪型的,沒法漸進,只能一蹴而就。如果是這種情況,可以考慮在另外一套拷貝的系統(tǒng)中做重構(gòu),經(jīng)過謹慎測試之后,將數(shù)據(jù)和業(yè)務(wù)遷移過去。

檢查清單:

  • 能否把重構(gòu)過程分成小的迭代,每一次改進都能盡快得到反饋?

  • 重構(gòu)過程中的效果能夠定期展示給業(yè)務(wù)部門或者領(lǐng)導(dǎo)嗎?

確定當(dāng)前的架構(gòu)狀態(tài)

在啟動重構(gòu)之前,團隊要對當(dāng)前的架構(gòu)狀態(tài)有清晰的了解,也就是設(shè)定好基準(zhǔn),以便評估重構(gòu)的效果。據(jù)我的經(jīng)驗,負責(zé)重構(gòu)的架構(gòu)師或者開發(fā)者,往往還沒有搞清楚現(xiàn)有的架構(gòu)設(shè)計,就開始重構(gòu)了,結(jié)果經(jīng)常出現(xiàn)這樣的情況:重構(gòu)到某個階段,發(fā)現(xiàn)行不通,然后一拍腦袋說,哦,原來這塊的架構(gòu)是這個樣的,是為了達到某某業(yè)務(wù)需求啊,這塊不能動,得想別的辦法。類似的例子在研發(fā)團隊中時有發(fā)生,也提醒我們要慎重小心。記得有位哲人說過,了解別人很容易,了解自己很難。

檢查清單:

  • 你了解當(dāng)前的架構(gòu)設(shè)計嗎?它的設(shè)計初衷和之前的選型方案知道嗎?

  • 你能給架構(gòu)設(shè)定一個基準(zhǔn)狀態(tài)嗎?

不要忽略數(shù)據(jù)

數(shù)據(jù)的重要性不言而喻,業(yè)務(wù)都是以數(shù)據(jù)流為載體的,所以架構(gòu)重構(gòu)的本質(zhì)就是對于數(shù)據(jù)流的重構(gòu)。數(shù)據(jù)對重構(gòu)的重要性主要體現(xiàn)在兩個方面:在重構(gòu)設(shè)計時,需要考慮業(yè)務(wù)數(shù)據(jù)的需求,重構(gòu)之后的系統(tǒng)對于數(shù)據(jù)的存儲、處理、分析等功能是否有影響;在重構(gòu)過程中,考慮依靠數(shù)據(jù)甚至是實際的數(shù)據(jù)來驗證重構(gòu)的效果,提供評估的支持。

檢查清單:

  • 業(yè)務(wù)數(shù)據(jù)的需求在重構(gòu)設(shè)計中有體現(xiàn)嗎?

  • 重構(gòu)過程中能否通過實際數(shù)據(jù)來驗證效果?

管理好技術(shù)債務(wù)

技術(shù)債務(wù)在平常的軟件研發(fā)過程中也是比較突出的問題,現(xiàn)在單獨拿出來強調(diào)是希望提醒開發(fā)者們:架構(gòu)重構(gòu)往往是為了償還技術(shù)債務(wù),所以請不要在償還技術(shù)債務(wù)的過程中制造技術(shù)債務(wù)了。技術(shù)債務(wù)就像信用卡一樣,會有很高的利息率,就如同給團隊留下了大量的帳務(wù)開銷。組織應(yīng)該培養(yǎng)一種保證設(shè)計質(zhì)量的文化。應(yīng)當(dāng)鼓勵重構(gòu)、同時也應(yīng)當(dāng)鼓勵持續(xù)設(shè)計以及其它有關(guān)代碼質(zhì)量的實踐。在開發(fā)時間中應(yīng)當(dāng)專門抽出一部分以解決技術(shù)債務(wù)。如果沒有合適的照料,那么真實世界中的代碼會變得越來越復(fù)雜難懂。

檢查清單:

  • 團隊對技術(shù)債務(wù)有跟蹤和備忘錄機制嗎?還是開發(fā)人員可以隨意的產(chǎn)生債務(wù)?

  • 針對技術(shù)債務(wù)有定期的培訓(xùn)、回顧機制嗎?

遠離那些虛榮的東西

架構(gòu)的重構(gòu)過程應(yīng)該是以目標(biāo)為導(dǎo)向,換句話說“注重實效”。對于技術(shù)人來說,一個經(jīng)常被輕視的問題在于,喜歡追逐新鮮的熱門技術(shù),這其實是個好事情,說明技術(shù)人勇于創(chuàng)新,不斷接受新技術(shù)。但是對于架構(gòu)的重構(gòu)這樣的關(guān)鍵性任務(wù)來說,是不是新技術(shù)并不重要,重要的是能不能實現(xiàn)重構(gòu)的目標(biāo)。對于新技術(shù)來說,雖然熱度大,但是人才儲備還不足,大家踩過的坑還不多,積累的失敗教訓(xùn)和成功經(jīng)驗還不夠,在這種情況下,建議大家不要頭腦一熱就上馬新技術(shù),應(yīng)該客觀冷靜地評估新技術(shù)和成熟技術(shù)對架構(gòu)重構(gòu)的影響和效果,以數(shù)據(jù)和經(jīng)驗來說話,而不要追趕時髦。

檢查清單:

  • 重構(gòu)的技術(shù)選型是否有詳實的數(shù)據(jù)和專家評估?

  • 選用的技術(shù)是否有良好的人才積累和足夠的經(jīng)驗支持?你是不是實驗小白鼠?

  • 在技術(shù)選型時,是否至少有兩個方案待評估?有沒有成熟的技術(shù)方案?

做好準(zhǔn)備面對壓力

這條軍規(guī)更像是對架構(gòu)師們的心理建議,軟件開發(fā)過程中,壓力無處不在。對于架構(gòu)重構(gòu)來說,壓力來源于多個方面:管理層、團隊成員、同級部門等等。說白了,架構(gòu)重構(gòu)對個人來說往往是一件出力不討好的事情。和做一個新產(chǎn)品能夠取得很高的贊賞相比,重構(gòu)的成績往往并不受領(lǐng)導(dǎo)重視,而且出了問題還要承擔(dān)很大的責(zé)任。從軟件開發(fā)角度看,做新產(chǎn)品是從0到1,而架構(gòu)重構(gòu)是從-1到1,復(fù)雜性和難度通常更大。因此,重構(gòu)的負責(zé)人要提前做好心理準(zhǔn)備,舒緩壓力的一個技巧是,設(shè)置好里程碑,將重構(gòu)的成果量化,并且和業(yè)務(wù)的變化關(guān)聯(lián)起來,定期向利益相關(guān)各方同步狀態(tài),得到大家的理解和支持。

檢查清單:

  • 架構(gòu)的重構(gòu)是否得到了管理層(特別是最高管理層)的支持?他們是否對重構(gòu)的時間、任務(wù)量有直接的認識?

  • 你的重構(gòu)計劃中是否包含了一些可以量化的成果?是否定期向管理層展示這些成果?

了解業(yè)務(wù)

雖然看起來像是一句廢話,但是我想Raffi Krikorian特意把這條提出來一定是有理由的。架構(gòu)重構(gòu)的最終目的是改進業(yè)務(wù),所以對于業(yè)務(wù)的了解將有助于架構(gòu)師和技術(shù)人確定重構(gòu)目標(biāo)的優(yōu)先級和關(guān)鍵路徑。比如,我們需要知道哪些關(guān)鍵業(yè)務(wù)的架構(gòu)是不能碰的,哪些業(yè)務(wù)之間是互相關(guān)聯(lián)的,哪些業(yè)務(wù)的架構(gòu)是需要優(yōu)先重構(gòu)的.....等等。除了了解業(yè)務(wù)本身,我們還需要了解“人”,表面上管理層是重構(gòu)目標(biāo)的裁決者,但實際上業(yè)務(wù)部門的人才是。技術(shù)人需要了解他們的業(yè)務(wù)需求,并將其轉(zhuǎn)化為重構(gòu)目標(biāo)。通過這種方式,架構(gòu)重構(gòu)的意義才能得到具體的體現(xiàn)。

檢查清單:

  • 是否與業(yè)務(wù)部門就架構(gòu)重構(gòu)所能實現(xiàn)的業(yè)務(wù)目標(biāo)進行過充分的討論和確認?

  • 是否對關(guān)鍵業(yè)務(wù)和優(yōu)先重構(gòu)的業(yè)務(wù)進行了確認?

做好面對非技術(shù)因素的準(zhǔn)備

恩......這又是一個不那么讓人舒服的建議。不管你是否愿意相信,技術(shù)在架構(gòu)重構(gòu)(以及其他很關(guān)鍵的公司決策中)的影響因素中并不是最高的,我們還會涉及到商業(yè)利益、管理層偏好、大客戶影響、辦公室zhengzhi、站隊問題等等,對于架構(gòu)師和技術(shù)人來說,這些因素往往不是他們所能掌控的。我們能做的就是,與利益相關(guān)者設(shè)定重構(gòu)目標(biāo),然后,根據(jù)不同的影響因素,調(diào)整目標(biāo)。請記住,不要死扛這個目標(biāo),當(dāng)有人提出不同的意見時,要坦誠地和他們交流,并告知他們?nèi)绾尾杉{意見,那么重構(gòu)目標(biāo)會有變化,然后讓其他利益相關(guān)者也知道這些變化。非技術(shù)因素的影響是客觀存在的,而且從商業(yè)層面來說也是合理的,所以對于技術(shù)人來說要學(xué)會適應(yīng)。

檢查清單:

  • 當(dāng)非技術(shù)因素影響架構(gòu)的重構(gòu)時,你是否對目標(biāo)做了調(diào)整并告知了利益相關(guān)各方?

  • 你是否準(zhǔn)備以開放而不是抵制的心態(tài)來對待非技術(shù)因素的影響?

對于代碼質(zhì)量有所掌握

這和上篇中所提到的“管理好技術(shù)債務(wù)”有異曲同工之處。架構(gòu)的重構(gòu)對代碼質(zhì)量要求很高,一方面是重構(gòu)過程對bug的容忍性比新產(chǎn)品的研發(fā)更低,另一方面也決定了下一次重構(gòu)的難易程度。關(guān)于代碼質(zhì)量的書籍和文章已經(jīng)有很多,在這里只想提醒大家一點:代碼審查是一個非常好的辦法。代碼審查是軟件開發(fā)過程中的必要步驟,既可以幫助被審查者提到代碼質(zhì)量,又可以讓審查者加深對產(chǎn)品的理解。不論團隊多忙,一定要保證代碼提交之前,是經(jīng)過其他成員審核過的,短期來看會占用團隊的時間,長期來看是事半功倍的好事。

檢查清單:

  • 團隊成員是否對代碼質(zhì)量有足夠的重視?是否有獎懲措施?

  • 團隊內(nèi)部是否有代碼質(zhì)量的標(biāo)準(zhǔn)文檔和審查流程?

讓團隊做好準(zhǔn)備

這是Raffi Krikorian列舉的最后一條軍規(guī),是對之前所有建議的總結(jié),我在這里不做解讀了,請大家自我感覺吧。

結(jié)尾

關(guān)于架構(gòu)的重構(gòu),Raffi Krikorian給了很好的建議,不過到底有沒有效果,還是要實踐中檢驗。盡信書不如無書,來源于實踐中的經(jīng)驗是最有價值的,為技術(shù)人所用才有意義。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本不卡在线一区二区三区| 亚洲国产精品无遮挡羞羞| 日韩欧美在线看一卡一卡| 久一视频这里只有精品| 少妇特黄av一区二区三区| 91欧美日韩精品在线| 亚洲精品熟女国产多毛| 亚洲国产成人久久99精品| 91精品日本在线视频| 神马午夜福利一区二区| 亚洲国产精品无遮挡羞羞| 欧美精品亚洲精品一区| 中文字幕av诱惑一区二区| 日韩欧美三级中文字幕| 欧美日韩精品视频在线| av中文字幕一区二区三区在线 | 丰满人妻一二三区av| 免费国产成人性生活生活片| 精产国品一二三区麻豆| 亚洲中文字幕综合网在线| 暴力三级a特黄在线观看| 久久99夜色精品噜噜亚洲av| 黄片免费播放一区二区| 日韩免费国产91在线| 国产福利一区二区久久| 91蜜臀精品一区二区三区| 日本黄色美女日本黄色| 免费在线观看激情小视频| 黄片在线观看一区二区三区| 亚洲夫妻性生活免费视频| 日本不卡一区视频欧美| 热情的邻居在线中文字幕| 好吊色免费在线观看视频| 五月天婷亚洲天婷综合网| 少妇人妻无一区二区三区| 极品少妇一区二区三区精品视频| 小黄片大全欧美一区二区| 国产精品亚洲欧美一区麻豆| 激情五月激情婷婷丁香| 亚洲日本加勒比在线播放| 欧美中文字幕日韩精品|