局部架構(gòu)重構(gòu)
1. 架構(gòu)重構(gòu)的驅(qū)動(dòng)力
- 壞味道驅(qū)動(dòng)
- 規(guī)劃驅(qū)動(dòng)
- 架構(gòu)組織與架構(gòu)過(guò)程中的重構(gòu)
2. 壞味道如何判斷
以下情況忿偷,可能是架構(gòu)的問(wèn)題引起的
- 增加人員但開發(fā)效率沒(méi)有提升
隨著項(xiàng)目的擴(kuò)展需要增加人員,但整體的開發(fā)效率反而降低了
- 系統(tǒng)可用性
不穩(wěn)定所刀,可靠性降低
- 系統(tǒng)擴(kuò)展性
不易于擴(kuò)展支持新業(yè)務(wù)接入
3. 壞味道有哪些
- 組件臃腫
一個(gè)組件里包含太多功能:拆分
- 組建貧血
一個(gè)組建的功能太單一闯估,比如只是簡(jiǎn)單轉(zhuǎn)發(fā)器:砍掉
- 組建缺失
找出公共的功能點(diǎn),抽象為組建
- 組建冗余
相同功能的組建應(yīng)該抽象、整合為一個(gè)組建
- 組建抽象不足
一直隨著業(yè)務(wù)新增或變化頻繁變更
- 組建反向依賴
底層組建依賴高層組建
- 循環(huán)依賴
- 網(wǎng)狀依賴
-長(zhǎng)鏈依賴 - 強(qiáng)依賴
要完成一個(gè)事情一連串的組建都需要隨之修改
- 資源瓶頸
一個(gè)組建成功全部依賴業(yè)務(wù)的瓶頸昔头,如DB、cache影兽、身份校驗(yàn)組建
- 單一故障點(diǎn)
一個(gè)組建失效后揭斧,全部依賴的業(yè)務(wù)都出現(xiàn)故障
4. 客觀評(píng)價(jià)架構(gòu)重構(gòu)方案
以10分制來(lái)劃分,制定可量化的評(píng)判標(biāo)準(zhǔn)
根據(jù)業(yè)務(wù)的重要性要求,選出主要目標(biāo)讹开,確定權(quán)重
制定方案盅视,依據(jù)選擇的標(biāo)準(zhǔn)去評(píng)分,分值不能低于下限
- 一個(gè)組建需要提供很多業(yè)務(wù)依賴旦万,有兩種方案
工程依賴闹击,邏輯抽象并實(shí)現(xiàn)打包為jar,其他業(yè)務(wù)引入依賴:可伸縮性不足
搭建公共服務(wù)成艘,給全部業(yè)務(wù)調(diào)用及訪問(wèn)和處理資源的邏輯:原業(yè)務(wù)的遷移成本高(需要大全部依賴的業(yè)務(wù)都改造)赏半、增加故障點(diǎn)
5. 控制架構(gòu)重構(gòu)風(fēng)險(xiǎn)
重構(gòu)就是做高速公路上換輪胎
重構(gòu)前
原則:消除風(fēng)險(xiǎn)、獲得支持
- 關(guān)鍵技術(shù)準(zhǔn)備
做好技術(shù)預(yù)研
做好物理資源和運(yùn)維能力的支持度
- 架構(gòu)概念驗(yàn)證原型POP
用于驗(yàn)證架構(gòu)設(shè)計(jì)是否滿足業(yè)務(wù)需求
- 確定重構(gòu)項(xiàng)目的目標(biāo)與范圍
一定要做好預(yù)判淆两,根據(jù)待重構(gòu)業(yè)務(wù)緊迫性断箫、時(shí)間要求、關(guān)鍵技術(shù)秋冰、人力仲义、新業(yè)務(wù)支持等現(xiàn)狀,設(shè)定可行的目標(biāo)與范圍
- 明確業(yè)務(wù)影響
重構(gòu)過(guò)程中剑勾,因?yàn)橥度肴肆图嫒菪栽虬D欤聵I(yè)務(wù)研發(fā)肯定需要停下來(lái)一段時(shí)間,不停下來(lái)怎么換輪胎甥材,需要預(yù)判停下來(lái)多長(zhǎng)時(shí)間盯另,接下來(lái)這段時(shí)間有哪些緊急的業(yè)務(wù)要去做,有哪些關(guān)鍵商務(wù)合作在進(jìn)行中洲赵,都要去關(guān)心和提前溝通好
- 曬項(xiàng)目
把業(yè)務(wù)損失風(fēng)險(xiǎn)向上匯報(bào)鸳惯,要有人承擔(dān),需要團(tuán)隊(duì)內(nèi)叠萍、外都知曉芝发,必須有領(lǐng)導(dǎo)知道并支持
- 組建項(xiàng)目團(tuán)隊(duì)
需要各種角色搭配,這樣有利于培養(yǎng)新人
- 創(chuàng)造業(yè)務(wù)需求真空期
詳細(xì)制定重構(gòu)計(jì)劃苛谷,需要人力和時(shí)間辅鲸,告知業(yè)務(wù)方,這段時(shí)間不接收新的業(yè)務(wù)腹殿,并承諾什么時(shí)間點(diǎn)會(huì)重構(gòu)好
重構(gòu)中
原則:短独悴、平、快
- 前置重構(gòu)
把一些小的重構(gòu)項(xiàng)目先做掉锣尉,竟可能的消除項(xiàng)目重構(gòu)的風(fēng)險(xiǎn)
- 嚴(yán)格控制項(xiàng)目的擴(kuò)展
如果有非常必須支持的需求刻炒,必須在老系統(tǒng)上改造,而不是重構(gòu)過(guò)程不成熟的系統(tǒng)上實(shí)現(xiàn)自沧,重構(gòu)后把新業(yè)務(wù)再合入新系統(tǒng)
- 項(xiàng)目切割
項(xiàng)目盡可能的切分坟奥,組成一些列迭代,迭代的上線
重構(gòu)發(fā)布
原則:穩(wěn)、平滑
- 非停機(jī)發(fā)布
- 可快速回滾
- 新舊系統(tǒng)并行運(yùn)行
平滑切換爱谁,流量逐步放開晒喷,并做好監(jiān)控和驗(yàn)證,有技術(shù)访敌、性能凉敲、用戶體驗(yàn)的風(fēng)險(xiǎn)
- 監(jiān)控方案
- 所有方案必須經(jīng)過(guò)測(cè)試
- 檢查項(xiàng)目目標(biāo)是否達(dá)到
- 復(fù)盤
是否達(dá)到目標(biāo),有哪些不足寺旺,有哪些值得我們吸取
二荡陷、 全局架構(gòu)重構(gòu)
如何讓架構(gòu)重構(gòu)交付最大價(jià)值
1. 理解全局架構(gòu)
- 經(jīng)典架構(gòu)模式、視圖
架構(gòu)= 組建 + 關(guān)系 + 原則/約束
RUP的4+1視圖:邏輯迅涮、進(jìn)程、物理徽龟、開發(fā)叮姑、用例
- 更宏觀的架構(gòu)視圖
多視角:業(yè)務(wù)、數(shù)據(jù)据悔、應(yīng)用传透、技術(shù)
描述多個(gè)視角之間的關(guān)系,數(shù)據(jù)如何支持技術(shù)极颓,技術(shù)如何支持應(yīng)用朱盐,應(yīng)用如何支持業(yè)務(wù)
自頂向下,分而治之:用一張大圖全局描述菠隆,必須分層兵琳,比如:
2. 建立全局架構(gòu)基線
- 從業(yè)務(wù)入手:建立L0層基線全局架構(gòu),必須包含完整的業(yè)務(wù)骇径、應(yīng)用躯肌、技術(shù)、數(shù)據(jù)破衔、各種協(xié)議
- 選擇最關(guān)鍵的1級(jí)架構(gòu)域清女,簡(jiǎn)歷完整的L0-L3業(yè)務(wù)、應(yīng)用晰筛、數(shù)據(jù)嫡丙、技術(shù)架構(gòu)視圖
- 建立L0-->L2完整業(yè)務(wù)、應(yīng)用读第、數(shù)據(jù)曙博、技術(shù)架構(gòu)視圖,構(gòu)建完整產(chǎn)品卦方、應(yīng)用羊瘩、數(shù)據(jù)集清單
- 以產(chǎn)品為單元完成L3全面建設(shè)
3. 案例
- 建立樣板文檔,挪列關(guān)鍵元素,統(tǒng)一用wiki管理
- 把應(yīng)用等各種依賴關(guān)系可視化
- 團(tuán)隊(duì)緊密交流尘吗,每天分享梳理出來(lái)的業(yè)務(wù)和技術(shù)逝她,相互了解及借鑒
識(shí)別全局架構(gòu)關(guān)鍵問(wèn)題
- 容量
- 穩(wěn)定
- 新業(yè)務(wù)支持
- 相應(yīng)速度
確定目標(biāo)架構(gòu)
設(shè)計(jì)架構(gòu)演進(jìn)路線的經(jīng)驗(yàn)
- 順勢(shì)而為
與業(yè)務(wù)發(fā)展路線合拍
- 分而治之
邊界優(yōu)先
-專注主線
按住關(guān)鍵業(yè)務(wù)、技術(shù)
輻射周邊業(yè)務(wù)
- 步步為營(yíng)
逐步交付價(jià)值
不要停留在危險(xiǎn)的中間狀態(tài)
- 安全試錯(cuò)
創(chuàng)造生產(chǎn)環(huán)境的架構(gòu)實(shí)驗(yàn)室
三睬捶、更深層次的架構(gòu)重構(gòu)
架構(gòu)組織:專職架構(gòu) + 業(yè)務(wù)架構(gòu)融合
資料
鏈接: https://pan.baidu.com/s/1nbVX1jzLvBa4iDwzlw4mmQ 提取碼: 2egc