架構(gòu)設(shè)計(jì)方法初探

作者 陳彩華
文章轉(zhuǎn)載交流請聯(lián)系 caison@aliyun.com

最近學(xué)習(xí)了阿里資深技術(shù)專家李運(yùn)華的架構(gòu)設(shè)計(jì)教程,頗有收獲,總結(jié)一下。

本文主要介紹架構(gòu)設(shè)計(jì)的相關(guān)概念,系統(tǒng)復(fù)雜度的來源,架構(gòu)設(shè)計(jì)的基本原則和流程。

1 基本概念和目的

架構(gòu)設(shè)計(jì)的基本概念和目的

架構(gòu)設(shè)計(jì)的目的
是為了解決系統(tǒng)復(fù)雜度帶來的問題,并不是要面面俱到,不需要每個(gè)架構(gòu)都具備高性能、高可用、高擴(kuò)展等特點(diǎn),而是要識(shí)別出實(shí)際業(yè)務(wù)實(shí)際情況的復(fù)雜點(diǎn),然后有有針對性地解決問題,即:有的放矢,而不是貪大求全,即:

  • 確定系統(tǒng)邊界。確定系統(tǒng)在技術(shù)層面上的做與不做。
  • 確定系統(tǒng)內(nèi)模塊之間的關(guān)系。確定模塊之間的依賴關(guān)系及模塊的宏觀輸入與輸出。
  • 確定指導(dǎo)后續(xù)設(shè)計(jì)與演化的原則。使后續(xù)的子系統(tǒng)或模塊設(shè)計(jì)在一個(gè)規(guī)定的框架內(nèi)繼續(xù)演化。
  • 確定非功能性需求。非功能性需求是指安全性、可用性、可擴(kuò)展性等。

在實(shí)際情況中,不一定每個(gè)系統(tǒng)都要做架構(gòu)設(shè)計(jì),需要結(jié)合實(shí)際情況。有時(shí)候最簡單的設(shè)計(jì)開發(fā)效率反而是最高的,架構(gòu)設(shè)計(jì)畢竟要投入時(shí)間和人力,這部分投入如果用來盡早編碼,項(xiàng)目也許會(huì)更快。

2 架構(gòu)設(shè)計(jì)復(fù)雜度來源

高性能

高性能

高可用

高可用

可擴(kuò)展性

可擴(kuò)展性

低成本、安全、規(guī)模

低成本、安全、規(guī)模

3 架構(gòu)設(shè)計(jì)三原則

架構(gòu)設(shè)計(jì)三原則

合適原則

GFS為何在Google誕生,而不是在Microsoft誕生,其中Google有那么龐大的數(shù)據(jù)是一個(gè)主要因素,而不是因?yàn)镚oogle的工程師比Microsoft的工程師更加聰明。

真正優(yōu)秀的架構(gòu)都是企業(yè)在當(dāng)前人力、條件、業(yè)務(wù)等各方面約束條件下設(shè)計(jì)出來的,能夠合理地將資源整合一起并發(fā)揮出最大功效,并且能迅速落地。這也是很多BAT出來的架構(gòu)師到了小公司或者創(chuàng)業(yè)團(tuán)隊(duì)反而做不出成績的原因,因?yàn)闆]有大公司的平臺(tái)、資源、積累,只是生搬硬套大公司的做法,失敗的效率非常高。

簡單原則

軟件領(lǐng)域的復(fù)雜性

無論是結(jié)構(gòu)的復(fù)雜性還是邏輯的復(fù)雜性,都會(huì)存在各種問題,所以架構(gòu)設(shè)計(jì)時(shí)如果簡單方案和復(fù)雜的方案都可以滿足需求,最好選擇簡單的方案?!禪NIX編程藝術(shù)》總結(jié)的KISS(Keep It Simple,Stupid!)原則一樣適用于架構(gòu)設(shè)計(jì)。

演化原則

對于軟件系統(tǒng)來說,變化才是主題。軟件架構(gòu)需要根據(jù)業(yè)務(wù)的發(fā)展而不斷變化。
如果沒有把握“軟件架構(gòu)需要根據(jù)業(yè)務(wù)發(fā)展不斷變化”這個(gè)本質(zhì),在做架構(gòu)設(shè)計(jì)的時(shí)候就很容易陷入一個(gè)誤區(qū):試圖一步到位設(shè)計(jì)一個(gè)軟件架構(gòu),期望不管業(yè)務(wù)如何變化,架構(gòu)都穩(wěn)如磐石。

為了實(shí)現(xiàn)這樣的目標(biāo),要么照搬業(yè)界大公司公開發(fā)表的方案;要么投入龐大的資源和時(shí)間來做各種各樣的預(yù)測、分析、設(shè)計(jì)。無論哪種做法,后果都很明顯:投入巨大,落地遙遙無期。更讓人沮喪的是,就算跌跌撞撞拼死拼活終于落地,卻發(fā)現(xiàn)很多預(yù)測和分析都是不靠譜的。

實(shí)踐中,架構(gòu)師要提醒自己不要貪大求全,遵循演化優(yōu)于一步到位的原則,因?yàn)闃I(yè)務(wù)的發(fā)展和變化總是很快的,無論多牛的團(tuán)隊(duì),都不可能完美預(yù)測所有的業(yè)務(wù)發(fā)展和變化路徑。實(shí)踐中可以參考如下建議:

  • 首先,設(shè)計(jì)出來的架構(gòu)要滿足當(dāng)時(shí)的業(yè)務(wù)需要。

  • 其次,架構(gòu)要不斷地在實(shí)際應(yīng)用過程中迭代,保留優(yōu)秀的設(shè)計(jì),修復(fù)有缺陷的設(shè)計(jì),改正錯(cuò)誤的設(shè)計(jì),去掉無用的設(shè)計(jì),使得架構(gòu)逐漸完善。

  • 第三,當(dāng)業(yè)務(wù)發(fā)生變化時(shí),架構(gòu)要擴(kuò)展、重構(gòu),甚至重寫;代碼也許會(huì)重寫,但有價(jià)值的經(jīng)驗(yàn)、教訓(xùn)、邏輯、設(shè)計(jì)等卻可以在新架構(gòu)中延續(xù)。

4 架構(gòu)設(shè)計(jì)的流程

架構(gòu)設(shè)計(jì)的流程

參考資料:

從0開始學(xué)架構(gòu)——李運(yùn)華

架構(gòu)藍(lán)圖--軟件架構(gòu) "4+1" 視圖模型

《阿里巴巴開發(fā)手冊(詳盡版)》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容